【Flutter/Riverpod】.autoDispose|プロバイダのステート(状態)は破棄

今回はRiverpodの修飾子.autoDisposeの使い方を紹介します。

.autoDisposeを使用することで参照されなくなったプロバイダのステート(状態)は破棄できます。

\ 世界最大級のオンライン学習サービス /

目次

.autoDisposeの使い方

final counterProvider = StateProvider.autoDispose((ref) => 0);

上記コードのように.autoDispose修飾子をプロバイダの後に付けます。

これでユーザーが別画面に遷移して戻って来る際にステートをリセットします。上記コードの場合は画面遷移して戻ってくる度にcounterProviderの値が0にリセットされます。

サンプルコード

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

final counterProvider = StateProvider.autoDispose((ref) => 0);

void main() {
  runApp(
    const ProviderScope(
      child: MaterialApp(home: HomeScreen()),
    ),
  );
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Home')),
      body: Center(
        child: ElevatedButton(
          child: Text(
            'Start Counting',
            style: TextStyle(fontSize: 20),
          ),
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => const CounterScreen(),
              ),
            );
          },
        ),
      ),
    );
  }
}

class CounterScreen extends ConsumerStatefulWidget {
  const CounterScreen({Key? key}) : super(key: key);

  @override
  ConsumerState<ConsumerStatefulWidget> createState() => _CounterScreenState();
}

class _CounterScreenState extends ConsumerState<CounterScreen> {
  @override
  Widget build(BuildContext context) {
    final CounterScreen = ref.watch(counterProvider);

    return Scaffold(
      appBar: AppBar(
        title: Text('Counter'),
      ),
      body: Center(
        child: Text(
          CounterScreen.toString(),
          style: TextStyle(fontSize: 40),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          ref.read(counterProvider.notifier).state++;
        },
      ),
    );
  }
}

一緒に読みたい

参考

  • URLをコピーしました!
目次