无法在 flutter bottom sheet,dialogs 中使用范围模型

unable to use scoped model in flutter bottom sheet,dialogs

当我 运行 此代码时,它显示错误,未找到正确的 scopedmodel。我认为我们必须声明另一个作用域模型 bottomsheet,dialogs 也使用相同的模型进行了此操作,但它表现异常。我如何实现如何在此类底部工作表和对话框中使用范围模型。

我对范围模型一窍不通 感谢任何帮助

    import 'package:flutter/material.dart';
    import 'package:scoped_model/scoped_model.dart';
    import 'package:cloud_firestore/cloud_firestore.dart';


    class ResourcesModel extends Model{
      String selectsubject = 'Select the subject';
      List<String> sublist=[];
      change(int index){
        debugPrint('${sublist[index]}');
        selectsubject=sublist[index];
        notifyListeners();
      }
      fetchsubjects() {
      Firestore.instance.collection("resources").document("17csea").get().then((DocumentSnapshot ds){
        for (var item in ds['subjects']) {
          sublist.add(item);
        }
        notifyListeners();
      });
      }
    }

    class Resources extends StatelessWidget {
    final ResourcesModel resourcesModel =ResourcesModel();

    void showbottomsheet(context) async{
      double height =MediaQuery.of(context).size.height;
    await showModalBottomSheet(
      context: context,
      builder: (context){
        return Container(
            height: height/2,
            child: ScopedModelDescendant<ResourcesModel>(
              builder:(context,_,model){ 
                debugPrint('helelel');
                return (model.sublist.isEmpty)?Center(child:CircularProgressIndicator()):
                ListView.separated(
                  itemCount: model.sublist.length,
                  separatorBuilder: (context,_){
                    return Divider(
                      color: Theme.of(context).primaryColor,
                    );
                  },
                  itemBuilder: (context,index){
                    return ListTile(
                      title: Text(model.sublist[index]),
                      onTap: model.change(index),
                    );
                  },
                );
              }
            ),
          );
      }
    );
    }
      @override
      Widget build(BuildContext context) {
        return ScpedModel<ResourcesModel>(
        model:resourcesmodel,
        chilld:ScopedModelDescendant<ResourcesModel>(

                    builder:(context,_,model){ 
                      return Container(
            color: Color(0xFFF3F3F3),
            child: RaisedButton(
          child: Text(model.selectsubject),
          onPressed: (){
            if(resourcesModel.sublist.isEmpty){
              resourcesModel.fetchsubjects();
            } 
            },
            ),
          );
                    }
        ),
       ); 
      }
    }

您需要在应用程序的根目录下启动它。这允许您使用树中较低的 ScopedModelDescendent 小部件。

ScopedModel<AppModel>(
    model: AppModel(),
    child: Resources())

无论您在何处显示您的资源,请确保它像上面那样包装,然后您将能够在您的树中使用该模型。

Scoped Model 将其包装到页面时,它仅适用于该页面。 底部 sheets 和对话框中的 flutter 只是创建新的上下文,即一个新页面,所以我们要么必须包装在 material 应用程序的顶部,要么将另一个作用域模型包装在底部 sheet 上模型。那应该工作。在你的代码中,你有压力在模型中调用一个函数,我认为是这样。 然后模型一次又一次地建立,所以把它改成这样

onpressed:(){
call funtion;
pop;
}

我认为这可能对某些人有帮助