Flutter and chill – Telegram
Flutter and chill
124 subscribers
34 photos
1 video
21 links
Разработка и жизнь
Download Telegram
Сегодня хочу поделиться полезным видео по асинхронному программированию в Dart 😦

Затронуты практически все основные темы, которые, к тому же, часто спрашивают на собеседовании:

🟣Что такое async/await

🟡Виды Future и можно ли его отменить, обработка ошибок

🔵Принцип работы Event loop

🟢Очень много базы про стримы (Stream), работа с StreamController и Zone

Да, видео с таким количеством информации не может быть коротким, но подача хорошая и довольно много наглядных примеров 😱
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥5
Небольшая задача на асинхронность 👍

В каком порядке выполнятся функции? В следующем посте будет опрос с правильным вариантом ответа 🧑‍💻


void testEventLoop() {
print(1);

scheduleMicrotask(() => print(2));

Future(() => print(3))
.then((_) => print(4));

Future.microtask(() => print(5));

Timer.run(() => print(6));

Future.delayed(Duration.zero, () => print(7));

Future(() async {
print(8);
await Future.delayed(Duration(milliseconds: 1));
print(9);
});

Future.sync(() => print(10));

print(11);
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8💅4
Update Dart Spec 🍿

В репозиторий спецификации языка добавили сразу несколько черновиков новых фич 🔫

1️⃣ Implied Parameter/Record Field Names
Позволяет в момент вызова метода, функции или конструктора опускать имя аргументов, если у передаваемой ему на вход переменной (функции) аналогичное имя:

Пример с функциями/методами:
// before
var subnoscription = stream.listen(
onData,
onError: onError,
onDone: onDone,
cancelOnError: cancelOnError,
);

// after
var subnoscription = stream.listen(
onData,
:onError,
:onDone,
:cancelOnError,
);


Пример с переменными:
typedef Color = ({int red, int green, int blue, int alpha});

// before
Color colorWithAlpha(Color color, int newAlpha) {
var (:red, :green, :blue, alpha: _) = color;
return (red: red, green: green, blue: blue, alpha: newAlpha);
}

// after
Color colorWithAlpha(Color color, int alpha) {
var (:red, :green, :blue, alpha: _) = color;
return (:red, :green, :blue, :alpha);
}


2️⃣ Anonymous Methods (AM)

А вот это уже зверь из области функциональщины, который позволяет добавлять объекту анонимные методы и выстраивать цепочки из них, передавая результат одного анонимного метода в вызов другого 😏
Допустим, у нас есть блок кода, который ну никак не представить в виде цепочки последовательных вызовов с помощью каскадного оператора ..
void main() {
final String halfDone, result;
final sb = StringBuffer('Hello');
sb.write(',');
halfDone = sb.function toString() { [native code] }();
sb.write(' ');
sb.write('world!');
result = sb.function toString() { [native code] }();
print('Creating an important string: $halfDone then $result');
}


С добавлением одной из вариаций анонимного метода (=>) и использованием каскадного оператора его можно преобразить следующим образом:
void main() {
final String halfDone, result;
final sb = StringBuffer('Hello')
..write(',')
..=> halfDone = function toString() { [native code] }() // AM
..write(' ')
..write('world!')
..=> result = function toString() { [native code] }(); // AM
print('Creating an important string: $halfDone then $result');
}


Другая вариация подразумевает конструкции типа O.{что-то делаем} или O.{что-то делаем}.{получаем результат предыдущей АМ и снова что-то делаем}.{и т.д.}. Благодаря ней мы можем переписать код так:
// применяем AM к StringBuffer('Hello').
void main() => StringBuffer('Hello').{
final String halfDone, result;
write(',');
halfDone = function toString() { [native code] }();
write(' ');
write('world!');
result = function toString() { [native code] }();
print('Creating an important string: $halfDone then $result');
};


или так
void main() {
// применяем AM к StringBuffer('Hello').
StringBuffer('Hello').{
write(', world!');
return function toString() { [native code] }();
}.{ // определяем следующий анонимный метод
// `this` is the string returned by
`toString()`.print(length); // Prints '13'.
return length > 10;
}.=> print('That was a ${this ? 'very' : '') long string!');
}


Если же мы хотим избежать конфликта имен или явно работать захваченным ранее объектом, который передаем в анонимный метод можно использовать конструкции типа O.(имя и тип арг1, [арг 2, арг3, ...]){что-то делаем} и выстраивать с ними цепочки различной длины:
class A {
void bar() {}
void foo() {
StringBuffer('Hello').(sb) { // sb -> StringBuffer('Hello')
sb.write(', world!');
this.bar(); // `this` refers to the current instance of `A`.
return sb.function toString() { [native code] }();
}.(s) { // снова АМ
print(s.length);
bar(); // An implicit `this` also refers to the current `A`.
return s.length > 10;
}.(cond) => print('That was a ${cond ? 'very' : '') long string!'); // АМ
}
}


Как вам новые фичи Dart?

👍 – О, да, детка!!!
👌 – Сомнительно, но Окей
👎 – Отстой!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2👎1
Октябрь 2025: первые посты, впечатления от посещения конференции, тесты, асинхронка

Нас уже 85 🥳
Планирую продолжать делиться новостями, полезными материалами и темами, которые считаю важными в разработке 🧑‍💻

Очень радуюсь вашему интересу к контенту и активности под постами, кого-то даже получилось вдохновить на написание тестов ❤️

А вот посты за прошедший месяц:

🟣Вводный пост
рефлексия по созданию этого канала, возможно в будущем дополню

🟣Впечатления от конференции Стачка 2025 впервые посетила такую большую конфу, перечислила новые и интересные для меня темы

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

🟣Сходила на выставки в Русском музее
мои впечатления о выставках искусства начала 20 века

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

🟣Как упростить себе жизнь при тестировании
практические советы по неочевидным моментам, примеры использования пакетов для стабильных тестов

🟣Архитектурные изменения во Flutter - The great thread merge
важная новость о будущем Flutter, новый способ взаимодействия с платформой

🟣Видео с базой по асинхронному программированию в Dart
поделилась полезным видео с базой по асинхронке

🟣Задача на асинхронность
проверили знание порядка выполнения операций
Please open Telegram to view this post
VIEW IN TELEGRAM
107🔥5💅2
Уровень моей удачи - слечь с температурой на выходные и праздники 🤧
Восприняла это как сигнал о необходимости передохнуть, скоро вернусь с новыми силами и постами 😶
Please open Telegram to view this post
VIEW IN TELEGRAM
115👎2
Спасибо за вашу поддержку, уже восстанавливаюсь и ресерчу интересные темы 🌹

Вы, кстати, также можете помочь развитию канала, вкинув тему, которую вам интересно было бы разобрать 💃

Недавно закидывала вам на подумать задачку, большинство молодцы - ответили правильно ☺️

Заложила в ней небольшую проверку на внимательность и знание нечасто встречающегося функционала Future:

Future.sync() немедленно вызывает переданную функцию, в данном случае она выполнится синхронно 😏

Желаю всем приятных и продуктивных выходных 🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
110🔥4💅3
Завтра в 22:00 по мск ожидаем лайвстрим от команды Flutter по последним обновлениям, Q&A и многое другое 📖

https://www.youtube.com/watch?v=RTb3gP4p5bw
Please open Telegram to view this post
VIEW IN TELEGRAM
💅3👍2🔥2
🧑‍💻 Что самое главное в Flutter 3.38?

Очередной минорный релиз в котором команда работает над оптимизацией. При этом успевает завозить прикольные фичи. О самых горячих завозах в нашей новостной колонке:

🤏Dot shorthands
Новая фича которая позволяет не указывать название класса с именованным конструктором и название enum

Например для указания alignment в верстке можно указывать только значение


// With shorthands
Column(
mainAxisAlignment: .start,
crossAxisAlignment: .center,
children: [ /* ... */ ],
),


А для padding указывать только значение

Padding(
padding: .all(8.0),
child: Text('Hello world'),
),


🌐 Конфигурация для Web
Новый файл web_dev_config.yaml позволяет задать параметры для локального веб-запуска Flutter-приложения.

Можно указывать порт, хост, сертификаты HTTPS, заголовки и прокси-маршруты

👩‍🍳 Теперь WidgetState
Вы по-любому встречались с MaterialStateProperty. Параметры для настройки конкретных стетов материал виджетов (нажат, наведен, отключен)

Теперь вместо Material используем WidgetState, который подходит и для Cupertino виджетов. Ещё одно упрощение работы с платформозависимым UI


✈️ Новый API OverlayPortal
Позволяет размещать всплывающие элементы интерфейса (диалоги, попапы, уведомления и т.п.) в любом Overlay выше по дереву виджетов, а не только в ближайшем

Благодаря этому можно, например, легко показывать глобальные уведомления поверх всего приложения, даже если вызов идёт из вложенного экрана — без костылей и ручного поиска корневого Overlay

🤔Ещё из интересного:

- Куча всяких оптимизаций опять в Engine, Vulkan, OpenGL ES

- Predictive back-анимации на Android теперь по умолчанию

- На Windows появился расширенный доступ к параметрам дисплеев

- Поддержка 16 KB page size для Android

📊 В релизе 825 коммитов от 145 участников сообщества

🔗 Все подробности можно узнать в блоге команды
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12
Взаимодействие с нативным кодом во Flutter: что нового?

В поисках информации об ffi нашла свежий доклад о текущих возможностях взаимодействия с платформой.

Отличный обзор Platform Channels и Direct native interop - много примеров кода, плюсы и минусы разных подходов к вызову нативного кода.

🟡 Platform Channels - это достаточно простой и стабильный способ получения различных видов сообщений, подходит для большинства задач, но требуется писать много boilerplate кода.

Принцип работы - сообщение переводится в бинарный формат, Binary Messenger отправляет его с помощью Platform Dispatcher на нужную платформу, а на стороне платформы нужно написать нативный код, обрабатывающий нужный метод и возвращающий результат.

🔵 jnigen - по заверению докладчика уже может использоваться в продакшене. Интересно, что для генерации биндингов необходимо сначала собрать apk, а затем запустить команду генерации. После этого появляется доступ к андроид контексту и на примере показано, как получить список библиотек на устройстве.

🟢 swiftgen на данный момент в экспериментальной фазе, под капотом использует ffigen и дает доступ только к открытой части кода.

Больше информации можно найти в официальной документации dart-lang/native 🧑‍💻

🔥 Также вышла статья про Objective-C и Swift Interop с использованием ffigen, на примере генерации биндингов к AVAudioPlayer.

Пока еще остается много вопросов, например, какой подход стоит использовать при разработке нового плагина? Насколько ffi быстрее, чем Platform Channels?

Надеюсь со временем найти ответы на эти вопросы, а если у меня получится что-то крутое, обязательно поделюсь с вами результатом ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍7💅52🔥1
Слабая аура: искать инфу самостоятельно

Сильная аура: задать вопрос команде флаттера ✔️

Продолжая тему нативного интеропа с ffigen, воспользовалась возможностью задать вопрос команде флаттера в комментариях на ютубе 😘

Предварительно ожидаем бета-релиз в следующем году, сейчас в закрытом формате ведется работа по сбору обратной связи, улучшению перфоманса и документации 💻

Еще тизернули что скоро выйдет эпизод Flutter Build Show на эту тему. Посмотрим, что нам интересного расскажут 💃
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥133💅3
Выпал первый снег ❄️

Я/мы: 🎄 ❄️ 🎅
Please open Telegram to view this post
VIEW IN TELEGRAM
1💅53💘3👎2
Forwarded from DUIT (Nikita Sinyavin)
🎉 Duit исполняется 2 года

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

В честь этого я подготовил статью о том, как развивался Duit, что появилось за эти два года и куда проект движется дальше. Stay tuned!
🔥6
😯 Вайбкодим осознанно

https://www.youtube.com/watch?v=GcXC8a8oL4I

Для себя выделила следующие советы:

🟡 Покрытие тестами написанного кода + прогон тестов после каждого изменения - мастхев

🟢 Просить несколько вариантов решения вместо одного, выделить плюсы и минусы каждого решения
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍3🔥2💅21
Gemini + Flutter = GenUI 🧑‍💻

Всем уже наверняка надоела шутка про похороны флаттера, но кажется хейтеры притихли 😐

Возможно потому, что Google объявил о том, что в обновленном Gemini app используется визуальный layout, написанный на флаттере 🤔

Также в альфа версии стал доступен GenUI SDK, который позволяет менять интерфейс в зависимости от запроса пользователя.

Он управляет потоком информации между пользователем, виджетами и AI агентом, трансформируя привычные текстовые переписки в интерактивные элементы. 🫣

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

Видео с демонстрацией использования - Getting started with GenUI 💻
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥9💅4💘2
❤️Уже в эту пятницу, 28.11 в 19:00 по мск, на самом замедленном видео-хостинге планеты пройдет самый токсичный стрим в истории IT!❤️

А если без лишней драмы, то я, ваш покорный слуга, совместно со Станиславом Чернышевым устроим честный разговор без лишних прикрас:

- Что происходит с IT-конференциями и зачем они нам в текущем виде?
- Почему хардкорые технические доклады не в моде и куда они исчезли?
- Каково сегодня мерило "успеха" докладов и публикаций?
- Что вообще творится в Dart/Flutter-сообществе?

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

Еще разок напомню условия:
- Кто? Станислав Чернышев и Никита Синявин
- Где? Юпуп (ссылка будет позже)
- Когда? 28.11 в 19:00 по мск
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Очень интересно послушать токс экспертов в теме конференций ⌨️

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

Плюс оффлайн формат конференции на мой взгляд не всем подходит, нужно потратиться на билеты/жилье и организовать себе отгул в рабочий день 🙄

Есть еще митапы - более лайтовый формат после рабочего дня, с небольшим количеством докладов и афтерпати. В основном, проводятся в Москве и бигтех компаниями 🍑

Попасть туда, как правило, можно бесплатно, если вовремя зарегистрироваться. Мы с Ильей так в сентябре посетили питерский офис ВК у Красного моста, послушали интересные лекции по бэкэнду, в которых я даже что-то поняла, пообщались с участниками и вкусно покушали 💓
Please open Telegram to view this post
VIEW IN TELEGRAM
💘5💅1
Продолжая тему митапов, вчера посетила мероприятие, организованное сообществом Women In Tech

Приняла участие в воркшопе по нетворкингу: потренировали самопрезентацию и навык выявления общих интересов при знакомстве с новыми людьми 🙂

Мне очень зашел такой формат, и оказалось, что намного проще начать разговор, если для тебя заранее подготовлены вопросы. А ограничение по времени подталкивает к более активным действиям.

Выяснила, что мне сложно сформулировать свою "полезность" для собеседника, а лучше всего получается вкидывать интересные факты о себе 🤡

Рада была в этом поучаствовать и познакомиться с множеством интересных девушек 💕

Во второй части послушала вдохновляющие рассказы от сотрудниц Selectel и участниц WiT.
Истории спикеров очень откликнулись, каждая по своему 🥹 От поиска себя до роста в руководители, как нетворкинг помогает строить карьеру и поддерживает в сложные времена.

Согласна с тем, что нетворкинг очень важен - без классного Flutter сообщества мой путь наверняка сложился бы по-другому. Поэтому ходим на митапы, общаемся в сообществах, кайфуем и строим карьеру 💃
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥76💘5💅2
Иногда мы идём к мечте, которую когда-то получили от общества: про «правильную» карьеру, успех и стабильность.

Но мы меняемся. И мир вокруг тоже: что-то перестаёт работать так, как раньше, и появляется что-то новое.

Время от времени полезно спрашивать себя: А я вообще этого хочу? И подходит ли эта мечта к той реальности, в которой я живу сейчас?

Если нет — можно изменить направление. Это нормальная часть взрослой жизни
12💘3
Поздравляю с первым днем зимы ☕️

По традиции подвожу итоги за Ноябрь 2025:

Этот месяц объявляется месяцем нетворкинга. Участвовала аж в двух модерируемых нетворкинг-сессиях, очень интересный формат, надеюсь что получит популярность и на конференциях 🥰

В планах на декабрь - почистить бэклог задач и идей от лишнего и заняться их реализацией 👀

А вот чем я успела поделиться за прошедший месяц:

🟣 Взаимодействие с нативным кодом во Flutter: что нового? - разбор видео с флаттеркона про подходы к вызову нативного кода

🟣 Получила ответ на свой вопрос от команды флаттера - закинула вопрос к предстоящему стриму и даже не ожидала, что на него ответят

🟣 Выход новой версии Gemini и при чем тут Flutter - новости из мира ИИ

🟣 Митап Women In Tech - делюсь впечатлениями от митапа, очень рада что смогла поучаствовать
Please open Telegram to view this post
VIEW IN TELEGRAM
104🔥2💅2
Моя лучшая инвестиция в обучение

Это, конечно же, макбук. Не является рекламой 💲

Мой M1 Pro 14' отлично справляется с задачами спустя почти 3 года эксплуатации

Жесть, 3 года уже прошло...

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

Благодаря этому брала его с собой во множество путешествий и две командировки во Владивосток.

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

Xcode конечно не самая приятная среда для разработки, но работаем с тем, что есть 💻

Пока не знаю, когда буду обновляться - на данный момент как будто текущих ресурсов хватает 🤔

В связи с этим вопросик: как понять, что уже пора обновляться? Поделитесь своим сетапом ⌨️
Please open Telegram to view this post
VIEW IN TELEGRAM
55🔥3💅1