Что вы собираетесь узнать: 1- Что делает InheritedWidget? 2- Зачем нам нужен InheritedWidget? 3- Как реализовать InheritedWidget? 4- Как получить доступ к данным из InheritedWidget?
Примечание. Как и другие виджеты, InheritedWidget является неизменяемым (мы не можем изменять данные после их установки, это означает, что данные являются окончательными).
1- Что делает InheritedWidget?
Его функция заключается в хранении данных и предоставлении данных другим виджетам вплоть до дерева виджетов.
2- Зачем нам нужен InheritedWidget?
Если мы поместим данные в корневой виджет дерева виджетов, чтобы получить доступ к данным, мы столкнемся с проблемами:
i- Мы должны передать данные через конструкторы всех виджетов в этом дереве виджетов.
ii- Все другие виджеты в дереве виджетов имеют данные, даже если они их не используют.
Используя InheritedWidget, все дочерние виджеты могут получать доступ к данным непосредственно из InheritedWidget, и все дерево будет пропущено.
3- Как реализовать InheritedWidget?
В другом случае для его реализации нам нужны две вещи: одна - данные, а вторая - дочерний виджет.
i- Данные
Данные (int, double, String, dynamic, any object, any collection or service, bloc и т. Д.), Которые мы хотим сделать доступными по трем
ii- Дочерний виджет
Дерево виджетов, в котором мы хотим получить доступ к данным из InheritedWidget
4- Как получить доступ к данным из InheritedWidget?
Для доступа к InheritedWidget используйте метод BuildContext «inheritFromWidgetOfExactType».
Вот соглашение о создании статического метода «of» внутри класса InheritedWidget для доступа к нему:
static DataHolderAndProvider of(BuildContext context){ return context.inheritFromWidgetOfExactType(DataHolderAndProvider); }
Затем просто вызовите его из дочернего виджета в дереве:
final data=DataHolderAndProvider.of(context).data;
Ниже приведен пример всех трех шагов:
Шаг № 1 Реализация InheritedWidget
Шаг # 2 Используйте InheritedWidget в качестве корневого виджета
Шаг # 3 Получите данные в дочернем виджете
Ниже приведена полная ссылка на исходный код:
"ссылка"
Https://github.com/codinghivedev/inheritedwidget_holderprovider