Flutter状态管理插件flow_state的使用

Flutter状态管理插件flow_state的使用

安装

1. 创建一个新的Flutter项目

flutter create my_app
cd my_app

2. 添加依赖

flutter pub add flow_state

3. 导入包

import 'package:flow_state/flow_state.dart';

创建视图模型

4. 创建视图模型

/// 扩展您的视图模型并指定模型类型
/// 在下面的例子中,UserViewModel 视图模型接收 UserModel 模型

class UserViewModel extends FlowViewModel<UserModel> {
  UserViewModel(super.context, super.state);

  /// 必须在这里初始化模型的默认值
  @override
  get initState => UserModel(name: 'Bruno Brito');

  /// 可以通过 state.model 实时获取更新的数据
  getData() => print(state.model);

  /// 可以通过 state.emit 实时更改模型
  setData(value) => state.emit(value);
}

将视图模型添加到页面

4. 将视图模型添加到页面

class TestePageState extends State<TestePage> with FlowState<UserModel> {
  /// 必须定义视图模型(视图模型必须是一个扩展了 FlowViewModel<T> 的类)
  @override
  UserViewModel get viewModel => UserViewModel(context, this);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          // 可以通过 model 实时获取更新的数据
          Text(model.name.toString()),
          // 可以通过 emit 实时更改模型
          TextField(
            onChanged: (v) => emit(UserModel(name: v)),
          ),
          // 可以通过 viewModel 与视图模型交互
          TextButton(
            child: Text('Change Model'),
            onPressed: () {
              viewModel.setData(UserModel(name: 'Jon Smitch'));
            },
          ),
        ],
      ),
    );
  }
}

额外功能:无样板代码的使用

EXTRA. 无样板代码的使用

/// 创建实例
FlowCore get flowCore => FlowCore.newInstance(context);

/// 更改值
flowCore.setValue = 12;

/// 使用 emit 更改值
flowCore.emit(12);

/// 读取值
print(flowCore.value);

/// 通过流监听值
flowCore.stream.listen((data) => print(data));

更多关于Flutter状态管理插件flow_state的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter状态管理插件flow_state的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flow_state 是一个轻量级的 Flutter 状态管理插件,它基于 StreamStreamController 实现状态管理。它的设计理念是简化状态管理,使得开发者可以更专注于业务逻辑。

以下是如何使用 flow_state 的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flow_state 依赖:

dependencies:
  flutter:
    sdk: flutter
  flow_state: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 创建状态管理类

接下来,创建一个状态管理类,继承自 FlowStateFlowState 是一个泛型类,你需要指定状态的类型。

import 'package:flow_state/flow_state.dart';

class CounterState extends FlowState<int> {
  CounterState() : super(0); // 初始状态为0

  void increment() {
    updateState(state + 1); // 更新状态
  }

  void decrement() {
    updateState(state - 1); // 更新状态
  }
}

3. 在 UI 中使用状态管理

在 Flutter 的 UI 中,你可以使用 FlowStateBuilder 来监听状态的变化,并更新 UI。

import 'package:flutter/material.dart';
import 'package:flow_state/flow_state.dart';
import 'counter_state.dart'; // 导入刚才创建的 CounterState

class CounterPage extends StatelessWidget {
  final CounterState counterState = CounterState();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FlowState Counter Example'),
      ),
      body: Center(
        child: FlowStateBuilder<int>(
          flowState: counterState,
          builder: (context, state) {
            return Text(
              'Counter: $state',
              style: TextStyle(fontSize: 24),
            );
          },
        ),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
            onPressed: () => counterState.increment(),
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: () => counterState.decrement(),
            tooltip: 'Decrement',
            child: Icon(Icons.remove),
          ),
        ],
      ),
    );
  }
}

4. 运行应用

现在你可以运行应用,点击按钮来增加或减少计数器,UI 会自动更新。

5. 其他功能

flow_state 还提供了一些其他功能,比如:

  • 状态持久化:你可以通过 saveStaterestoreState 方法来保存和恢复状态。
  • 状态监听:你可以通过 addListener 方法来监听状态的变化。
counterState.addListener((state) {
  print('State changed to: $state');
});
回到顶部