...

/

Solution: State Management

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();
}
}
  1. We first import the flutter_riverpod package (line 4).

  2. On line 7, we declare a tasksProvider object, which creates and exposes an instance of TasksChangeNotifier to be accessed elsewhere within the application.

  3. 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 the TasksChangeNotifier object that the object changes. ...