【发布时间】:2020-02-19 12:00:33
【问题描述】:
我是 Flutter 的新手,我正在测试 Provider,但不知道为什么这样做会起作用(我的意思是它在 appbar 中显示一个列表):
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();
}
}
我只是看不出有什么区别或为什么重要。该代码不应该是等效的吗?任何见解将不胜感激。
【问题讨论】:
-
那是因为你仍在返回一个列表。您可以将其更改为
return _texts.toString();并通过CustomText小部件调用它。 -
它返回 alit 的事实并不重要。