关于flutter:如何正确实例化didChangeDependencies中的bloc?

How to instantiate bloc in didChangeDependencies correctly?

我正在尝试从Google扑朔迷离的课程中创建的单位转换应用程序中使用Bloc架构。我的问题是实例化我的集团。我按照文档进行操作,并从上下文以及didChangeDependencies方法中的其他一些属性实例化了我的bloc。在didChangeDependencies中,我设置了块的默认单位。在我专注于导致小部件树刷新的textinput字段之前,此方法一直有效。发生这种情况时,将再次运行didChangeDependencies,将单位重新设置为默认值。这使我无法使用除默认转换以外的任何转换,因为didChangeDependencies每次被调用时都会重置单位。

我尝试实例化处于初始化状态的块,但这是不允许的,因为它是继承的窗口小部件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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。任何反馈表示赞赏


您可以将初始化和setDefaultUnits调用package在if中吗?

1
2
3
4
5
6
7
8
9
10
@override
void didChangeDependencies() {
  // TODO: implement didChangeDependencies
  print("change dependencies ran");
  super.didChangeDependencies();
  if (_conversionBloc == null) {
    _conversionBloc = ConversionProvider.of(context);
    _conversionBloc.setDefaultUnits(widget._category);
  }
}