Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
775 of 1024 menu
◀ ▶

Класс BuildContext

Интерфейс BuildContext передают в build и в колбэки виджетов. Через него ищут InheritedWidget, состояние предков и объекты отрисовки. Методы поиска перечислены в таблице ниже.

Синтаксис

Widget build(BuildContext context) { Theme.of(context); return const SizedBox.shrink(); }

Методы

Метод Описание
findAncestorStateOfType Поднимается по дереву элементов и возвращает State нужного типа или null, если предка нет. Давайте разберём вызов на примерах.
findAncestorWidgetOfExactType Возвращает конфигурацию Widget у предка или null. Давайте разберём вызов на примерах.
dependOnInheritedWidgetOfExactType Подписывает элемент на InheritedWidget предка.
findRenderObject Возвращает RenderObject элемента, если он уже создан.

Пример

Давайте прочитаем Theme через BuildContext:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo)), home: Scaffold( body: Center( child: ContextReader(), ), ), ), ); } class ContextReader extends StatelessWidget { const ContextReader({super.key}); @override Widget build(BuildContext context) { final primary = Theme.of(context).colorScheme.primary; return Text('abcde', style: TextStyle(color: primary)); } }

На экране BuildContext даст доступ к Theme и окрасит 'abcde'.

Пример

Давайте получим размер экрана через MediaQuery.of(context):

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: WidthLabel(), ), ), ), ); } class WidthLabel extends StatelessWidget { const WidthLabel({super.key}); @override Widget build(BuildContext context) { final w = MediaQuery.sizeOf(context).width; return Text('12345 $w'); } }

На экране BuildContext прочитает ширину и допишет её к '12345'.

Смотрите также

  • виджет Builder,
    который создаёт новый BuildContext для колбэка
  • класс InheritedWidget,
    к которому обращаются через context
  • класс Widget,
    чьи элементы несут BuildContext
  • класс State,
    у которого есть поле context
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить