Anm*_*ngh 3 flutter flutter-provider riverpod flutter-riverpod
如何像inStateNotifier一样使用加载/错误状态?FutureProviderRiverpod
我们可以使用 setState、带三元运算符的 var isLoading 和 didChangeDependency 对 Provider 执行相同的操作。
FutureProvider与 一起工作AsyncValue。
您可以AsyncValue与 aStateNotifier一起使用,如下所示:
final randomNumberProvider = StateNotifierProvider<RandomNumberNotifier, AsyncValue<int>>((ref) {
return RandomNumberNotifier();
});
class RandomNumberNotifier extends StateNotifier<AsyncValue<int>> {
RandomNumberNotifier() : super(const AsyncLoading());
void getNewNumber() async {
state = const AsyncLoading();
await Future.delayed(const Duration(seconds: 3));
final number = Random().nextInt(500);
state = AsyncValue.data(number);
}
}
Run Code Online (Sandbox Code Playgroud)
它允许您使用when如下方法:
class Page extends ConsumerWidget {
const Page({Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
final randomNumberNotifier = ref.watch(randomNumberProvider);
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
final p = ref.read(randomNumberProvider.notifier);
p.getNewNumber();
},
child: const Icon(Icons.add),
),
body: Center(
child: randomNumberNotifier.when(
data: (data) {
return Text(data.toString());
},
error: (_, __) {
return const Text("An error occurred");
},
loading: () {
return const CircularProgressIndicator();
},
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4446 次 |
| 最近记录: |