由于initState方法在此处不可覆盖,因此初始化consumerWidget中的事物的解决方案是什么?
最佳答案
由于我尚未使用ConsumerWidget,因此我不太确定如何回答您的问题。我想这个想法是将您的大多数状态保留在提供程序中。
但是,我建议您将hooks_riverpod与flutter_hooks(相同developer)一起使用。
这使得将状态保持在窗口小部件的本地状态变得简单,并且还可以轻松访问提供程序。
例如:
class Example extends HookWidget {
const Example({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
final test = useProvider(Test.provider());
final controller = useTextEditingController();
final loading = useState(false);
final buttonText = useState('Change me!');
return Column(
children: [
TextField(controller: controller),
if (!loading) RaisedButton(
onPressed: () async {
loading.value = true;
await Future.delayed(const Duration(seconds: 1));
buttonText.value = controller.text;
loading.value = false;
}
child: Text(buttonText.value),
),
if (loading) const CircularProgressIndicator(),
// Do something with providers, etc.
],
),
);
}
只是一个简单的示例,但是有很多资源(flutter_hooks,hooks_riverpod)可以帮助您。另外,请查看关于riverpod挂钩用法的examples from the developer。关于flutter - Riverpod:在ConsumerWidget内部重写initState的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64198816/