Как стать автором
Поиск
Написать публикацию
Обновить
12.13

Dart *

Язык программирования, созданный Google

Сначала показывать
Порог рейтинга
Уровень сложности

Подробно о пакете Provider для Flutter

Время на прочтение11 мин
Количество просмотров48K
Привет, Хабр!

В наших среднесрочных планах — выход книги по Flutter. Относительно языка Dart как темы мы пока занимаем более осторожную позицию, поэтому попробуем оценить ее актуальность по результатам этой статьи. Речь в ней пойдет о пакете Provider и, следовательно, об управлении состоянием в Flutter.
Читать дальше →

Как улучшить производительность вашего Flutter приложения

Время на прочтение13 мин
Количество просмотров14K


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

Читать дальше →

Почему Flutter побеждает?

Время на прочтение14 мин
Количество просмотров47K
Последний год я так или иначе пишу приложения на Flutter для iOS и Android. До этого у меня был и есть 5 летний опыт работы с Xamarin. Это были замечательные 5 лет. Благодаря Xamarin и моей любви к этому фреймворку я, в принципе, перешел в стан разработчиков, этот инструмент помог заработать мне немалых денег, знаний и найти замечательных коллег. Так почему же сейчас я пишу на Flutter? Короткий ответ, потому что Flutter покрывает все потребности кросс-платформенной разработки.


Немного истории


Поправьте меня если я не прав, но 2009 год был во многом ключевым для мобильной разработки в целом и кроссплатформенной разработки в частности. В 2009 вышел iPhone 3gs, который позволял запускать сторонние приложения из AppStore. Впервые эта возможность появилась в годом ранее в iPhone 3g, но по настоящему массовым, «народным» айфоном стал 3gs. Опять же, годом ранее, в сентябре 2008 Android был представлен публике и в 2009 многие производители телефонов стали пробовать Android для своих новый моделей телефонов. Весной 2009 компания Nitobi представила PhoneGap — новый фреймворк для создания кроссплатформенных приложений на основе HTML5, CSS и JS. В том же году, в сентябре компания Ximian выпустила MonoTouch, который позволял писать iOS приложения с использованием Mono и C#. В том же 2009, в декабре, компания Rovio Entertainment выпустила игру для iOS и, на минуточку, Maemo, которая во многом положила начало индустрии мобильных игр — Angry Birds. Последний пример здесь не случайно.
Читать дальше →

Flutter под капотом

Время на прочтение11 мин
Количество просмотров40K
Всем привет! Меня зовут Михаил Зотьев, я работаю Flutter-разработчиком в Surf. Мне, как, наверное, большинству других разработчиков, которые работают с Flutter, больше всего нравится то, как просто создавать с его помощью красивые и удобные приложения. Чтобы войти во Flutter разработку, нужно совсем немного времени. Недавно я работал в геймдеве, а теперь полностью переключился на кроссплатформенную мобильную разработку на Flutter.

В чём простота? С помощью десятка базовых виджетов можно собирать вполне приличные пользовательские интерфейсы. А со временем, когда багаж используемого скопится вполне приличный, вряд ли какая-то задача поставит вас в тупик: будь то необычный дизайн или изощренная анимация. А самое интересное — скорее всего вы сможете этим пользоваться, даже не задумываясь над вопросом: «А как оно вообще работает?».

Поскольку у Flutter открытые исходники, я решил разобраться с тем, что же там под капотом (on the Dart side of the Force), и поделиться этим с вами.


Читать дальше →

Dart. Всё, что надо знать про константы

Время на прочтение4 мин
Количество просмотров17K


Константы — это не просто странная версия final переменных, которая будет преследовать вас во сне со всеми связанными с ними ошибками. Compile-time константы – это хороший способ повысить производительность вашего приложения, не создавая один и тот же объект несколько раз, а так сказать, «предварительно создавая» объекты во время компиляции.


const или final?


Давайте, разберемся с этим вопросом, прежде чем перейти к более глубокому изучению констант. Со стороны может показаться, что не имеет значения, у вас ключевое слово const или final перед переменной. Эти переменные не могут быть изменены после их объявления.

Читать дальше →

Вышел Flutter 1.17

Время на прочтение9 мин
Количество просмотров6.9K


Сегодня (6 мая 2020) мы с радостью представляем Flutter 1.17, наш первый стабильный релиз в этом году.


Наша цель – выпускать стабильные релизы примерно ежеквартально. Однако, данный релиз занял немного больше времени, потому что мы меняли нашу инфраструктуру для нового процесса релизов. Для нас качество – это приоритет №1, и мы и считаем, что новая модель релизов улучшит поддержку stable ветви.


Релиз 1.17 полон исправлений: беспрецедентное количество (6339) проблем закрыто с момента последнего стабильного релиза 1.12. Во многом такое количество связано с нашим партнерством с Nevercode, который дало возможность лучше реагировать на возникающие проблемы (issue). В этом году мы закрыли больше ошибок, чем было открыто, что привело к сокращению количества проблем до ~800. Многие из этих ошибок были решены с помощью 3164 пулл-реквестов, которые мы получили от 231 контрибьютора. Это огромные цифры, и мы искренне благодарим всех за их работу и вклад, особенно, в это сложное время.


Если вас интересует полный список пулл-реквестов для этого релиза, то посмотрите на нашем сайте flutter.dev. В дополнение к качественным улучшениям нам также удалось внедрить некоторые новые функции в этот релиз, включая поддержку Metal на iOS, новые Material компоненты, новые инструменты отслеживания сети и многое другое! Этот релиз также включает в себя Dart 2.8, о котором вы можете узнать больше в Dart блоге.

Читать дальше →

Правила компоновки во Flutter, которые должен знать каждый

Время на прочтение14 мин
Количество просмотров85K


Когда новичок во Flutter спрашивает, почему какой-то виджет с width: 100 не ширины 100 пикселей, обычно ему отвечают, что надо обернуть этот виджет в Center, верно?


Не надо так делать


Если так отвечать, то к вам будут возвращаться снова и снова, спрашивая, почему какой-то FittedBox не работает, почему этот Column переполнен или как работает IntrinsicWidth.


Сначала объясните, что Flutter компоновка очень отличается от HTML компоновки (особенно, если говорите с веб-разработчиком), а затем скажите, что необходимо запомнить следующее правило:


Ограничения для виджетов объявляются в родителях. Размеры (желаемые) задаются в самом виджете. Позиция виджета на экране устанавливается родителем

На мой взгляд, это правило нужно изучить, как можно раньше, так как без него по-настоящему понять компоновку во Flutter нельзя.

Hive — быстрая локальная база для Flutter, Dart

Время на прочтение7 мин
Количество просмотров42K

Примерно месяц назад общаясь с одним разработчиком приложения на Flutter встала проблема торможения обработки маленьких (в десятках тысяч) массивов данных на телефоне юзера.


Многие приложения предполагают обработку данных на телефоне и, далее, их синхронизацию с бэкендом. Например: списки дел, списки каких либо данных (анализов, заметок и т.п.).


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


Решение есть! Hive — noSql база, написанная на чистом Dart, очень быстрая. Кроме этого плюсы Hive:


  • Кросс-платформенность — так как на чистом Dart и нет нативных зависимостей — mobile, desktop, browser.
  • Высокая производительность.
  • Встроенное сильное шифрование.

В статье мы посмотрим как использовать Hive и сделаем простое ToDo приложение, которое в следующей статье дополним авторизацией и синхронизацией с облаком.


Читать дальше →

В CodePen добавлена поддержка Flutter

Время на прочтение4 мин
Количество просмотров2.7K


Сегодня (15 апреля 2020) мы рады сообщить, что CodePen, основная среда разработки для миллионов frontend разработчиков и дизайнеров, добавила поддержку Flutter! Для веб-разработчиков CodePen уже давно является отличным местом для обмена экспериментами по дизайну, новыми подходами и идеями. Теперь с появлением Flutter CodePen предлагает аудитории новые возможности, чтобы учиться, делиться и продвигать свое творчество.


