【发布时间】:2021-07-28 19:31:28
【问题描述】:
我正在尝试使用Riverpod 状态管理。我有两个TextFormField,我想设置Text 的值,方法是使用StateNotifierProvider 在每个字段中输入值的总和。
在下面的代码中,CashCounterData 是StateNotifier、CashCounter 使用的数据模型。通知器有两个方法,setCount 和setCash,它们在每个TextFormField 的onChanged 方法中调用。
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。但是,当我在每个 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)),
)
],
),
),
);
}
}
我缺少什么来获得我想要的行为?
【问题讨论】:
标签: flutter dart riverpod flutter-hooks