我已经使用提供程序包来管理flutter应用程序的状态,但是我在使用它时遇到了很多问题。我已经定义了一个简单的提供程序,它有一个布尔变量和一个更改变量值的方法
class LoadingModel with ChangeNotifier{
bool is_loading=false;
changeLoadingState(){
is_loading = !is_loading;
notifyListeners();
}}
现在,我想从主页中的MyApp类调用提供程序中定义的changeLoadingState()方法,下面是主页代码
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => LoadingModel(),
child: MaterialApp(
home:Scaffold(
body: Center(
child: Wrap(children: [
Column(children: [
RaisedButton(
child: Text("hide the progress"),
onPressed: () {
Provider.of(context,listen: false).changeLoadingState();
},
)
],)
],)
),
)
),
);
}
}
但是当我运行应用程序时,控制台显示
错误:在此MyApp小部件上找不到正确的提供程序
要修复,请:
- 确保提供程序是此MyApp小部件的上级
- 向提供程序提供类型
- 向使用者提供类型
- 向Provider提供类型。of()
- 始终使用包导入。例如:'导入'包:我的应用程序/我的代码. dart ';
- 确保使用正确的
context
。
如果这些解决方案都不起作用,请将错误提交到:https://github.com/rrousselGit/provider/issues
我怎样才能解决这个问题?
2条答案
按热度按时间dffbzjpn1#
试试这个。希望你不会出错。
sycxhyv72#
您需要为布尔值创建getter
然后在myApp中, Package 小部件树中您希望使用Consumer重新构建的部分,并可以如下所示调用getter: