Flutter buildcontext что такое

Что делает BuildContext во Флаттере?

Что делает BuildContext и какую информацию мы получаем из этого?

Может кто-нибудь объяснить это простыми / очень простыми словами?

3 ответа

Если вы когда-либо делали какой-то React ранее, этот контекст похож на контекст React (но гораздо более удобный в использовании); с несколькими бонусами.

Вообще говоря, есть 2 варианта использования для контекста:

Второй момент довольно редкий. С другой стороны, первая точка используется практически везде.

Обратите внимание на контекст здесь. Он будет использован для получения ближайшего экземпляра виджета NavigatorState выше в дереве. Затем вызовите метод pushNamed в этом экземпляре.

Круто, но когда я хочу его использовать?

BuildContext действительно полезен, когда вы хотите передать данные вниз без необходимости вручную назначать их каждому виджету. Конфигурации например; вы захотите получить к ним доступ везде. Но вы не хотите передавать его каждому конструктору.

Вы могли бы сделать глобальный или синглтон; но затем при изменении настроек ваши виджеты не будут автоматически перестраиваться.

А затем используйте это так:

Вихревое дерево виджетов состоит из 02 типов виджетов.

1- виджет класса (родительский виджет / класс расширяется виджетом без состояния или с состоянием)

2- сборка виджета (дочерний виджет / возврат виджета через build ()

Оба виджета имеют свой собственный контекст.

Контекст

Что на самом деле означает контекст?

Там 02 типа контекста

Контекст виджета класса. Этот контекст невидим для нас. Его использование только самой платформой для создания дерева элементов.

Построить контекст виджета / контекст BuildContext

Все знают, что переменная или параметр имеет свой собственный тип. (например, int, double, String..etc)

Таким образом, этот параметр контекста также имеет тип с именем «BuildContext»

(Это специальное имя «BuildContext» хорошо представляет значение этого контекста, поскольку этот контекст принадлежит методу сборки, поэтому он получает имя как «BuildContext»)

Где находится этот виджет

Чтобы ответить на этот вопрос, см. Код ниже, он покажет вам местоположение сборки этого виджета (и это местоположение является хранилищем в объекте контекста (параметр).

В этом посте я рассказывал вам о значении контекста. Но здесь я не использовал случаи контекста BuildContext, но некоторые случаи использования показаны @Remi Rousselet ответ.

Надеюсь, это поможет вам

Просто объясните, что BuildContext :

BuildContext принадлежит только одному виджету.

Читая это, становится ясно, что BuildContexts объединены в цепочку и составляют дерево BuildContexts (отношения родитель-дети)

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Если мы сейчас попытаемся проиллюстрировать понятие BuildContext на предыдущей диаграмме, мы получим (все еще в очень упрощенном виде), где каждый цвет представляет BuildContext (кроме MyApp, который отличается):

На следующей диаграмме показана (упрощенная версия) последовательность действий / вызовов, связанных с создание Stateful Widget.

Состояние виджета не зависит от параметров, и все же он перестраивался при каждом изменении параметров. В этом случае необходимо использовать InheritedWidget

Метод static MyInheritedWidget of(BuildContext context) позволяет всем дочерним виджетам получить экземпляр ближайшего MyInheritedWidget «, который включает контекст

Источник

Перевод статьи Flutter in Context автора Greg Perry

Детальный разбор класса BuidContext
(Эта статья является частью серии Decode Flutter Series)

Вы уже знакомы с контекстными объектами? Я имею в виду объекты класса BuildContext с именем context, который постоянно передается функции build(), а также является необходимым параметром для множества статических функций:

Они помогают идти вверх или сквозь «дерево рендеринга» (или же «дерево виджетов»). Мы подробно рассмотрим эти объекты в этой статье, заглянем «под капот» фреймворка Flutter и выясним, из чего именно состоит этот объект BuiltContext под названием context. А это означает, что мы «пойдем» сквозь код. Собственно, не буду долго тянуть и держать вас в неведении и прямо сейчас рассажу вам, что именно это за объект: это элемент.

Нажмите на скриншот, чтобы открыть отрывок кода.

Я всегда предпочитаю использовать скриншоты в своих статьях для отображения самого концепта, а не просто кода. К тому же, я считаю, что с ними проще работать. Однако, вы можете кликнуть на изображение, чтобы открыть сам код в gist или в Github. Также эту статью лучше читать не на мобильном устройстве, а через компьютер.

Not In Context

Так уж получилось, что мы не собираемся подробно рассматривать сам класс BuildContext. Хоть он и является ключевым во фреймворке Flutter, просто представления о том, что он делает в приложении, будет вполне достаточно. К тому же, это абстрактный класс – вы должны создать подкласс и реализовать все поля и функции, что он содержит.
Ниже предоставлен скриншот класс со всей его документацией и удаленными устаревшими функциями – просто чтобы дать вам представление об его роли во Flutter. Вы даже можете узнать некоторые функции и даже удивиться тому, в каком классе они находятся. Затем мы определим точный подкласс, который использует BuildContext. Правда, эту загадку я уже раскрыл выше.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Элементы виджетов

Отойдем немного назад и посмотрим сперва на класс StatelessWidget. Ниже расположен скриншот одного такого класса со всей его документацией, чтобы вы могли рассмотреть, из чего он состоит. Не очень-то много всего, правда? Это абстрактный класс, и его подкласс, конечно, должен реализовывать метод build() – это мы уже знаем. Однако, что насчет метода createElement()? Он создает другой класс под названием StatelessElement и,фактически, ссылается на себя в качестве параметра.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Я решил оставить всю немногочисленную документацию класса StatelessElement. Обратите внимание, указанный в конструкторе параметр widget класса StatelessWidget передается родительскому классу ComponentElement, туда мы и перейдем:

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Класс ComponentElement становится более обширным, так что я сделал скриншот начала этого класса. Это тоже абстрактный класс, что имеет смысл, поскольку он содержит тот самый необходимый для выполнения метод build(). Сейчас мы возвращаемся назад через иерархию классов, однако, мы еще посетим эти «промежуточные» классы через некоторое время. Сейчас мы должны обратить внимание на класс Element.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Опять-таки, мы смотрим только на начало этого класса. Он гораздо больше тех, что мы рассматривали ранее: в целом, он состоит из 90 методов и полей. В самом деле, довольно важный «элемент». Однако, мы пришли к цели. Что вы видите?

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Класс Element реализует другой класс, BuildContext. В отличие от, к примеру, Java, любой класс в языке программирования Dart может быть использован, как интерфейс – вы просто добавляете его название в конце декларации класса сразу после ключевого слова implements.

Конечно, если только ваш класс не является абстрактным, вы должны реализовать все методы и поля, составляющие этот класс. В случае с классом Elements, мы реализуем класс BuildContext со всей его составляющей – не удивительно, что теперь мы видим огромное количество полей и методов. После выполнения этой непростой задачки, мы наконец-то можем заключить, что, как и во всех ориентированных на объект языках, объект типа Element может быть передан функциям или конструкторам как объект типа BuildContext.

Документация Flutter поясняет, что BuildContext было решено использовать в качестве интерфейса с целью препятствия прямому манипулированию объектами Element – что бы это ни значило. К тому же, кто вообще захочет разбираться с 90 методами и полями класса?

Так что, теперь вы знаете, что при размещении контрольной точки в своей любимой IDE прямо в строке метода build(), параметр контекста (context), переданный этму методу (в случае StatelessWidget) – тот самый объект StatelessElement, создание которого мы видели в скриншоте StatelessWidget. Обратите внимание, что это касается и StatefulWidget – только с объектом StatefulElement. Оба эти типа виджетов представлены ниже:

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Помните, что у каждого виджета есть свой объект Element (или же объект BuildContext). Element/BuildContext может принадлежать только одному виджету. Когда вы только начинали изучать Flutter, скорее всего, вы пришли к выводу, что все виджеты, составляющие ваше приложение, расположены в древообразном порядке, и это правда, только не совсем. Это их сообщающиеся объекты Element, связанные друг с другом. Каждый элемент (контекст) содержит отсылку на свой «родительский» элемент, который создает тот самый элемент (контекст) при запуске приложения Flutter. Можно сказать, что приложение Flutter состоит из связанных друг с другом объектов BuildContext, которые и составляют «древо объектов BuildContext». Они остаются неизменными в течение всего цикла приложения, в то время как их аналоги-«виджеты» могут быть удалены и воссозданы вновь и вновь.

Поместим это в контекст

Я воспользуюсь приложением из другой статьи для демонстрации «процесса наполнения», задействованного при запуске приложения и того, как каждый виджет включает в себя свой собственный аналог элемента (контекста). Домашний экран приложения со всем его кодом представлен ниже. На первый взгляд, мы имеем десять виджетов:

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Скриншоты ниже показывают, что происходит при вызове метода createElement для StatelessWidget. Как только это происходит, в «родительском» методе элемента, inflateWidget(), создается соответствующий объект элемента виджета. На среднем скриншоте отображена эта функция и показано, как недавно созданный объект элемента вызывает свою собственный метод mount(). Это происходит там же, где и «родительский» элемент привязывается к полю дочернего экземпляра _parent, добавляясь к древу рендеринга. Каждому виджету соответствует свой элемент/контекст объекта.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

А теперь с Context

При помощи ссылки на объекты BuildContext у вас появляется все необходимое для возврата к дереву, чтобы получить все «выше» созданные экземпляры Widgets и объекты State. К примеру, все эти функции «of» перечислены в начале этой статьи, и каждая из них содержит функцию из BuidContext, реализованную и определенную в классе Element:

Тема оформления

Напоследок, разберем еще парочку более популярных исполнений. Работая с Flutter, вы обнаружите, что статичная функция Theme.of() используется несколько раз при работе фреймворка. Ниже слева есть скриншот, показывающий весьма распространенное действие – получение объекта ThemeData для применения определенного стиля для виджета Text. На скриншоте справа отображен определенный в классе BuidContext метод dependInheritWidgetOfExactType, используемый для поиска определенного «типа InheritedWidget» в объекте Map под названием _inheritedWidgets.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Ищем Scaffold

В приложениях Flutter также весьма распространен метод Scaffold.of(). Он содержит прочие методы, определенные в классе BuildContext и реализованные в классе Element. Также он идет вверх через весь список связанных объектов Element, чтобы найти ранее определенный объект State. Практически целый цикл связан с возвращением через связанный список объектов Element ( каждый из них связан со своим «родителем») в целях поисках виджета определенного типа. В нашем случае выполняется поиск Scaffold, определенного ранее в древе рендеринга, а затем возвращается его связанный объект State под названием ScaffoldState.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Пока что остановимся на этом. Класс Element реализует класс BuildContext, и, возможно, чуть позже мы обратимся к ряду других функций, с помощью которых можно извлекать множество «элементов» вашего приложения, если они уже были созданы и упомянуты как часть древа рендеринга.

Источник

Про Flutter, кратко: Основы

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

После доклада Юры Лучанинова, я решил для себя попробовать Flutter. Чтобы мозг размять, и чтобы было о чем похоливарить с мужиками на кухне. Дело пошло. Я начал смотреть, потом читать, потом писать. И вроде все получается, приложения запускаются, и то что объясняют — понятно, все просто. Но не без “но” — объясняют не все. А поскольку платформа, ЯП, подходы и даже предметная область для меня новые, то подобное вызывает раздражение, ведь у тебя “не запускается”, а ты даже не знаешь что гуглить: Dart/Flutter/Window/Screen/Route/Widget?

Перечитывать всю документацию Dart, Flutter и его виджетов конечно же не хотелось, ведь времени у меня не много, и мне лишь хотелось присмотреться к Flutter. Вот было бы здорово, если бы был небольшой гайд, в котором описано все нужное, но не больше, для понимая и написания не слишком сложных приложений на Flutter!

Про гайд

Большинство статей по этой теме хорошо написаны и не являются сложными. Проблема заключается в том, что большинство из них предполагают наличие знаний считающихся базовыми основами, которые, тем не менее, не упоминаются в других статьях описывающих основы. В данной серии статей я хочу исправить эту ситуацию. Начнем с нуля и, не оставляя ничего из упомянутого без внимания, запустим одно или несколько приложений. В процессе научимся пользоваться всеми основными компонентами, создавать уникальный интерфейс, работать с нативными модулями, и, конечно же, собирать свое приложение под обе платформы.

Писать я буду с перспективы веб-разработчика. Большинство из вас скорее всего знакомо со стэком веба, а аналогия со знакомой платформой лучше аналогии с постройкой домов или чего там еще, Animal, Dog, Foo, Bar…

Излагаться постараюсь кратко, чтобы не затягивать. А для самых любознательных буду оставлять полезные ссылки по обсуждаемым темам.

Про платформу

Flutter — молодая, но очень многообещающая платформа, уже привлекшая к себе внимание крупных компаний, которые запустили свои приложения. Интересна эта платформа своей простотой сравнимой с разработкой веб-приложений, и скоростью работы на равне с нативными приложениями. Высокая производительность приложения и скорость разработки достигается за счет нескольких техник:

О практической пользе этих факторов я очень рекомендую прочитать статью Android разработчика, который переписал свое приложение с Java на Dart и поделившегося своими впечатлениями. Сюда я лишь вынесу названное им количество файлов/строк кода до (написанное на Java) — 179/12176, и после (переписанное на Dart) — 31/1735. В документации можно найти подробное описание технических особенностей платформы. А вот ещё ссылка, если интересно посмотреть другие примеры работающих приложений.

Про Dart

Dart — язык программирования на котором нам предстоит писать приложения под Flutter. Он очень прост, и если у вас есть опыт работы с Java или JavaScript, вы быстро его освоите.

Я пытался написать обзорную статью о Dart, стремясь описать лишь необходимый минимум для изучения Flutter. Но в этом языке столько нюансов, что несмотря на несколько попыток написать такую статью, у меня так и не удалось сделать ее достаточно полной и в то же время короткой. С другой стороны, авторы A Tour of the Dart Language отлично справились с этой задачей.

Про подготовку

Эта тема, как и Dart, очень хорошо описана в официальном гайде. Я мог бы разве что скопировать ее сюда, но делать этого не стану.

Ничего не дожидаясь, идем на страницу гайда по установке, выбираем платформу и по шагам выполняем инструкцию для установки платформы на нашу систему. В своем редакторе обязательно подключаем плагины. В том же гайде есть инструкция по настройке VS Code и IntelliJ. Для вашего редактора тоже найдутся плагины для Dart и Flutter (обычно нужно ставить два). Запускаем приложение и проверяем его работоспособность.

Подсказка для пользователей OSX. Мне жалко места занимаемого нарисованными рамками телефона в эмуляторе iOS, поэтому я их отключил и переключился на iPhone 8 (он не такой “длинный”):

iPhone 8 & iPhone X с рамками
Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

iPhone 8 & iPhone X без рамок
Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Про структуру

Зайдем в папку со сгенерированным приложением и разберемся что у нас там есть. Не со всем, но с нужным:

Про виджеты (Hello World здесь)

Во Flutter’е все построено на Widget’ах: тут и вьюшки, и стили с темами, и состояние в виджетах хранится. Есть два основных типа виджетов: со стейтом и без, но пока не об этом. Давайте с простого.

Удаляем все из main.dart. Вставляем следующий код внимательно вчитываясь в комментарии:

Уже запустили приложение? “Hello, World!” вывелся! Вроде бы… Да? Но что-то явно пошло не так.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Текст перекрыт системной информацией. В нашем распоряжении все пространство экрана, и мы вывели виджет в самом его начале, где в том числе выводится системная информация. Давайте попробуем куда-то подвинуть наш текст.

Композиции виджетов используются в Flutter для отрисовки UI, изменения внешнего вида, и даже для передачи данных. К примеру виджет Directionality(…) задает направление текста для всех дочерних виджетов:

Посмотрим на еще один очень важный виджет и заодно преобразим внешний вид нашего приложения:

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Color(…) — цвет. В документации указаны разные способы его задания, но основным является просто передача числа в конструктор класса. В примере выше мы передаем конструктору число, записанное в шестнадцетиричной форме, что очень похоже на HEX, только вначале у нас добавилось еще два знака, означающих степень прозрачности цвета, где 0x00 — это абсолютно прозрачный, а 0xFF — это совсем не прозрачный.

TextStyle(…) — еще более интересный виджет, с его помощью можно задать цвет, размер, толщину, межстрочный интервал, добавить подчеркивание и прочее.

Приложение на Flutter написано, дело сделано! В доках можно почитать как его собрать под Android и iOS, там же есть ссылочки чтобы вы узнали как его отправить в нужный Store. Кому этого мало, я ниже накидал еще пару строк про Flutter, может больше…

Про Stateless виджеты

Как использовать виджеты — мы разобрались, давайте теперь разбираться как их создавать. Выше уже упоминалось, что есть виджеты у которых есть состояние, и у которых его нет. До сих пор мы использовали только виджеты без состояния. Это не значит, что у них его совсем нет, ведь виджеты это просто классы, и их свойства могут быть изменены. Просто после того, как виджет будет отрисован — изменения его состояния не приведет к обновлению этого виджета в UI. К примеру, если нам нужно поменять текст на экране, нужно будет сгенерировать другой виджет Text и указать новое содержимое которое мы хотим отобразить. Такие виджеты можно назвать константными, если вы понимаете о чем я. И они простые, поэтому с них и начнем.

Чтобы создать Stateless виджет, нужно:

Пример виджета с одним аргументом:

Про Stateless больше и добавить нечего…

Про Hot Reload

Обратите внимание, что при изменении содержимого нашего виджета приложение будет автоматически перерисовываться. После того, как мы вынесли виджет из функции main() Hot-reload стал нам помогать.

Важно также понимать, что из-за запущенного модуля для горячей замены приложение работает на порядок медленнее.

Про GestureDetector

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

В следующей секции мы будем разбираться с StatefulWidget (с виджетами которые изменяются при изменении их состояния). Для того чтобы это было интересно, нам нужно это состояние как-то изменять, согласны? Мы будем изменять состояние виджета реагируя на касания по экрану. Для этого мы будем использовать GestureDetector(…) — виджет, который ничего не отрисовывает, но следит за касаниями на экране смартфона и сообщает об этом вызывая переданные ему функции.

Создадим кнопку в центре экрана, при нажатии на которую в консоль будет выводиться сообщение:

Нажимаем на синюю кнопку и видим сообщение в консоли. Нажимаем еще раз и снова видим сообщение в консоли. Еще раз… Ладно, хватит залипать.

Про Stateful виджеты

StatefulWidget — простые, даже проще чем StatelessWidget ‘ы. Но есть нюанс: они не существуют сами по себе, для их работы нужен еще один класс который будет хранить состояние этого виджета. При этом, его визуальная часть (виджеты из которых он состоит) также становятся его состоянием.

Для начала, посмотрим на класс виджета:

Объект состояния совершенно не сложный. Более того, он практически идентичен StatelessWidget ‘ам написанным нами выше. Его основное отличие — родительский класс.

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Обратите внимание, что имя класса начинается с нижнего подчеркивания. В Dart’е все имена начинающиеся с нижнего подчеркивания идентифицируют приватные значения. А состояние виджетов, в Flutter’е, принято оставлять приватными, хотя это не обязательно.

Какое замечательное приложение мы с вами сделали! Это отличный результат. Но перед тем как закончить эту часть курса, давайте рассмотрим еще пару интересных виджетов. Только в этот раз мы напишем больше кода, просто, чтобы было интереснее. Большая часть приложения должна быть вам знакома, а остальное вы уже должны были научиться понимать:

Flutter buildcontext что такое. Смотреть фото Flutter buildcontext что такое. Смотреть картинку Flutter buildcontext что такое. Картинка про Flutter buildcontext что такое. Фото Flutter buildcontext что такое

Про домашнее задание

Если вам хочется почитать что-нибудь еще на досуге, вот список интересных ссылок:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *