Я пытаюсь использовать блочную архитектуру в приложении для преобразования единиц, которое я создал из курса Google Flutter udacity. Моя проблема связана с созданием экземпляра моего блока. Я следил за документацией и создал экземпляр своего блока из контекста, а также некоторых других свойств в методе didChangeDependencies. В didChangeDependencies
я установил единицы измерения по умолчанию для блока. Это работает, пока я не сосредоточусь на поле ввода текста, вызывая обновление дерева виджетов. Когда это происходит, didChangeDependencies
снова запускается, устанавливает для блоков значения по умолчанию. Это не позволяет мне использовать какие-либо преобразования, кроме преобразований по умолчанию, потому что didChangeDependencies
сбрасывает единицы при каждом вызове.
Я попытался создать экземпляр блока в состоянии инициализации, но это не разрешено, поскольку это унаследованный виджет.
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. . Любая обратная связь приветствуется