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