不同页面之间的ChangeNotifierProvider

时间:2020-10-26 13:53:42

标签: flutter flutter-change-notifier

我已经被搜索过,但没有发现任何问题(对不起,如果我还有问题...) 我的问题是: 我有两个页面,在这两个页面中使用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();
  }
}


非常感谢大家!

0 个答案:

没有答案