我尝试在flutter中设置InheritedWidget
,允许从应用程序的任何位置访问模型。
在我尝试将应用程序拆分为多个文件之前,它很有效。似乎调用context.inheritFromWidgetOfExactType(...)
仅在从InheritedWidget
插入树的同一文件中调用时才起作用。只需将代码块从一个文件移动到另一个文件,就会导致从该方法返回null
。
代码如下:
基本应用程序是从演示应用程序设置的 import' package:flutter / material.dart&#39 ;; import' views / home.dart';
void main() async {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new StateContainer(
model: new AppState(),
child: new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new HomePage(),
),
);
}
}
使用以下模型定义InheritedWidget
:
class StateContainer extends InheritedWidget {
final AppState model;
StateContainer({Key key, this.model, Widget child})
: super(key: key, child: child);
@override
bool updateShouldNotify(StateContainer old) {
return false;
}
static AppState of(BuildContext context) {
return (context.inheritFromWidgetOfExactType(StateContainer)
as StateContainer).model;
}
}
class AppState {
final String test = "Hi";
}
最后,HomePage定义为:
import 'package:flutter/material.dart';
import 'package:ftest/main.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
var model = StateContainer.of(context);
return Container(
child: Center(
child: Text(model.test),
),
);
}
}
将最后一个块放在与其他两个文件相同的文件中,该应用程序按预期工作。然而,只需将其移动到新文件中,就会抛出错误消息The getter 'model' was called on null.
。
我只能猜测BuildContext没有正确传递的地方,但我没有试过修复它。有什么想法吗?