Solution: State Management
Explore solutions to the Riverpod challenges.
We'll cover the following...
Solutions
Follow the steps below and compare your answers to each challenge you attempted in the previous lesson.
Challenge 1: Add Packages
We go to line 16 of the pubspec.yaml file and replace # TODO-1: Add flutter_riverpod package with the line below:
flutter_riverpod: ^1.0.0
Challenge 2: Complete the TasksChangeNotifier class
import 'dart:collection';import 'package:flutter/material.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';import '../models/task.dart';final tasksProvider = ChangeNotifierProvider<TasksChangeNotifier>((ref) => TasksChangeNotifier());class TasksChangeNotifier extends ChangeNotifier {final List<Task> _tasks = [];UnmodifiableListView<Task> get tasks {return UnmodifiableListView(_tasks);}int get tasksLength => _tasks.length;void addTask(String task) {_tasks.add(Task(name: task));notifyListeners();}void deleteTask(index) {_tasks.removeAt(index);notifyListeners();}void toggleDone(index) {_tasks[index].isDone = !_tasks[index].isDone;notifyListeners();}}
-
We first import the
flutter_riverpodpackage (line 4). -
On line 7, we declare a
tasksProviderobject, which creates and exposes an instance ofTasksChangeNotifierto be accessed elsewhere within the application. -
Line 19 allows us to add a single task to the list of tasks given its string name. Note that after adding a new task to the list, we call the
notifyListeners()method (line 20), which notifies the users of theTasksChangeNotifierobject that the object changes. -
On line 24, we delete the task occupying the provided index and then ...