DEV Community

Swee Sen
Swee Sen

Posted on

Flutter: Basic MVVM setup with provider

0. Update pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  provider: ^6.0.0
Enter fullscreen mode Exit fullscreen mode

1.Create ViewModel

Create a new class that extends ChangeNotifier

class HomePageModel extends ChangeNotifier {
  // we make _items private, modification should only be done through
  // `addItem` function
  final List<String> _items = [];

  // get method to for public to access _items;
  List<String> get items => _items;

  void addItem(String item) {
    _items.add(item);
    notifyListeners();
  }
}
Enter fullscreen mode Exit fullscreen mode

2. Create View (Widget), link to ViewModel

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

  @override
  Widget build(BuildContext context) {
    return Consumer<HomePageModel>(
      builder: (context, value, child) => Scaffold(
        floatingActionButton: FloatingActionButton(
          onPressed: (() {
            value.addItem("new item");
          }),
          child: const Text("+"),
        ),
        body: ListView(
          children: value.items.map((e) => Text(e)).toList(),
        ),
      ),
    );
  }
}
Enter fullscreen mode Exit fullscreen mode
  • Use Consumer<HomePageModel> to access the view model, via the value param
  • Access list of items through value.items
  • Add item to list through value.addItem

3. Wrap the widget with ChangeNotifierProvider

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: ChangeNotifierProvider(
          create: (context) => HomePageModel(),
          child: const HomePage(),
        ));
  }
}
Enter fullscreen mode Exit fullscreen mode
  • Wrap HomePage widget with ChangeNotifierProvider.
  • Inject an instance of HomePageModel as the view model

Sentry mobile image

Mobile Vitals: A first step to Faster Apps

Slow startup times, UI hangs, and frozen frames frustrate users—but they’re also fixable. Mobile Vitals help you measure and understand these performance issues so you can optimize your app’s speed and responsiveness. Learn how to use them to reduce friction and improve user experience.

Read the guide

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay