riverpod_reg 2.0.0 copy "riverpod_reg: ^2.0.0" to clipboard
riverpod_reg: ^2.0.0 copied to clipboard

A code generator for Riverpod providers using build_runner

Providers Register #

A code generation library for Riverpod providers. It generates a structured way to access your providers with type safety and convenience.

class MyWidgetState extends ConsumerState<MyWidget> {
  final settingsNotifier = providers.read.settings; // Use notifiers (for state changes)
  @override
  Widget build(BuildContext context) {
    final serverState = ref.providers.watch.server; // Watch (reactive updates)
    return InkWell(
      onTap: () {
        final serverState = ref.providers.read.server; // Read (one-time access)
        settingsNotifier.updateCount(serverState.count + 1);
      },
      child: Text('Server: ${serverState.url}'),
    );
  }
}

Usage #

1. Configure Generation (Optional) #

In your pubspec.yaml, optionally configure the generation:

riverpod_reg:
  class_name: "AppProviders"  # Default: "MyProviders"

2. Annotate Your Providers #

Use @registerProvider to mark providers for generation:

import 'package:riverpod_reg/riverpod_reg.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'server_provider.g.dart';

@riverpod
@registerProvider  // Mark for generation
class ServerNotifier extends _$ServerNotifier {
  @override
  ServerState build() => const ServerState();
}

@RegisterProvider(name: 'settings')  // Custom name
final settingsProvider = Provider<SettingsState>((ref) => const SettingsState());

3. Generate Code #

Run build_runner to generate the providers:

dart run build_runner build

4. Use Generated Providers #

The generated code provides three access patterns:

class MyWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    // Read (one-time access)
    final serverState = ref.providers.read.server;
    final settingsState = ref.providers.read.settings;
    
    // Watch (reactive updates)
    final serverState = ref.providers.watch.server;
    
    // Use notifiers (for state changes)
    final serverNotifier = ref.providers.use.server;
    
    return YourWidget();
  }
}

Annotation Options #

@RegisterProvider #

class RegisterProvider {
  final String? type;           // Provider type (auto-detected)
  final String? name;           // Custom accessor name
  final bool includeRead;       // Include in read operations (default: true)
  final bool includeWatch;      // Include in watch operations (default: true)  
  final bool includeNotifier;   // Include in notifier operations (default: true)
}

Examples #

// Basic registration
@registerProvider
final myProvider = Provider<MyState>((ref) => MyState());

// Custom name
@RegisterProvider(name: 'customName')
final myLongProviderName = Provider<MyState>((ref) => MyState());

// Exclude from watch operations
@RegisterProvider(includeWatch: false)
final myReadOnlyProvider = Provider<MyState>((ref) => MyState());

// Notifier only
@RegisterProvider(includeRead: false, includeWatch: false)
final myNotifierProvider = NotifierProvider<MyNotifier, MyState>(MyNotifier.new);

License #

This project is licensed under the MIT License - see the LICENSE file for details.

0
likes
150
points
3
downloads

Publisher

verified publisherlpkt.cn

Weekly Downloads

A code generator for Riverpod providers using build_runner

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

analyzer, build, build_runner, glob, meta, riverpod_annotation, source_gen, yaml

More

Packages that depend on riverpod_reg