两个页面的计数同步减少获取
import 'package:flutter/material.dart';import 'package:provider/provider.dart';void main() { runApp(MyApp());}class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { //应用MultiProvider能够创立多个顶层共享数据 return MultiProvider( providers: [ChangeNotifierProvider(create: (_) => Counter())], child: MaterialApp( title: "Provider示例", home: FirstPage(), ), ); }}//第一个页面class FirstPage extends StatefulWidget { const FirstPage({Key? key}) : super(key: key); @override _FirstPageState createState() => _FirstPageState();}class _FirstPageState extends State<FirstPage> { late Counter counter; @override Widget build(BuildContext context) { counter = context.watch<Counter>(); return Scaffold( appBar: AppBar( title: Text("第一个页面"), actions: <Widget>[ FlatButton( child: Text("下一页"), //路由跳转至第二页 onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (context) { return SecondPage(); })), ), ], ), body: Center( //获取计数器中的count的值 child: Text("${Provider.of<Counter>(context).count}"), ), floatingActionButton: FloatingActionButton( onPressed: () { //调用数据模型中的increment办法更改数据 counter.increment(); // context.read<Counter>().increment(); //Provider.of<Counter>(context,listen: false).increment(); }, child: Icon(Icons.add), ), ); }}//第二页class SecondPage extends StatelessWidget { @override Widget build(BuildContext context) { //Provider.of<Counter>(context,listen: true);等价于context.watch<Counter>().increment(); //Provider.of<Counter>(context,listen: false);等价于context.read<Counter>().increment(); Counter counter =Provider.of<Counter>(context,listen: true); print("我是用来打印的哦"); return Scaffold( appBar: AppBar( title: Text("第二个页面"), ), body: Center( //获取计数器中的count值 child: Text("${counter.count}"), ), floatingActionButton: FloatingActionButton( onPressed: () { //调用数据模型中的increment办法更改数据 context.read<Counter>().increment();//第一种形式 // Provider.of<Counter>(context,listen: false).increment();//第二种形式 // counter.increment();//第三种形式 }, child: Icon(Icons.add), ), ); }}//计数器类Counter 即为数据Model 实际上就是状态//Counter不仅存储了数据,还蕴含了更改数据的办法,并裸露相干的数据//当调用notifyListeners 时它会告诉所有的听众进行刷新class Counter with ChangeNotifier { //存储数据 int _count = 0; //提供内部可能拜访的数据 int get count => _count;//提供更改数据的办法 void increment() { _count++; //告诉所有的听众进行刷新 notifyListeners(); }}