Что говорит Alex Vazquez (один из соучредителей CodePen):

Читать дальше →

Кроссплатформенная разработка мобильных приложений в 2020 году

Время на прочтение7 мин
Количество просмотров51K
Всем привет!

Я – Сергей Якимов, CTO Omega-R, международной компании по разработке и интеграции IT-решений. На базе многолетнего опыта в сфере информационных технологий и экспертизы компании хочу поделиться своим видением настоящего и ближайшего будущего кроссплатформенной разработки мобильных приложений.

image
Читать дальше →

Flutter. BlOC, Provider, async – архитектура «по полочкам»

Время на прочтение11 мин
Количество просмотров39K

Вступление


Когда пытаешься написать приложение, то первое с чем сталкиваешься – это как организовать архитектуру приложения. А когда еще при этом речь идет про Flutter, так голова совсем может пойти кругом от того, что выдает Гугл — Vanilla, Scoped Model, BLoC, MVP, MVC, MVVM, MVI и т.д. Предположим вы решили пойти самым модным путем (тем, что советовал Google в 2018 году) и использовать BLOC. Что это? Как этим пользоваться? А может Redux или RxDart? – хотя стоп – это же про «другое» … А все-таки что дальше? Какие библиотеки подключать? Bloc, Flutter_bloc, bloc_pattern и т.д.?

Такое количество вариантов архитектур и инструментов для их реализации действительно может на долго затянуть стадию выбора.
Читать дальше →

Flutter BloC паттерн + Provider + тесты + запоминаем состояние

Время на прочтение5 мин
Количество просмотров35K

Эта статья выросла из публикации “BLoC паттерн на простом примере” где мы разобрались, что это за паттерн и как его применить в классическом простом примере счетчика.


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


  1. Как передавать состояние класса в котором находится BloC по всему приложению
  2. Как написать тесты для этого паттерна
  3. (дополнительный вопрос) Как сохранить состояние данных между запусками приложения оставаясь в рамках BLoC паттерна

Ниже анимашка получившегося примера, а под катом разбор полетов :)


И ещё в конце статьи интересная задачка — как модифицировать приложение для применения Debounce оператора из ReactiveX паттерна (если точнее, то reactiveX — расширение Observer pattern)


Читать дальше →

Использование примесей (mixins) в Dart

Время на прочтение5 мин
Количество просмотров16K

Несколько раз от коллег звучал вопрос о том, что не понятно, зачем вообще нужны mixin'ы (примеси) в языке Dart. Я решил посмотреть, что есть на просторах Интернета по этому вопросу. К великому огорчению в статьях, которые удалось найти в основном говорится о том, как использовать примеси, но не дается разъяснений зачем они нужны, в каких случаях их использование более предпочтительно, чем обычное наследование или реализация интерфейсов. Эта статья является попыткой восполнить этот пробел.

Читать дальше →

Ближайшие события

Интеграционные тесты на Flutter — это просто

Время на прочтение6 мин
Количество просмотров8.6K

Думаю, многие уже знакомы с Flutter и хотя бы ради интереса запускали простые приложения на нем. Настало время убедиться, что в них все работает как нужно, и в этом нам помогут интеграционные тесты.

Читать дальше →

DartUP 2019: итоги и видеозаписи докладов

Время на прочтение4 мин
Количество просмотров4.4K


23 ноября в питерских Ткачах прошел DartUP — единственная в России конференция по Dart и Flutter. Это уже третье большое событие, организованное Wrike при поддержке Google. Все началось три года назад, когда Wrike создал русскоязычное сообщество DartRu, которое было официально признано Google. За это время мы провели несколько тематических митапов и конференций, и вот в 2019-м нам едва ли хватило мест на DartUP для всех желающих.

Мы хотим поблагодарить всех участников, спикеров, ведущих и организаторов! Без вас DartUP бы не удался. За целый день мы успели послушать доклады в двух залах, посоревноваться в CodeBattle, узнать про Dart и Flutter из первых уст, выиграть призы, задать вопросы в специальном приложении и, конечно, пообщаться на неформальной нетворкинг-сессии, запивая все специально сваренным Dart-пивом.

Несколько цифр про DartUP 2019:

Extension в Dart (Flutter)

Время на прочтение4 мин
Количество просмотров16K
В недавном релизе языка Dart 2.6 в языке появилась новая функция, static extension или статические методы расширения, который позволяет вам добавить новые методы к существующим типам. Зачем вообще нужны extension? Как их использовать и на что они годятся?



Введение


Начнём с того что такое вообще extension? Extension — это синтаксический сахар, который расширяет существующий класс в месте, отличном от модуля объявления класса.

В программировании методы расширения существуют уже достаточно давно, вот они добрались и до dart. Extension активно используется в таких языках как C#, Java via Manifold, Swift, Kotlin и во множестве других.
Читать дальше →

Как работает Flutter

Время на прочтение18 мин
Количество просмотров67K


Как Flutter работает на самом деле?


Что такое Widgets, Elements, BuildContext, RenderOject, Bindings?..


Сложность: Новичок


Вступление


В прошлом году (прим: в 2018), когда я начал свое путешествие в сказочный мир Flutter, в Интернете было очень мало информации по сравнению с тем, что есть сегодня. Сейчас, несмотря на то, что уже написано много материалов, лишь небольшая их часть рассказывает о том, как на самом деле работает Flutter.


Что же такое Widgets (виджеты), Elements (элементы), BuildContext? Почему Flutter быстрый? Почему иногда он работает не так, как ожидается? Что такое деревья и зачем они нужны?


В 95% случаев при написании приложения вы будете иметь дело только с виджетами, чтобы что-то отображать на экране или взаимодействовать с ним. Но неужели вы никогда не задумывались, как вся эта магия работает внутри? Как система узнает, когда обновить экран и какие части должны быть обновлены?


Содержание:


Читать дальше →

BLoC паттерн на простом примере

Время на прочтение3 мин
Количество просмотров51K

И еще раз про BLoC на классическом примере счетчика Flutter.


Читая некоторые статьи про реактивное программирование и используя BLoC паттерн в приложениях я понимал, что чего-то не догоняю. Как обычно на все не хватает времени, но вот, выдался свободный час и силы есть — решено, напишу простейшее приложение на Flutter с паттерном BLoC.


Под катом анимашка приложения и пояснения почему я его написал его именно так. Очень интересно мнение сообщества.


image

Читать дальше →

RxDart для самых маленьких… проектов

Время на прочтение4 мин
Количество просмотров14K


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


Ниже буквально в 50 строк я на известном примере покажу, что реактивность


а) это не про оффлайн/онлайн
б) это очень просто
в) очень хороша для упрощения практически любого кода

Читать дальше →

Как я делал desktop-приложение на Flutter (+ bonus)

Время на прочтение9 мин
Количество просмотров28K
Недавно попалась на глаза новость, что вышел очередной релиз Flutter (1.9), который обещает разные вкусности и, в том числе, раннюю поддержку веб-приложений.

На работе я занимаюсь разработкой мобильных приложений на React Native, но с любопытством поглядываю на Flutter. Для тех, кто не в курсе: на Flutter уже сейчас можно создавать приложения для Android и iOS, готовится к релизу поддержка веб-приложений, а ещё в планах поддержка десктопа.

Такое вот «одно кольцо, чтобы править всеми».

Покрутив пару дней в голове мысли о том, какое приложение можно попробовать сделать, я решил выбрать задачу со звёздочкой — что нам эти проторенные дорожки? Замахнёмся на десктоп и будем героически преодолевать трудности! Забегая вперёд, скажу, что трудностей почти не возникло.

Под катом — рассказ о том как я решал привычные для React Native программиста задачи средствами Flutter, плюс общее впечатление от технологии.


Читать дальше →