InheritedWidgets are some of the most fascinating widgets in the whole Flutter framework. Their job isn't to render anything on the screen, but to pass data down to lower widgets in the tree. Just like any other widget in Flutter, InheritedWidgets can also have child widgets.
Let's break down the first portion of the PlanProvider class:
class PlanProvider extends InheritedWidget {
final _plans = <Plan>[];
PlanProvider({Key key, Widget child}) : super(key: key, child: child);
@override
bool updateShouldNotify(InheritedWidget oldWidget) => false;
First, we define an object that will store the plans (_plans). Then, we define a default unnamed constructor, which takes in a key and a child, and passes them to the superclass (super).
InheritedWidget is an abstract class, so you must implement the updateShouldNotify method. Flutter calls this method whenever the widget is rebuilt. In the updateShouldNotify method, you can look at the...