BuildContex + дерево виджетов - PullRequest
       10

BuildContex + дерево виджетов

0 голосов
/ 04 апреля 2019

Я следую документации флаттера о классе BuildContext , потому что мне не ясно, как и зачем использовать этот класс.

  Widget build(BuildContext context) {
    // here, Scaffold.of(context) returns null
    return Scaffold(
      appBar: AppBar(title: Text('Demo')),
      body: Builder(
        builder: (BuildContext context) {
          return FlatButton(
            child: Text('BUTTON'),
            onPressed: () {
              // here, Scaffold.of(context) returns the locally created Scaffold
              Scaffold.of(context).showSnackBar(SnackBar(
                content: Text('Hello.')
              ));
            }
          );
        }
      )
    );
  }

Я не получаю этот абзац:

BuildContext для определенного виджета может со временем менять местоположение как виджет перемещается вокруг дерева. Из-за этого ценности возвращаемые из методов этого класса не должны кэшироваться за выполнение одной синхронной функции.

Объекты BuildContext на самом деле являются объектами Element. The BuildContext интерфейс используется для предотвращения прямых манипуляций с элементом объекты.

при перемещении виджета по дереву -> как это происходит?

В соответствии с моим пониманием (и, пожалуйста, исправьте меня, если я ошибаюсь здесь), дерево виджетов - это в основном то, как виджеты «сложены» и как они строят друг друга. Поскольку не рекомендуется иметь подвиджеты, на которые ссылаются как на свойства в вашем классе CustomWidget, как я могу изменить положение в дереве виджета, возвращаемого во время метода сборки (или как это происходит по умолчанию из-за структуры)

1 Ответ

1 голос
/ 04 апреля 2019

Это изменение дерева обычно происходит, когда метод build условно создает своих потомков

Пример:

Widget build(BuildContext context) {
  return condition
    ? Foo()
    : Bar(child: Foo());
}

При таком методе build BuildContext виджета Foo изменяется при изменении condition.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...