Flutter Bro
1.35K subscribers
17 photos
5 videos
94 links
Про Flutter, кроссплатформу, и её место в дивном новом мире ИИ, метаверса, no-code и мемов.

Бустить https://t.iss.one/flutterbro?boost
Download Telegram
Держите пятничный анекдот:

В одной IT компании долгие годы работал один старый flutter разработчик. Перед началом каждого рабочего дня он доставал из ящичка в своем столе бумажку, читал ее и убирал назад. После его ухода на пенсию, все сотрудники кинулись смотреть, что же написано в той бумажке. Разворачивают, а там "--no-sound-nullsafety — без налсейфти, flutter pub run build_runner build --delete-conflicting-outputs --verbose — запустить кодген"

Кстати, автор этого анекдота Никита — позавчера рассказывал лекцию в ШМР про девтулзы во флаттере.
🤣20👍7😁3🤮1🤡1🙈1
Я ещё молодой, шутливый, поэтому вскрою одну тему. Что правильнее: кидать исключения или возвращать Either?

Коротко про суть: исключения основаны на "бросании" (throw) и "перехватывании" (catch) ошибок во время выполнения, минуя возвращаемое значение. Either — это и есть возвращаемое значение, которое явно содержит два возможных результата: ошибка (left) или успех (right). Иногда используют Result(ok, error).

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


Исключения
Не нужен дополнительный класс/библиотека, от которых будет зависеть вся кодовая база, потому что исключения — это встроенный механизм языка.
Сохраняется полная цепочка методов из стектрейса, можно от и до проследить, кто-кого-откуда вызвал и упал.

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

Either
Обязывает обработать возвращаемое значение на уровне компиляции как в случае успеха, так и в случае ошибки.
Есть удобные утилитарные методы для обработки результата, типа map/flatMap/fold.

Ухудшает читаемость кода: обрабатывать оба сценария (успех и ошибку) нужно в каждом методе, что нагромождает логику. Проще читать код, когда нормальный процесс работы приложения описан в одном месте, а обработка ошибок — в другом.


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

- Тип данных Either как альтернатива выбрасыванию исключений
- Either vs Exception Handling
- Обсуждение на StackOverflow

Предлагаю голосовать: кому что ближе?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👨‍💻31👻1
Вышел новый выпуск Flutter Dev Podcast про FlutterFlow.
Про него я знаю уже давно, но руки не доходили попробовать. Но тут послушал подкаст и решил устроить себе челлендж — максимально быстро сделать простенькое приложение из говна и палок на No-Code.

Взял идею, которую часто даю студентам как первую домашку: есть открытая апишка — chucknorris.io — она возвращает рандомную шутку о Чаке Норрисе. Задача — сделать тиндер с такими шутками. Ну или хотя бы отображать одну шутку на экране и обновлять её по нажатию на кнопку.

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

Выводы

1. Даже No-Code — это всё ещё новый инструмент, с которым нужно разбираться. Я вот достаточно много времени потратил просто на то, чтобы понять, где я вообще. Документацию я конечно же не читал, иначе какой это челлендж. Но я уверен, что если сесть возиться в следующий раз, то будет уже сильно проще.

2. Возможно плохо искал, но я не нашел инструментов для дебага. Вот если у меня приложение тупа не работает ведет себя не так, как я ожидаю — мне как понять, что именно я сделал не так?! Цените ваши дабеггеры, девтулзы и конечно же логгер, пацаны и пацанессы.

3. Оправдываюсь первыми пунктами, надеясь, что это не я просто тупой.

Спасибо сёрфам за мотивационный пинок, хоть попробовал, кто такой этот ваш FlutterFlow.
👨‍💻8😁3🥴3👏2💩2👍1🤓1
А вот и результат работы двух десятков людей из нескольких команд: Flutter Handbook!

Вся команда постаралась на славу, такие все котики! 😇

Читайте сами и делитесь с друзьями, кто заглядывается на флаттер, но всё никак не решится. И делитесь впечатлениями в группе в телеге!

А мы продолжим развивать хэндбук и делать его ещё круче 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥296👏2❤‍🔥1🎉1
Можете официально считать это фишкой канала: когда мне лень некогда писать полезные посты, я просто прошу ChatGPT сгенерить какую-нибудь дичь на тему флаттера.

На этот раз всратые советы по написанию кода:

☝️ Переменные, объявленные внутри StatefulWidget, должны быть объявлены с приставкой "внутри_".

☝️ Если вы хотите использовать async/await в Flutter, то вы должны совершить жертвоприношение в виде некоторого количества капель крови каждый раз, когда используете эту конструкцию.

☝️ Никогда не делайте бэкапы своего кода на Dart и Flutter. Это займет слишком много места на вашем жестком диске, а вам все равно не пригодится.

☝️ Если вам нужно протестировать свой код на Flutter, сделайте это на живом питоне. Никаких виртуальных машин и эмуляторов - только настоящий змей.

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

☝️ Если ты пишешь на Dart, то всегда начинай свой код со слов "import 'dart:math';", чтобы дать своей программе более математический характер.

☝️ Если ты пишешь на Dart, то всегда используй const, даже когда это не имеет смысла, чтобы показать свое уважение к памяти и оптимизации.

А ещё завтра выступаю на Стачке в Ульяновске, так что если вы внезапно тоже там будете — ловите в местах, где базарят за флаттер.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13🦄6🔥4🌭21💩1
На Стачке был круглый стол, на котором обсуждали тренды в мобильной разработке, в том числе и кроссплатформу.

Среди участников были и ребята из аутсорс компаний (в частности Agima и MadBrains). И они в один голос сказали, что сейчас новым заказчикам уже не нужно продавать флаттер — они уже сами всё почитали, изучили, и сами приходят с запросом “давайте нам ваш флаттер”.

Для меня это стало откровением — я думал, что в заказной разработке просвещение заказчиков про флаттер всё ещё требует некоторого усилия, а оказывается уже всё продано — бери и делай.

Плюс звучали тоже любопытные числа, что штат Flutter разработчиков за последний год (вроде бы) вырос на 50%, в то время как мобильных — на 10-15%.

Так что можете пересказывать это flutter-скептикам вокруг вас, если таковые имеются — а то они всё проспят! 🥱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥10💯3😱1😈1😴1
Ну чо, почалось, погнали бустить канал!

Для этого нужно обновить телегу — и тогда сможете тыкнуть по ссылке и респектнуть каналу, а за это я смогу постить тут сториз 💅
Please open Telegram to view this post
VIEW IN TELEGRAM
💅102👎21🔥1😁1
Андроидеры тут? Как вам идея Dagger 2, но на Dart?

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

Как раз на прошлой неделе один из таких коллег-разработчиков показывал свой пакет: jugger.

Честно, сам пока не добрался попробовать, только доку почитал — ну это реально Dagger, круто. Так что если у вас есть большое и теплое чувство к андроидному DI, то может быть jugger — это кандидат на ваше сердечко. Ещё есть статья на хабре от автора.

И раз уж такая песня, то давайте-ка обсудим: какие (можно несколько) способы связывать зависимости в проекте вам нравятся больше всего?
👍4🔥3👌2🤷‍♂1
Заглянул тут случайно в один из самых первых проектов, которые писал на флаттере, и увидел там ошибку, от которой лучше постараться избавиться как можно раньше. Я там написал абстрактный виджет, а потом от него отнаследовался!

"Composition over inheritance" (композиция вместо наследования). Во флаттере это не просто технически более гибкое решение — это своего рода философия, которая лежит в основе всего фреймворка.

Как избежать ошибки? Ну, собственно, не делать как делал я:
1. Не писать виджетов с модификатором abstract
2. Не делать extends ни от каких виджетов, кроме базовых Stateful/Stateless

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

Если нужны детали и причины, то вот несколько ссылочек:
1. Про композицию в доке флаттера
2. Кусочек из видео 6-летней давности про эту философию
3. Можно загуглить фразу "Composition over inheritance", там много материалов помимо флаттера

P.S. Я хоть и немного загружен в последнее время, но про канал не забываю, и уже есть несколько черновиков, о чём бы ещё хотел рассказать — так что не теряйте.
👍165🔥4😈2💩1
Ну всё, теперь заживем! Завезли "non-null promotion for private final fields".

Теперь по порядку: дропнулся Flutter 3.16, а вместе с ним и Dart 3.2.

И помимо кучи прочих крутых штук, полечили старую боль, от которой у всех рано или поздно припекало: даже если ваше поле final и вы проверили его на non-null, то ниже дарт всё равно требовал проверять опять 🗿 И приходилось извращаться и присваивать это final-поле в локальное final-значение, и дальше работать с ним — только тогда тот самый non-null promotion начинал работать.

class A {
final int? _nullableField;

const A(this._nullableField);

check() {
if (_nullableField == null) {
return;
}
// Тут _nullableField уже никогда не будет null,
// но в версиях ниже 3.2 всё равно будет ошибка компиляции.
int nonNullVar = _nullableField;
}
}

Но если у вас вдруг припекает не только от final-полей, но и от var-полей, которые не умеют в non-null promotion, то придется вас разочаровать — var так промоутить нельзя: вот gist с примером, а вот такой же dartpad, чтобы потыкать.
🍾17🎉32👍2💩1
Flutter Bro
Универсальный ответ на вопросы "С чего начать?" и "Как систематизировать знания?": плейлист с лекциями по Flutter от Яндекса. Это сборник из лекций со Школ Мобильной Разработки 2021 и 2022 годов. Лекции сгруппированы по темам и по порядку усложнения. В части…
Прошлый пин с яндексовыми материалами для погружения во Flutter немного устарел, поэтому вот обновление, чтобы всегда было под рукой.

Flutter Handbook — текстовый учебник на базе Академии Яндекса

