flutter: FutureProvier

widgetを返したい時に使うもの?

どうもよく解らない、、

StateNotifierはstateと関数を保持するもの それをProvier するのが、StateNotifierProviderってのは理解できる。

で、FutureProvierって何者? StateNotifierの中で、Futureを返却するメソッドを作る事と何が違うんだ?

【Flutter】 Riverpod チートシート(書きかけ)

Flutter RiverpodのFutureProviderでAPI通信処理を楽に実装する | ZUMA Lab

ViewModel の代わりとして Riverpod の FutureProvider を利用できます。
また、FutureProvider は AsyncValue のオブジェクトを生成してくれます。
// AutoDisposeFutureProviderFamilyをつかったやつ
final loginStateProvider = StateProvider((ref) => const LoginState());

final loginStateFutureProvider = FutureProvider.autoDispose
    .family<LoginState, AuthRequest>(
        (ref, authRequest) async {
          LoginState loginState = await Repository()
              .login(authRequest.name, authRequest.password)
              .onError((error, stackTrace) async {
            ref.watch(errorMessageProvider.notifier).state = "失敗だな";
            throw Exception(error.toString());
          });

          ref.watch(loginStateProvider.notifier).state.copyWith(
            isSaseki: loginState.isSaseki,
            syokuinCode: loginState.syokuinCode,
            accessToken: loginState.accessToken,
            refreshToken: loginState.refreshToken,
          );
          return loginState;
    }
);

view側

        child: messageProvider.when(
          data: (message) => ScheduleListHeader(scRes: message),
          error: (error, stackTrace) {
            Future(() {
              showDialog(
                  context: context,
                  builder: (_) {
                    return AlertDialog(
                      title: const Text("認証失敗、再ログインをお願いします。"),
                      actions: [
                        TextButton(
                            onPressed: () => Navigator.pop(context),
                            child: const Text("OK")),
                      ],
                    );
                  }).then((_) {
                Navigator.pop(context);
              });
            });
          },
          loading: () => const AspectRatio(
            aspectRatio: 0.01,
            child: CircularProgressIndicator(),
          ),
        ),
/* -----codeの行番号----- */