Flutter 状态管理 Provider
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
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: MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(),
),
);
}
}
class Counter with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Provider 示例"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'点击次数:',
),
Consumer<Counter>(
builder: (context, counter, child) {
return Text(
'${counter.count}',
style: Theme.of(context).textTheme.headline4,
);
},
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Provider.of<Counter>(context, listen: false).increment();
},
tooltip: '增加',
child: Icon(Icons.add),
),
);
}
}
这段代码使用了Provider包来创建一个简单的状态管理模型。它定义了一个Counter
类,它通过实现ChangeNotifier
接口来管理一个计数器状态,并且在状态改变时发送通知。在MyApp
中,我们使用ChangeNotifierProvider
来为整个应用提供Counter
的实例。在MyHomePage
中,我们使用Consumer
小部件来监听Counter
状态的变化,并且在界面上显示当前的点击次数。同时,我们添加了一个浮动按钮,用来触发increment
方法,从而更新状态。这个例子展示了如何在Flutter应用中使用Provider进行状态管理。
评论已关闭