Все потоки
Поиск
Написать публикацию
Обновить
4.71

Dart *

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

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

Использование Provider, Riverpod, Bloc(Cubit), Redux, MobX на одном простом примере

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров15K

Управление состоянием – это фундаментальная концепция всех фреймворков для разработки приложений, и Flutter не является исключением. Существует несколько техник и инструментов, которые можно использовать, и выбор наиболее подходящего из них часто зависит от сложности и требований приложения, которое вы создаете. В этой статье рассмотрено несколько отличных способов управления состоянием – (с помощью) Provider, Riverpod, Bloc(Cubit), Redux, Mobx.

Узнать

Дружим Flutter с С# и С++

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров12K

На Flutter`е очень удобно и хорошо пишутся интерфейсы для пользователей. Но использовать Dart для решения алгоритмических задач тяжко и неэффективно. Семейство Си справляется гораздо лучше и позволяет легко распараллеливать вычисления. Кроме того, за многолетнюю историю С++ и С# обзавелись множеством полезных библиотек, не все из которых имеют аналоги во Flutter.

Зная про существование библиотеки FFI для Flutter, что позволяет даже синхронно запускать Си-шный код, я решил закопаться в эту тему и попробовать объединить наследие Си и их эффективность с удобным фреймворком. Учитывая то, что в интернете маловато информации про использование FFI, особенно с C#, я решил поделиться своим опытом "построения мостов" на примере двух приложений в этой статье.

Читать далее

Что нового во Flutter 3.10, ч.2

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров3.9K

Hola, Amigos! На связи Саша Чаплыгин, Flutter-dev Amiga и Тимур Моисеев, Teamlead Flutter Amiga. Мы продолжаем рассказывать об обновленной версии Flutter 3.10, и в этой части затронем разработку веб и мобильных приложений, Impeller, производительность и изменения в устаревших функциях.

Читать далее

Создаем клон Instagram при помощи Flutter и Feeds. Часть 2

Уровень сложностиСредний
Время на прочтение33 мин
Количество просмотров2.8K

Привет! Продолжаю выкладывать перевод статьи, которую я использовал как основу для реализации социального функционала в нашем проекте Dom24x7, где люди могут общаться друг с другом, решать возникающие бытовые проблемы, а также взаимодействовать с УК/ТСЖ. Первую часть статьи можно прочитать тут.

Читать далее

Nanc — backend-agnostic CMS с Flutterлюшками

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров3.1K

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

Далее речь пойдет о Nanc (читается как Нэнс, но я внутренним голосом постоянно произношу "Нанк" ?) - Not A Normal CMS. Почему она "не нормальная" и что с её помощью можно делать вы узнаете, если осилите эту статью.

Пойдем осиливать!

Flutter Flame: глобальная оптимизация производительности игрового движка

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

Мой опыт работы с игровыми движками для Flutter привёл меня к, в целом, удручающим выводам: производительность хромает, и без специально проработанных «хаков» сделать что-то сложнее простой казуалочки представляется нереальной задачей.

Ранее я перечислил ряд подходов, которые смогут ускорить ваши вычисления от нескольких десятков до нескольких сотен раз. Однако, это не предел. Сегодня расскажу ещё об одном методе, который поможет вывести игровой движок Flame на новый уровень.

Читать далее

Тестирование мобильных приложений на Flutter с использованием Python + Appium

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

Тестирование нативных мобильных приложений для Android и iOS обычно обеспечивается библиотеками UiAutomator2 и XCUITest, но сейчас, в связи с появлением мобильных приложений, разработанных с использованием Flutter Framework, использовать их для тестирования становится затруднительно, поскольку семантическая информация, публикуемая Flutter, в большинстве случаев недостаточна для однозначной идентификации виджетов и взаимодействия с ними. В этой статье мы рассмотрим возможности драйвера appium-flutter-driver для тестирования flutter-приложений, разберемся с использованием виджетов описания семантики и разработаем несложные тесты на Python с использованием Appium.

Читать далее

Создай себе инструмент. Часть 1: скрипт на Dart

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

Можно легко упустить момент, когда работа с кодом становится рутинной. Логичный шаг — автоматизировать её. Стартуем серию статей о тулинге: расскажу, как начать и куда смотреть дальше.

Читать далее

Dart 2.17: Продуктивность и интеграция

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

Языковые фичи. Инструменты, повышающие продуктивность. Более глубокая и масштабная интеграция с платформами. Представляем перевод статьи о свежей версии Dart с комментариями Евгения Сатурова, Head of Flutter в Surf.

Читать далее

Flutter: Создание расширения для Chrome

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

Как создать расширение для браузера? Создание расширения для Google Chrome.

Сложность: Опытный

Всем привет. Месяц назад, пока бороздил просторы интернета, понял, что у меня есть проблема, я хотел проверить текущую цену Биткойна, но каждый раз заходить на сайт валюты мне было тяжело. Итак, я решил сделать расширение для Google Chrome с помощью Flutter. И хочу рассказать как я это сделал.

Расширение будет достаточно простым, будет лишь функционал проверки состояния Биткойна. Вам не понадобится дополнительная установка каких-либо плагинов. Мы напишем его с помощью встроенных средств web.

Читать далее

Sliver во Flutter, или как работает скролл

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

Если вы уже встречались со сливерами, то наверняка оценили всю «прелесть» работы с ними. На самом деле они совсем не так трудны и ужасны.

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

Читать далее

Telegram-бот на Dart + Docker + VDS

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

Telegram-бот на Dart + Docker + VDS

Эта статья представляет собой реальный кейс, когда мне пришлось загружать фотографии на VDS (которые пользователь отправил боту), отправлять их в базу данных, а затем удалять их с VDS.

Читать далее

Как устроен Elementary

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

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

Мы в Surf постоянно сталкиваемся с необходимостью решать эти проблемы при разработке мобильных приложений, в том числе и на Flutter. Опыт, который мы получили за долгое время, отразился на наших подходах и лёг в основу библиотеки Elementary, автором которой я являюсь.

В статье расскажу, как устроен Elementary, какие принципы в нём заложены и чем вообще он может быть полезен.

Читать далее

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

Ускоряем Dart. Нативно, недорого

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

Релиз Dart 2.12 принёс, помимо всего прочего, поддержку FFI в стабильной версии, что позволит относительно легко добавить биндинги к своим любимым библиотекам, которые используют сишный ABI для экспорта. А это в том числе и Rust, Go, Swift и другие.

Но какой ценой?

Сериализация в JSON и иммутабельный объект. О пакете built_value для Flutter

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


Иногда JSON от API необходимо конвертировать в объект и желательно в иммутабельное значение. На Dart это возможно, но для этого необходимо много кодить для каждого из объектов. К счастью, существует пакет, который поможет Вам все это выполнить, и в этой статье я Вам расскажу об этом способе.

Наша цель:

1. Сериализация

final user = User.fromJson({"name": "Maks"});
final json = user.toJson();

2. Использование как значения

final user1 = User.fromJson({"name": "Maks"});
final user2 = User((b) => b..name='Maks');
if (user1 == user2) print('Один и тот же пользователь');

3. Иммутабельность

user.name = 'Alex'; // Неверно
final newUser = user.rebuild((b) => b..name='Alex'); // Верно

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

Сервис на языке Dart: flutter web-страница

Время на прочтение6 мин
Количество просмотров17K
Оглавление
  1. 1. Введение
  2. 2. Backend
  3. 2.1. Инфраструктура.
  4. 2.2. Доменное имя. SSL
  5. 2.3. Серверное приложение на Дарт
  6. ...
  7. 3. Web
  8. 3.1. FlutterWeb страница (мы находимся здесь)
  9. ...
  10. 4. Mobile
  11. ...


Подготовка


В прошлый раз мы закончили на том, что наш веб-сервер получил доменное имя и научился устанавливать безопасное соединение с клиентом. Однако нам пока совсем нечего показать нашему будущему пользователю. Хотя мы уже можем поделиться идеей стартапа и сообщить дату релиза MVP. Для такой задачи подойдёт информационная web-страница. Напишем её на Dart с использованием фреймворка FlutterWeb (здесь рассказываем, почему Flutter использует именно Dart). Все наши клиентские приложения сервиса станут расширением именно этой страницы. Постараемся вести разработку максимально адаптивно и структурировано, чтобы развитие и сборки под нужные платформы (web-android-iOS) стали просто рутиной.


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

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)


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

Основы RxVMS: RxCommand и GetIt

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

Это четвертая часть моей серии про архитектуру Flutter:



Хотя 2 предыдущие части явно не относились к паттерну RxVMS, они были необходимы для ясного понимания этого подхода. Теперь мы обратимся к самом важным пакетам, которые понадобятся, чтобы использовать RxVMS в вашем приложении.

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

RxDart: магические трансформации потоков

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

Добро пожаловать — это третья часть моей серии статей об архитектуре Flutter.



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


RxDart — это реализация концепции Rx для языка Dart, за что следует сказать спасибо Frank Pepermans и Brian Egan. Если ранее вы использовали Rx в других языках, то наверняка заметите разницу в именовании ряда функций, но это вряд ли вызовет у вас затруднения.


Код для тестирования находится здесь.


До сих пор мы использовали потоки как способ передачи данных из одного места в другое в нашем приложении, но они могут сделать гораздо больше. Давайте взглянем на некоторые функции, которые Rx добавляет в Streams.

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