如何正确实例化 didChangeDependencies 中的 bloc?
How to instantiate bloc in didChangeDependencies correctly?
我正尝试在我根据 google 的 flutter udacity 课程创建的单位转换应用程序中使用 bloc 架构。我的问题是实例化我的集团。我遵循文档并从上下文以及 didChangeDependencies 方法中的一些其他属性实例化了我的集团。在 didChangeDependencies
中,我设置了 bloc 的默认单位。这一直有效,直到我专注于导致小部件树刷新的文本输入字段。当这种情况发生时,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);
}
}
我希望将 input/output 单位更改为所需的值,并且在聚焦文本输入字段或调用 didChangeDependencies
时不会重置该值。目前我将单位更改为所需值,然后将焦点更改为文本输入字段,然后单位重置为默认值,但这是错误的,单位应保持在选定值而不是重置。我的项目的完整源代码在这里 https://github.com/Renzo-Olivares/Units_Flutter。感谢任何反馈
你能把初始化和 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);
}
}
我正尝试在我根据 google 的 flutter udacity 课程创建的单位转换应用程序中使用 bloc 架构。我的问题是实例化我的集团。我遵循文档并从上下文以及 didChangeDependencies 方法中的一些其他属性实例化了我的集团。在 didChangeDependencies
中,我设置了 bloc 的默认单位。这一直有效,直到我专注于导致小部件树刷新的文本输入字段。当这种情况发生时,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);
}
}
我希望将 input/output 单位更改为所需的值,并且在聚焦文本输入字段或调用 didChangeDependencies
时不会重置该值。目前我将单位更改为所需值,然后将焦点更改为文本输入字段,然后单位重置为默认值,但这是错误的,单位应保持在选定值而不是重置。我的项目的完整源代码在这里 https://github.com/Renzo-Olivares/Units_Flutter。感谢任何反馈
你能把初始化和 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);
}
}