我在Flutter应用中使用了ScopedModel
和ScopedModelDescendent
。 MaterialApp是ScopedModelDescendent小部件中的包装器,如下面的代码所示。
void main() => runApp(new ScopeModelWrapper());
class ScopeModelWrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScopedModel<AppModel>(model: AppModel(), child: MyApp());
}
}
class AppModel extends Model {
// Some code specific to model, actually a lot of code.
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScopedModelDescendant<AppModel>(builder: (context, child, model) {
return MaterialApp(
title: 'Flutter Firebase',
localizationsDelegates: [
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
Locale("nb", ""),
Locale("en", ""),
],
locale: model.appLocal,
navigatorObservers: <NavigatorObserver>[routeObserver],
theme: new ThemeData(
primarySwatch: Colors.blue,
primaryColor: Colors.blueAccent,
),
home: SelectDenominationPage(),
);
});
}
}
当我从HomePage
导航到Settings
-> SelectDenominationPage
时,会发生此问题。 Settings
页面(或窗口小部件)包含一些包装在ScopedModelDescendent
小窗口中的窗口小部件,这就是导致错误的原因。
我不明白为什么它找不到ScopedModel,因为它就在树的根部。
我们非常感谢您的帮助。
更新:我将AppModel
类移到了自己的文件,然后将所有导入从'appmodel.dart'
更改为'package:<projectname>/appmodel.dart'
,它开始起作用。我仍然不完全明白这一点。如果我们引用的是同一个文件,那么为什么要以不同的模型来对待它呢?