【问题标题】:Riverpod: How do you manage loading and error states with StateNotifier?Riverpod:您如何使用 StateNotifier 管理加载和错误状态?
【发布时间】:2023-02-01 21:37:10
【问题描述】:

如何像在Riverpod中使用FutureProvider那样使用StateNotifier加载/错误状态?

我们可以使用 setState、使用三元运算符的 var isLoading 和 didChangeDependencies 对 Provider 做同样的事情。

【问题讨论】:

    标签: flutter flutter-provider riverpod flutter-riverpod


    【解决方案1】:

    FutureProviderAsyncValue 一起工作。
    您也可以像这样将 AsyncValueStateNotifier 一起使用:

    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);
      }
    }
    

    它允许您像这样使用 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();
              },
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 我想从 Firebase 获取数据。我如何将其置于状态?
    • Firestore 还是实时数据库?
    • 我实现了这个方法,但它在加载时堆叠起来,我该如何解决?
    • 您是否尝试按下浮动操作按钮?
    猜你喜欢
    • 2022-09-24
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2021-03-17
    • 2021-02-10
    • 2021-01-28
    • 2021-04-21
    相关资源
    最近更新 更多