我是新手,我正在测试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
父级。由于您的Provider是在内部实现的MyApp
,因此,如果您使用MyApp
的父级context
(第二种情况),它将找不到该提供商
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句