TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 995 subscribers
Post #215 787
🔗Всем привет! С вами Анна, Flutter Team Lead Friflex

Сегодня начнем разбирать вопрос про Provider, который нам прислал один прекрасный подписчик. Разработчики provider описывают этот класс как некоторую обертку для InheritedWidget. Чтобы лучше его понять, сегодня вспомним, что такое InheritedWidget и как он работает.

InheritedWidget — виджет, который позволяет передавать некоторые данные дальше по дереву виджетов. При его использовании пропадает необходимость прокидывать данные через конструкторы. Для примера создадим виджет CustomInherited.

class CustomInherited extends InheritedWidget {
const CustomInherited({required this.data, required Widget child})
: super(child: child);

final String data;

static CustomInherited? of(BuildContext context) =>
context.dependOnInheritedWidgetOfExactType<CustomInherited>();

@override
bool updateShouldNotify(CustomInherited oldWidget) => data != oldWidget.data;
}


CustomInherited реализует статический метод of(context). Под капотом этот метод вызывает context.dependOnInheritedWidgetOfExactType<T>(), который в свою очередь по переданному контексту выполняет поиск самого ближайшего экземпляра виджета типа CustomInherited и возвращает его.

Теперь CustomInherited готов к внедрению в дерево виджетов.

CustomInherited(
data: 'inherited data',
child: Container(
padding: const EdgeInsets.all(16),
child: Text(CustomInherited.of(context)?.data ?? ''),
),
),


Так как InheritedWidget предоставляет данные по контексту дальше, то его необходимо располагать выше виджетов, которые должны иметь доступ к его данным. Здесь, например, виджету Text необходимо передать строку из CustomInherited, поэтому инхерит располагаем выше.

По необходимости официальная документация Flutter предлагает создавать два метода — maybeOf(context) и of(context), где первый возвращает nullable экземпляр, а второй — non-nullable.

static CustomInherited? maybeOf(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<CustomInherited>();
}

static CustomInherited of(BuildContext context) {
final result = maybeOf(context);
assert(result != null, 'No CustomInherited found in context');
return result!;
}


Также InheritedWidget обязует нас переопределять метод updateShouldNotify. Этот метод возвращает bool значение, которое отвечает за то, должны ли зависимые виджеты пересобираться при изменении данных внутри InheritedWidget.

✔️Вот мы и разобрались в основах InheritedWidget. В следующем посте поговорим про Provider.

Делитесь своим опытом работы с InheritedWidget в комментариях.
  • ❤ 11
  • ❤‍🔥 4
  • 🔥 3
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →