riverpod_community_extensions 0.1.1 copy "riverpod_community_extensions: ^0.1.1" to clipboard
riverpod_community_extensions: ^0.1.1 copied to clipboard

Extends Riverpod ref types with additional helpers, to easily add common functionalities to your providers.

example/lib/main.dart

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

part 'main.g.dart';

@riverpod
Future<int> cacheDataFor(CacheDataForRef ref) async {
  ref.cacheDataFor(const Duration(seconds: 4));
  await Future.delayed(const Duration(seconds: 3));

  return 42;
}

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

class HomeScreen extends ConsumerStatefulWidget {
  const HomeScreen({
    super.key,
  });

  @override
  ConsumerState<ConsumerStatefulWidget> createState() {
    return _HomeScreenState();
  }
}

class _HomeScreenState extends ConsumerState<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    // ignore: avoid-ref-read-inside-build , this is a demonstration for a side effect
    var data = ref.read(cacheDataForProvider.future);

    return Scaffold(
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(20),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              const Text(
                'Gets mock data. After 3 seconds, it returns 42, '
                'and then cache the result for 4 seconds.',
              ),
              const Divider(indent: 20, endIndent: 20),
              Row(
                mainAxisSize: MainAxisSize.min,
                children: [
                  ElevatedButton(
                    child: const Text(
                      'get data once again',
                    ),
                    onPressed: () {
                      setState(() {
                        data = ref.read(cacheDataForProvider.future);
                      });
                    },
                  ),
                  const SizedBox(width: 10),
                  Padding(
                    padding: const EdgeInsets.all(8),
                    child: FutureBuilder(
                      future: data,
                      builder: (context, snapshot) {
                        if (snapshot.connectionState == ConnectionState.done) {
                          final snapshotData = snapshot.data;
                          if (snapshotData == null) {
                            return const Text('no data');
                          }

                          return Text('data: $snapshotData');
                        }

                        return const CircularProgressIndicator();
                      },
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}
18
likes
150
points
66
downloads

Publisher

verified publisherbam.tech

Weekly Downloads

Extends Riverpod ref types with additional helpers, to easily add common functionalities to your providers.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

connectivity_plus, flutter, riverpod

More

Packages that depend on riverpod_community_extensions