由于initState方法在此处不可覆盖,因此初始化consumerWidget中的事物的解决方案是什么?

最佳答案

由于我尚未使用ConsumerWidget,因此我不太确定如何回答您的问题。我想这个想法是将您的大多数状态保留在提供程序中。
但是,我建议您将hooks_riverpodflutter_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_hookshooks_riverpod)可以帮助您。另外,请查看关于riverpod挂钩用法的examples from the developer

关于flutter - Riverpod:在ConsumerWidget内部重写initState的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64198816/

10-12 03:32