Riverpodライクな書き味を、より小さな構成で。

miniriverpod は Provider/AsyncProvider の体験を保ちながら、family・mutation・ライフサイクルを Flutter 向けに整理した実装です。

コード生成なし

family相当、override、mutation まで通常の Dart クラスで記述できます。

非同期モデルを統一

AsyncProvider ひとつで Future と Stream を扱い、再計算時の購読解除も厳密に管理します。

並行実行を内蔵

mutation 呼び出しに concurrent / queue / restart / dropLatest を標準提供します。

実運用までの基本フロー

ProviderScope + Provider クラス + ref.invoke を軸に、更新フローを明確に構成します。

インストール

flutter pub add miniriverpod

Mutation + Invoke

user_provider.dart
class UserProvider extends AsyncProvider<User?> {
  UserProvider() : super.args(null);

  late final renameMut = mutation<void>(#rename);

  Call<void, AsyncValue<User?>> rename(String name) => mutate(
    renameMut,
    (ref) async {
      final api = ref.watch(apiProvider);
      await api.rename(name);
      ref.state = AsyncData(await api.me());
    },
    concurrency: Concurrency.restart,
  );
}

// UI
await ref.invoke(userProvider.rename('Alice'));
互換性に関する注意

miniriverpod は Provider + AsyncProvider + WidgetRef の使い方をRiverpodに近づけつつ、codegen 前提の機能はサブクラス + args と明示的な mutation 呼び出しに置き換えています。