riverpod_builder 0.2.1 copy "riverpod_builder: ^0.2.1" to clipboard
riverpod_builder: ^0.2.1 copied to clipboard

the package to use Riverpod's Provider like the ListView and PageView widgets.We believe that Flutter development can handle it easily.

example/example.md

This is a minimal sample.
If you want to know more details, please check example folder .

  • ※ (optional) if you use package Freezed excute following command.
flutter pub run build_runner build --delete-conflicting-outputs
void main() {
  runApp(const ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Riverpod Builder Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const FirstView(),
    );
  }
}

/// MARK define view state (use ① or ②)
// (A value whose value may change in the view.)

// ① page state without Freezed
class FirstViewState {
  FirstViewState({
    this.count = 0,
  });
  final int count;

  FirstViewState copyWith({
    int? count,
  }) {
    return FirstViewState(
      count: count ?? this.count,
    );
  }
}

// ② page state with Freezed
@freezed
class FirstViewStateWithFreezed with _$FirstViewStateWithFreezed {
  const factory FirstViewStateWithFreezed({
    @Default(0) int count,
  }) = _FirstViewStateWithFreezed;
  factory FirstViewStateWithFreezed.fromJson(Map<String, dynamic> json) => _$FirstViewStateWithFreezedFromJson(json);
}


/// MARK define view model
/// extends BaseViewModel(type auto dispose)

class FirstViewModel extends BaseViewModel<FirstViewState> {
  @override
  FirstViewState get instanse => FirstViewState();

  int get count => state.count;

  
  @override
  void onInit() async {
    // call init this model
    // Asynchronous processing is also possible .
    await Future.delayed(const Duration(seconds: 1));
    super.onInit();
  }

  
  @override
  void onDispose() {
    // call close this model
    super.onDispose();
  }

  void addCount() {
    // update count
    state = state.copyWith(count: state.count + 1);
  }
}

/// MARK define provider

final firstViewModelProvider =
    AutoDisposeNotifierProvider<FirstViewModel, FirstViewState>(
        FirstViewModel.new);

/// MARK define View

class FirstView extends StatelessWidget {
  const FirstView({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('First View'),
      ),
      // wrap this package
      body: RiverpodBuilder(
        provider: firstViewModelProvider,
        builder: (context, ref, vm, state, reader) {
          return SizedBox(
            width: double.infinity,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text("${vm.count}"),
                const SizedBox(
                  height: 20,
                ),
                ElevatedButton(
                  child: const Text("Add Count"),
                  onPressed: () {
                    reader.addCount();
                  },
                )
              ],
            ),
          );
        },
      ),
    );
  }
}

2
likes
140
points
66
downloads

Publisher

unverified uploader

Weekly Downloads

the package to use Riverpod's Provider like the ListView and PageView widgets.We believe that Flutter development can handle it easily.

Repository (GitHub)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, flutter_riverpod

More

Packages that depend on riverpod_builder