mvvm_riverpod 1.1.0 copy "mvvm_riverpod: ^1.1.0" to clipboard
mvvm_riverpod: ^1.1.0 copied to clipboard

Simple implementation of the MVVM architecture using Riverpod.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mvvm_riverpod/viewmodel.dart';
import 'package:mvvm_riverpod/viewmodel_builder.dart';
import 'package:mvvm_riverpod/viewmodel_provider.dart';

void main() {
  runApp(
    const ProviderScope(
      child: MyApp(),
    ),
  );
}

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

  void _listenToEvents(
    BuildContext context,
    MyViewModel model,
    MyEvent event,
  ) {
    switch (event) {
      case MyEvent.showSnackbar:
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
          content: Text(model.snackbarMessage ?? ""),
        ));
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: ViewModelBuilder(
          provider: myViewModelProvider,
          onEventEmitted: _listenToEvents,
          builder: (context, model) {
            return Center(
              child: TextButton(
                onPressed: model.doSomething,
                child: model.isLoading
                    ? const CircularProgressIndicator()
                    : const Text("DO SOMETHING"),
              ),
            );
          },
        ),
      ),
    );
  }
}

enum MyEvent {
  showSnackbar,
}

class MyViewModel extends ViewModel<MyEvent> {
  bool _isLoading = false;
  bool get isLoading => _isLoading;

  void doSomething() {
    updateUi(() => _isLoading = true);

    Future.delayed(const Duration(seconds: 3)).whenComplete(() {
      updateUi(() => _isLoading = false);
      showSnackbar("Something was done!", MyEvent.showSnackbar);
    });
  }
}

final myViewModelProvider = ViewModelProviderFactory.create((ref) {
  return MyViewModel();
});
11
likes
140
points
3
downloads

Publisher

unverified uploader

Weekly Downloads

Simple implementation of the MVVM architecture using Riverpod.

Repository (GitHub)
View/report issues

Documentation

API reference

License

GPL-3.0 (license)

Dependencies

flutter, flutter_riverpod

More

Packages that depend on mvvm_riverpod