dependencies:
flutter:
sdk: flutter
# 状态管理 https://github.com/rrousselGit/provider
provider: ^4.3.3
Counter.dart
import 'package:flutter/material.dart';
class Counter with ChangeNotifier {
int _count = 0;
int get count => _count; //外部使用
void incCount() { //更新状态
this._count++;
notifyListeners(); //表示更新状态
}
}
main.dart
import 'package:flutter/material.dart';
import 'package:flutters/pagea.dart';
import 'package:flutters/pageb.dart';
import 'package:flutters/provider/Counter.dart';
import 'package:provider/provider.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_)=>Counter()),
],
child: Consumer<Counter>(
builder: (_,Counter counter,__){
return MaterialApp(
title: "测试数据",
home:MyHomePage(),
builder: (BuildContext context, Widget child) {
return MediaQuery(
data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
child: child,
);
},
);
},
)
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("测试数据"),
),
body: Center(
child: Column(
children: [
FlatButton(onPressed: (){
Navigator.push(context, MaterialPageRoute(builder: (_){
return PageA();
}));
}, child: Text("设置")),
FlatButton(onPressed: (){
Navigator.push(context, MaterialPageRoute(builder: (_){
return PageB();
}));
}, child: Text("获取"))
],
),
),
);
}
}
pageA.dart
import 'package:flutter/material.dart';
import 'package:flutters/provider/Counter.dart';
import 'package:provider/provider.dart';
class PageA extends StatefulWidget {
PageA({Key key}):super(key:key);
@override
_PageAState createState() => _PageAState();
}
class _PageAState extends State<PageA> {
@override
Widget build(BuildContext context) {
var counterProvider= Provider.of<Counter>(context); //获取其上下文
return Scaffold(
appBar: AppBar(
title: Text("pageA"),
),
body: Center(
child: FlatButton(
onPressed: (){
counterProvider.incCount();
},
child: Text('${counterProvider.count}'),
),
),
);
}
}
pageB.dart
import 'package:flutter/material.dart';
import 'package:flutters/provider/Counter.dart';
import 'package:provider/provider.dart';
class PageB extends StatefulWidget {
@override
_PageBState createState() => _PageBState();
}
class _PageBState extends State<PageB> {
@override
Widget build(BuildContext context) {
var counterProvider= Provider.of<Counter>(context); //获取其上下文
return Scaffold(
appBar: AppBar(
title: Text("pageA"),
),
body: Center(
child: FlatButton(
child:Text("${counterProvider.count}")
),
),
);
}
}