【问题标题】:Flutter bloc library - how to define the state objectsFlutter bloc 库 - 如何定义状态对象
【发布时间】:2020-04-09 21:49:21
【问题描述】:

到目前为止,我一直在我的应用程序中使用 Provider 包进行状态管理并且效果很好,但我可以看到使用 bloc_library 包进行一些更可维护和可预测的状态管理的好处。

我正在努力弄清楚如何在以下场景中构造状态对象: 假设我有一个页面,我在其中显示用户在特定日期的食物日志。当用户更改日期时,我会获取新一天的日志,但我想在当天的顶部显示加载指示器,而不是用加载小部件替换整个屏幕。类似地,如果我在切换日期时遇到错误,我想显示警报并保持在当前日期。

基于上述情况,我想我无法定义 Loading 或 Error 状态,因为我丢失了当前日期状态。 使用 Provider 包,除了其他属性之外,我还有一个带有加载/错误信息的 PageState 属性,我可以轻松地基于它构建 UI。 无论如何,我的印象是我遗漏了一些东西,如果有任何关于如何在我的场景中利用 BlocLibrary 的建议,我将不胜感激。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    为什么你认为你会失去当前的状态?你可以像这样定义状态类

    abstract class MyState {}
    
    class Initial extends MyState {}
    
    class Loading extends MyState {
      final Food food;
    
      Loading(this.food);
    }
    
    class Success extends MyState {
      final Food food;
    
      Success(this.food);
    }
    
    class Error extends MyState {
      final Food food;
    
      Error(this.food);
    }
    

    【讨论】:

    • 谢谢,我也在考虑这个,但我不喜欢传递和复制所有属性的想法。但我想这是这种方法附带的样板。再次感谢您,我以为我错过了如何使用该库的一些内容。
    • Loading 和 Success 状态如何共享数据?每次状态从 Loading 变为 Success 时都需要通过吗?
    • 是的,通过会产生成功状态的事件
    猜你喜欢
    • 2021-07-13
    • 2021-03-19
    • 2020-05-06
    • 2020-07-28
    • 2020-07-09
    • 2021-03-04
    • 2020-04-12
    • 2020-10-10
    • 2020-03-26
    相关资源
    最近更新 更多