状态管理框架
状态管理框架用于管理应用的状态,确保数据在组件间高效传递。
提示:选择合适的状态管理框架取决于项目复杂度和团队偏好。
📱 渲染效果预览
计数: 0
Provider
Provider 是 Flutter 官方推荐的状态管理方案。
// 创建 Provider
class Counter extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
// 使用 Provider
void main() {
runApp(
ChangeNotifierProvider(
create: (_) => Counter(),
child: MyApp(),
),
);
}
// 在 Widget 中使用
Consumer(
builder: (context, counter, child) {
return Text('计数: ${counter.count}');
},
)
📱 渲染效果预览
计数: 0
Riverpod
Riverpod 是 Provider 的改进版本,提供更好的类型安全。
// 创建 Provider
final counterProvider = StateProvider((ref) => 0);
// 使用 Riverpod
void main() {
runApp(
ProviderScope(
child: MyApp(),
),
);
}
// 在 Widget 中使用
Consumer(
builder: (context, ref, _) {
final count = ref.watch(counterProvider);
return Text('计数: $count');
},
)
// 修改状态
ref.read(counterProvider.notifier).state++;
📱 渲染效果预览
计数: 0
Bloc / Cubit
Bloc/Cubit 是一个强大的状态管理库,适合复杂应用。
// 创建 Cubit
class CounterCubit extends Cubit {
CounterCubit() : super(0);
void increment() => emit(state + 1);
void decrement() => emit(state - 1);
}
// 使用 Cubit
void main() {
runApp(
BlocProvider(
create: (_) => CounterCubit(),
child: MyApp(),
),
);
}
// 在 Widget 中使用
BlocBuilder(
builder: (context, count) {
return Text('计数: $count');
},
)
📱 渲染效果预览
计数: 0
GetX
GetX 是一个轻量级且功能全面的状态管理库。
// 创建 Controller
class CounterController extends GetxController {
var count = 0.obs;
void increment() => count++;
}
// 使用 GetX
void main() {
Get.put(CounterController());
runApp(MyApp());
}
// 在 Widget 中使用
Obx(() => Text('计数: ${Get.find().count.value}'))
📱 渲染效果预览
Action
→
Reducer
→
Store
→
View
Redux
Redux 是一个可预测的状态容器,适合大型应用。
// 定义 Action
enum CounterAction { increment, decrement }
// 定义 Reducer
int counterReducer(int state, dynamic action) {
if (action == CounterAction.increment) {
return state + 1;
} else if (action == CounterAction.decrement) {
return state - 1;
}
return state;
}
// 创建 Store
final store = Store(counterReducer, initialState: 0);
// 使用 Redux
StoreProvider(
store: store,
child: MyApp(),
)
// 在 Widget 中使用
StoreConnector(
converter: (store) => '计数: ${store.state}',
builder: (context, count) {
return Text(count);
},
)
📱 渲染效果预览
计数: 0
MobX
MobX 是一个响应式的状态管理库。
// 创建 Observable
class Counter = _Counter with _$Counter;
abstract class _Counter with Store {
@observable
int count = 0;
@action
void increment() => count++;
}
// 使用 MobX
final counter = Counter();
Observer(
builder: (_) => Text('计数: ${counter.count}'),
)
📱 渲染效果预览
计数: 0
setState
setState 是 Flutter 内置的简单状态管理方式。
class CounterWidget extends StatefulWidget {
@override
_CounterWidgetState createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State {
int _count = 0;
void _increment() {
setState(() {
_count++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('计数: $_count'),
ElevatedButton(
onPressed: _increment,
child: Text('增加'),
),
],
);
}
}
状态管理框架选择指南:
- 新手推荐:Provider 或 setState
- 中小型项目:Provider 或 GetX
- 大型项目:Bloc/Cubit 或 Redux
- 追求类型安全:Riverpod
- 喜欢响应式:MobX