【问题标题】:How to instantiate bloc in didChangeDependencies correctly?如何正确实例化 didChangeDependencies 中的 bloc?
【发布时间】:2019-11-03 00:47:42
【问题描述】:

我正在尝试在我从 google 的 flutter udacity 课程创建的单位转换应用程序中使用 bloc 架构。我的问题是实例化我的集团。我遵循文档并从上下文以及 didChangeDependencies 方法中的一些其他属性实例化了我的块。在didChangeDependencies 中,我为集团设置了默认单位。这一直有效,直到我专注于导致小部件树刷新的文本输入字段。当这种情况发生时,didChangeDependencies 再次运行,将单位设置回默认值。这使我无法使用除默认转换之外的任何转换,因为didChangeDependencies 每次调用时都会重置单位。

我尝试在初始化状态下实例化 bloc,但这是不允许的,因为它是一个继承的小部件。

class _ConverterScreenState extends State<ConverterScreen> {
  ConversionBloc _conversionBloc;

  @override
  void didChangeDependencies() {
    // TODO: implement didChangeDependencies
    print("change dependencies ran");
    super.didChangeDependencies();
    _conversionBloc = ConversionProvider.of(context);
    _conversionBloc.setDefaultUnits(widget._category);
  }

  @override
  Widget build(BuildContext context) {
    print("converter screen - build widget");
    // TODO: implement build
    _conversionBloc.currentCat.add(widget._category);
       return Scaffold(
         body: _buildConverterScreen(MediaQuery.of(context).orientation));
  }
}

class ConversionBloc {
  void setDefaultUnits(Category category) {
    print("setting default units for ${category.name}");
    _inputUnits = category.units[0];
    _outputUnits = category.units[1];
    _inputUnitSubject.sink.add(_inputUnits);
    _outputUnitSubject.add(_outputUnits);
  }
}

我希望将输入/输出单位更改为所需的值,并且当 textinput 字段聚焦或调用 didChangeDependencies 时该值不会重置。目前我将单位更改为所需值,然后将焦点更改为文本输入字段,然后将单位重置为默认值,但这是错误的,单位应保持在选定值而不是重置。我的项目的完整源代码在这里 https://github.com/Renzo-Olivares/Units_Flutter 。任何反馈表示赞赏

【问题讨论】:

    标签: flutter dart bloc rxdart


    【解决方案1】:

    你能把初始化和setDefaultUnits 调用封装在一个 if 中吗?

    @override
    void didChangeDependencies() {
      // TODO: implement didChangeDependencies
      print("change dependencies ran");
      super.didChangeDependencies();
      if (_conversionBloc == null) {
        _conversionBloc = ConversionProvider.of(context);
        _conversionBloc.setDefaultUnits(widget._category);
      }
    }
    

    【讨论】:

    • context 是从哪里来的?
    • @ThéoChampion 查看this post
    猜你喜欢
    • 2020-10-06
    • 2021-02-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2019-12-07
    • 2018-02-05
    相关资源
    最近更新 更多