Solution: State Management
Explore solutions to the Riverpod challenges.
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:
Press + to interact
flutter_riverpod: ^1.0.0
Challenge 2: Complete the TasksChangeNotifier
class
Press + to interact
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_riverpod
package (line 4). -
On line 7, we declare a
tasksProvider
object, which creates and exposes an instance ofTasksChangeNotifier
to 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 theTasksChangeNotifier
object that the object changes. ...