Школа Мобильной Разработки 2023 — полный видео-курс из открытого лектория.

Школа Мобильной Разработки 2021-2022 — публичная часть лектория прошлых лет.

Читайте и смотрите сами, советуйте друзьям ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥42👍2💩1👌1💯1🤝11
Flutter Bro pinned «Прошлый пин с яндексовыми материалами для погружения во Flutter немного устарел, поэтому вот обновление, чтобы всегда было под рукой. Flutter Handbook — текстовый учебник на базе Академии Яндекса Школа Мобильной Разработки 2023 — полный видео-курс из открытого…»
Сегодня одним постом аж два анонса!

Дебаты Flutter vs Kotlin Multiplatform

5 декабря (т.е. завтра), в 19:00 по Москве, на конференции YaTalks, в прямом эфире будут проходить дебаты между двумя хайповейшими кроссплатформенными технологиями. Выступать на стороне флаттера будут небезызвестные Гена Евстратов (Яндекс Про) и Женя Сатуров (Surf, Flutter Dev Podcast).

Независимо от результатов, это будет легендарно! Поэтому ставьте напоминалку в календарь.

Опрос по архитектурным подходам во Flutter

Думаю, не мне одному было интересно посмотреть на распределение интереса к разным подходам связывания зависимостей. Поэтому я решил пойти дальше и в целом собрать статистику по таким основополагающим темам как state-management, связывание зависимостей, работа с UI, бизнес-логика, структура проекта и т.д. Всех приглашаю проходить опрос и распространять среди всех, кто интересуется флаттером и кому есть что сказать на эту тему!

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

Надеюсь, анонсы вам понравились, спасибо что читаете и вовлекаетесь в движухи! ❤️
15🔥11👍42
Flutter Bro
Сегодня одним постом аж два анонса! Дебаты Flutter vs Kotlin Multiplatform 5 декабря (т.е. завтра), в 19:00 по Москве, на конференции YaTalks, в прямом эфире будут проходить дебаты между двумя хайповейшими кроссплатформенными технологиями. Выступать на…
Если не смогли посмотреть дебаты Flutter vs KMP — уже появилась запись. Крутой формат на давно зревшую тему, получилось живо и напряженно.

Выиграл Flutter со счетом 75% к 25%. Так что смотрите запись и запоминайте аргументы на случай важных переговоров с коллегами.

И, раз уж эти два инфоповода у меня так связались, то ещё раз напоминаю про архитектурный опрос — залетайте, если ещё не проходили! А если уже проходили — а такие точно были, и вас не мало, — моя искренняя благодарность вам ☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
2892💯1
Флаттер поддерживает смешанную реальность! 🤔

Вот, пожалуйста, хоть дефолтный счётчик, хоть огромный (во всех смыслах) Яндекс Про — на Quest 3 все из коробки завелось.

Я начинал пользоваться VR ещё со времён HTC Vive, сейчас решил вернуться и посмотреть на новый виток технологии, и пока у меня впечатление такое: почти 5 лет прошло, а самое кайфовое развлечение всё то же — рубить кубы в Beat Saber! 💃

Но Mixed Reality ощущается, конечно, футуристично. Думаю, что рано или поздно шлем скукожится до размеров относительно удобных очков, и мы будем жить как в этом видео. С его публикации прошло семь лет и теперь можно так же пальцами тыкаться в воздух.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2075🦄33🤯21🔥1🌚1😎1
31 декабря — очень сентиментальный день, поэтому я просто хочу сказать вам спасибо!

Уверен, что и нас всех, и объединивший нас Flutter, ждёт интересное и счастливое будущее. И мы в нём продолжим вдохновлять друг друга на новые движухи 🦮

Поздравляю с наступающим Новым годом! 🍾
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄417🍾443👾1
А вот и предстоящая движуха: интенсив по мобильной разработке в Сириусе! Две недели в конце марта, два параллельных трека: iOS и, конечно же, Flutter.

Весь интенсив, каждый день, мы будем встречаться оффлайн: разбираться с мобильной разработкой и делать проекты. А ещё в Сириусе в это время очень приятная погодка и примерно 0 туристов, потому что межсезонье.

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

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

PS: Фотка с прошлогоднего интенсива

PPS: Кто уже участвовал в любой яндексовой образовательной штуке — ставьте 🎓, будем знать, что вы среди нас.
Please open Telegram to view this post
VIEW IN TELEGRAM
28🔥8😭64👌2💩1👻1
AI-сообщество вчера засуетилось — OpenAI запустили магазин GPT-ботов (нужен VPN и подписка 😬).

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

Нашел 10 штук, не считая своего. Почти все боты — это советники, ещё есть генератор Dart-кода из фигмы. У всех спросил исходный промпт — все, кроме одного, (ему респект 😄) отрапортовали весь промпт целиком 🫡
Кажется уже пора запускать курс для вузов по промпт безопасности.

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

Короче, если у вас есть платная подписка на ChatGPT — велком пробовать: FlutterBro.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍4👾32