我已经被搜索过,但没有发现任何问题(对不起,如果我还有问题...) 我的问题是: 我有两个页面,在这两个页面中使用ChangeNotifierProvider,但是当我在第二页面中更改值并返回到第一页面时,窗口小部件不会使用新值刷新。 代码:
main.dart:
Future main() async {
await DotEnv().load('.env');
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<NewsModel>(create: (context) => NewsModel()),
// Other providers...
],
child: MaterialApp(
title: 'App',
home: FirstPage(),
routes: pageRoutes.getRoutes(context))
);
}
}
first_page.dart:
class FirstPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => _FirstPageState();
}
class _FirstPageState extends State<FirstPage> {
@override
Widget build(BuildContext context) {
NewsModel model = Provider.of<NewsModel>(context, listen:true);
return new Scaffold(
appBar: AppBar(title: Text("First page")),
body: SingleChildScrollView(
child: Center(
child: Column(
children: <Widget>[
Text("Recent news: ${model.recentNews.length}"),
FlatButton(
onPressed: ()=>Navigator.pushNamed(context, pageRoutes.second_page),
child: Text("Go to Second Page to clear recents")
);
// If clear recents from here works well (text is updated to 0 after clear)
FlatButton(
onPressed: ()=>model.clear(),
child: Text("Clear recents from First Page")
);
]))));
}
}
second_page.dart:
class SecondPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
@override
Widget build(BuildContext context) {
NewsModel model = Provider.of<NewsModel>(context, listen:true);
return new Scaffold(
appBar: AppBar(title: Text("Second Page page")),
body: Center(child:
FlatButton(
// When press the button and go back to first page, text is not updated... why??
onPressed: () {
model.clear();
Navigator.pop(context);
},
child: Text("Clear recents")
)));
}
}
provider.dart:
class NewsModel with ChangeNotifier {
//@ Some random news ids
List<dynamic> _recentNews = [2543, 125, 288];
List<dynamic> get recentNews => _recentNews;
set recentNews(List<dynamic> value) {
_recentNews=value;
notifyListeners();
}
void clear() {
_recentNews.clear();
notifyListeners();
}
}
非常感谢大家!