I have this widget:
TextInputSettingsTile(
title: 'Valor actual',
settingKey: 'current_value',
initialValue: '0',
keyboardType: isNumber
? TextInputType.numberWithOptions()
: TextInputType.text,
inputFormatters: [
isNumber
? FilteringTextInputFormatter.digitsOnly
: FilteringTextInputFormatter.singleLineFormatter,
],
onChange: (value) {
if (isNumber) {
Settings.setValue<int>(
'current_int_value',
int.tryParse(value) ?? 0,
);
} else {
Settings.setValue<String>('current_string_value', value);
}
},
),
This is similar to TextFormField and, in fact, it has almost the same properties.
Look at this fragment:
keyboardType: isNumber
? TextInputType.numberWithOptions()
: TextInputType.text,
inputFormatters: [
isNumber
? FilteringTextInputFormatter.digitsOnly
: FilteringTextInputFormatter.singleLineFormatter,
],
where isNumber is a boolean variable declared and assigned somewhere else.
When isNumber is true, I want to allow only digits to be inputted, otherwise, any character.
The problem is that it does not work when isNumber value changes. In order to make it work, I need to quit and restart the application.
isNumber variable is set in an onChange event of other control:
onChange: (value) {
isNumber = value;
},
isNumber = valuein theonChangeevent of aCheckboxSettingsTilewidget.setStatewhen your widget extendsStatefulWidget(or useStatefulBuilder- you could also useValueListenableBuilderbut it requiresValueListenable<bool>likeValueNotifier<bool>for example)StatefulWidgetjust usesetState()and when extendingStatelessWidgetwrap your widgets tree withStatefulBuilderand call itssetStatefunction passed tobuildercallback