Что вы собираетесь узнать: 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



Спасибо за чтение, если хотите, подписывайтесь на меня.