我正在尝试使用Riverpod
状态管理。我有两个TextFormField
,我想Text
通过使用 a 在每个字段中输入的值的总和来设置 a 的值StateNotifierProvider
。
在下面的代码中,CashCounterData
是要使用的数据模型StateNotifier
, CashCounter
。通知程序有两个方法,setCount
在eachsetCash
的方法中调用。onChanged
TextFormField
final cashProvider = StateNotifierProvider<CashCounter, CashCounterData>((ref) => CashCounter());
class CashCounter extends StateNotifier<CashCounterData> {
CashCounter() : super(_initialData);
static const _initialData = CashCounterData(0, 0);
void setCount(int value){
state = CashCounterData(value, state.cash);
}
void setCash(value){
state = CashCounterData(state.count, value);
}
int get count => state.count;
int get cash => state.cash;
}
class CashCounterData {
final int count;
final int cash;
const CashCounterData(this.count, this.cash);
}
接下来,我实现了 UI 并试图配合StateNotifierProvider
上面定义的内容。但是,当我在 each 中输入值时TextFormField
,Text
小部件总是显示0
.
class CalculatableTextFormField extends HookWidget {
@override
Widget build(BuildContext context) {
final cashCounterProvider = useProvider(cashProvider.notifier);
final TextEditingController _count = TextEditingController();
final TextEditingController _cash = TextEditingController();
return Scaffold(
body: Form(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'${cashCounterProvider.count + cashCounterProvider.cash}'
),
TextFormField(
controller: _count,
keyboardType: TextInputType.number,
onChanged: (value)=>cashCounterProvider.setCount(int.parse(value)),
),
TextFormField(
controller: _cash,
keyboardType: TextInputType.number,
onChanged: (value)=>cashCounterProvider.setCash(int.parse(value)),
)
],
),
),
);
}
}
我缺少什么来获得我想要的行为?