由于initState方法在这里是不可重写的,因此初始化consuerWidget中的内容的解决方案是什么?
jxct1oxe1#
江荚2.1.3版
您可以使用ConsumerStatefulWidget和ConsumerState
final helloWorldProvider = Provider((_) => 'Hello world'); class RiverpodExample extends ConsumerStatefulWidget { const RiverpodExample({super.key}); @override ConsumerState<RiverpodExample> createState() => _RiverpodExampleState(); } class _RiverpodExampleState extends ConsumerState<RiverpodExample> { @override void initState() { super.initState(); final value = ref.read(helloWorldProvider); print(value); // Hello world } @override Widget build(BuildContext context) { final value = ref.watch(helloWorldProvider); return Text(value); // Hello world } }
zlhcx6iw2#
我不知道如何回答你的问题,因为我没有使用过ConsumerWidget。我想这个想法是要保持你的大部分状态在提供者。但是,我建议与flutter_hooks一起使用hooks_riverpod(相同的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)可以帮助你,另外,请查看examples from the developer关于riverpod hooks的用法。
j9per5c43#
我可能会迟到,但随着即将到来的1.0.0的Riverpod,您将能够使用https://pub.dev/documentation/flutter_riverpod/1.0.0-dev.2/flutter_riverpod/ConsumerStatefulWidget-class.html和https://pub.dev/documentation/flutter_riverpod/1.0.0-dev.2/flutter_riverpod/ConsumerState-class.html,这正是你想要的。
3条答案
按热度按时间jxct1oxe1#
江荚2.1.3版
您可以使用ConsumerStatefulWidget和ConsumerState
zlhcx6iw2#
我不知道如何回答你的问题,因为我没有使用过ConsumerWidget。我想这个想法是要保持你的大部分状态在提供者。
但是,我建议与flutter_hooks一起使用hooks_riverpod(相同的developer)。
这使得将状态保持在小部件本地变得简单,并且还提供了对提供程序的轻松访问。
例如:
这只是一个简单的例子,但是有大量的资源(flutter_hooks,hooks_riverpod)可以帮助你,另外,请查看examples from the developer关于riverpod hooks的用法。
j9per5c43#
我可能会迟到,但随着即将到来的1.0.0的Riverpod,您将能够使用https://pub.dev/documentation/flutter_riverpod/1.0.0-dev.2/flutter_riverpod/ConsumerStatefulWidget-class.html和https://pub.dev/documentation/flutter_riverpod/1.0.0-dev.2/flutter_riverpod/ConsumerState-class.html,这正是你想要的。