了解 Cubit/Bloc 状态管理

问题描述

我是 Flutter 的新手,我有使用 Redux 或 Vuex 等状态管理的 Web 应用程序的经验,其中模块的初始状态可能类似于:

{
  value1: 0,value2: 10,aBool: false,aString: 'Hello'
}

然后基于 Reducers 或 Mutations 我们可以更新状态的单个或多个属性

现在,在学习 Flutter 后,我决定使用 Bloc/Cubit 并且在网上我找不到问题的正确答案,即使因为大多数示例始终基于糟糕的计数器应用程序,而从来没有基于更现实的场景。

我只能看到基于 Bloc 4 种状态的东西:初始、加载、成功和错误

这在从 API 获取数据时很好,但如果我的状态也有更多属性怎么办?

如何更新这些属性

实际上我创建了我的测试 Cubit 来从我的 API 中获取一些东西,它有效。现在我想在状态上添加更多属性并根据操作更新它,我该怎么做?

示例状态:

@freezed
abstract class TestState with _$TestState {
  const factory TestState.initial() = _Initial;
  const factory TestState.loading() = _Loading;
  const factory TestState.success(UserData user) = _Success;
  const factory TestState.error(String message) = _Error;
}

例如肘:

class TestCubit extends Cubit<TestCubit> {
  TestCubit(this._testClient)
      : super(TestState.initial());
  final TestClient _testClient;

  String greet = 'Hi';

  Future<void> testFetchData() async {
     ...
     emit(TestState.success(testData));
     ...
  }
}

我可以成功处理各种初始、加载等...状态。

我可以正确观看 greet 属性context.read<TestCubit>().greet

我现在应该如何使用 'hello!' 更新该值?

// TestCubit
updateGreet(String text) {
  emit(I don't kNow); 
}

我省略了所有更新该值的各种尝试。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)