riverpod_mvvm 0.0.1 copy "riverpod_mvvm: ^0.0.1" to clipboard
riverpod_mvvm: ^0.0.1 copied to clipboard

Simple implementation for Model-View-ViewModel Architecture

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:riverpod_mvvm/riverpod_mvvm.dart';
import 'package:riverpod_mvvm_example/second_page.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(
    const ProviderScope(
      child: MaterialApp(
        home: MyApp(),
      ),
    ),
  );
}

class MyApp extends StatefulView<MyAppViewModel, int> {
  const MyApp({super.key});

  @override
  ViewState<MyAppViewModel, int> createState() => _MyAppState();
}

class _MyAppState extends ViewState<MyAppViewModel, int> with MyAppUiActions {
  @override
  initViewModel() {}

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: InkWell(
          onTap: () {
            read.moveToSecond();
          },
          child: const Icon(Icons.exit_to_app_sharp),
        ),
        title: const Text('Example'),
      ),
      body: Center(
        child: Text(
          '$watch',
          style: const TextStyle(fontSize: 32),
        ),
      ),
      floatingActionButton: FloatingActionButton.large(
        onPressed: () {
          read.increase();
        },
        child: const Icon(Icons.add),
      ),
    );
  }

  @override
  MyAppViewModel get read => ref.read(myAppViewModel.notifier);

  @override
  int get watch => ref.watch(myAppViewModel);

  @override
  moveToSecondPage() {
    Navigator.of(context)
        .push(MaterialPageRoute(builder: (context) => const SecondPage()));
  }
}

mixin MyAppUiActions {
  moveToSecondPage();
}

final myAppViewModel =
    StateNotifierProvider<MyAppViewModel, int>((ref) => MyAppViewModel(0));

class MyAppViewModel extends StateNotifier<int> with ViewModel<MyAppUiActions> {
  MyAppViewModel(super.state);

  increase() {
    state++;
  }

  moveToSecond() {
    state = 0;
    uiActions.moveToSecondPage();
  }
}
2
likes
140
points
8
downloads

Publisher

unverified uploader

Weekly Downloads

Simple implementation for Model-View-ViewModel Architecture

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_riverpod, flutter_web_plugins, plugin_platform_interface

More

Packages that depend on riverpod_mvvm