我是新手,我正在测试Provider,无法弄清楚为什么这样做(通过工作,我的意思是它在应用栏中显示了一个列表):
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<Data>(
builder: (context)=> Data(),
child: MaterialApp(
home: Scaffold(
appBar: AppBar(
title: CustomText(),
),
),
),
);
}
}
使用CustomText类几乎不执行任何操作:
class CustomText extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Text(Provider.of<Data>(context).texts.tostring());
}
}
但这又引发了一个-在此MyApp小部件上方找不到正确的提供程序-错误:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<Data>(
builder: (context)=> Data(),
child: MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text(Provider.of<Data>(context).texts.toString()),
),
),
),
);
}
}
数据类为:
class Data with ChangeNotifier{
List<String> _texts = ['Text 1', 'Text 2', 'Text 3', 'Text 4',];
get texts {
return _texts;
}
void deleteText(int index){
this._texts.removeAt(index);
notifyListeners();
}
void addText(String text){
this._texts.add(text);
notifyListeners();
}
}
我只是看不出有什么区别或为什么重要。该代码不应该等效吗?任何见解将不胜感激。
最佳答案
区别在于,在CustomText
情况下,context
来自其父窗口小部件MyApp
,而在第二种情况下,context
来自MyApp
的父窗口小部件。由于您的提供程序是在MyApp
内部实现的,因此,如果您使用MyApp
的父级的context
(第二种情况),它将找不到该提供程序。
关于flutter - Flutter Provider:为什么在调用Provider.of <Widget>(context)时发生此错误,如下所示:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58519456/