Flutter Developer Talks
596 subscribers
74 photos
19 videos
154 links
Download Telegram
Flutter Developer Talks
🚨 Оптимизируем build_runner Ускоряем выполнение задач build_runner одним простым конфигурационным файлом. 📱 Смотреть на YouTube Материалы из видео: - Конфигурационный файл #flutter 🎵 Слушать подкаст в Apple Podcasts 💬 Слушать подкаст в Telegram 🌐 Читать…
❗️ Ответы на комментарии с YouTube

YouTube падает при ответе на ваши комментарии, поэтому соберу их тут.

1️⃣ Зачем вообще нужна оптимизация build_runner? Вы сами себе все усложняете

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

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

Есть еще раздел в документации build_runner. Там советуют не хранить ничего сгенерированного в репозитории, но это лишь совет, а не правило работы с билдером.

2️⃣ Какие еще есть способы запуска build_runner? Для отдельного файла, пакета, есть возможность билда?

Можно запустить build_runner с параметром --build-filter, который будет работать только с тем скоупом, что вы туда ему передадите.

❗️ Все примеры ниже применимы к проекту, которые разбирается в видео. Запуск происходит так же, как в видео (через fvm). Для использования на ваших примерех нужно заменить значение --build-filter на то, что у вас локально.

Для файла пример будет такой:

fvm flutter pub run build_runner build --build-filter="lib/cp_one/one/model_gen.g.dart"


Директорию можно обработать следующим образом:

fvm flutter pub run build_runner build --build-filter="lib/cp_one/**/*.g.dart" 


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

#post

🎵 Слушать подкаст в Apple Podcasts
💬 Слушать подкаст в Telegram

🌐 Читать посты в блоге
💬 Навигация по постам
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👨‍💻4❤‍🔥3
📚 Пиши, сокращай

Книга про то, как писать любые тексты.

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

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

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

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

👉 Подробнее на сайте издателя

Там нет реферальной ссылки. Просто не знаю, где вам еще книгу показать.

#post #book

🎵 Слушать подкаст в Apple Podcasts
💬 Слушать подкаст в Telegram

🌐 Читать посты в блоге
💬 Навигация по постам
Please open Telegram to view this post
VIEW IN TELEGRAM
👍532👨‍💻1
🔖 Выбираем самый лучший шрифт для IDE

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

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

В довесок к базовой функциональности есть еще список тем, и ссылка на загрузку каждого шрифта. Так же присутствуют дополнительные настройки шрифта типа размера и лигатуры.

👉 Ссылка тут

#post

🎵 Слушать подкаст в Apple Podcasts
💬 Слушать подкаст в Telegram

🌐 Читать посты в блоге
💬 Навигация по постам
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥4
🚨 Подработки: что может пойти не так

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

1️⃣ Оформление

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

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

В договоре должно быть прописано только то, на что вы обязуетесь подписаться в плане работы. Если есть какие-то непонятные формулировки - не бойтесь переспросить что-то у кадровика. Да, нужно будет потратить время на обсуждение - но ваши нервы и спокойствие дороже пары сообщений HR'у.

2️⃣ Оплата труда

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

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

3️⃣ Налоги

Если вы называете ценник в час, например, в 2 000 рублей, то обязательно проговаривайте, что это чистыми. В лучшем случае работодатель сам догадается, что нужно докинуть к ставке в час, но скорее всего налог будете платить вы.

4️⃣ Уведомлять на основной работе о подработках

Явно такое делать не рекомендую.

Из моей практики, даже самые адекватные на первый взгляд руководители, будут на вас рано или поздно косо смотреть. Если спросят, можно сказать, но явно не рекомендую упоминать об этом. Даже в какой-нибудь беседе в баре - лучше промолчать. Пока вы с руководителем работете в одной компании - друзьями вы не будете.

5️⃣ Цель подработок

Денежная мотивация, к сожалению, работает до тех пор, пока вы не начнете уставать. Тут имею ввиду работу без цели, чтобы просто было сверх ЗП что-то. Когда вы точно знаете, зачем подрабатываете, процесс будет идти гораздо лучше, ибо цель дает дополнительную мотивацию.

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

В общем, работайте рационально, и трезво оценивайте свои силы.

#post

🎵 Слушать подкаст в Apple Podcasts
💬 Слушать подкаст в Telegram

🌐 Читать посты в блоге
💬 Навигация по постам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍5💯51🤔1
🧑‍💻 freezed 3

У нас тут был большой релиз, и будто бы все отодвинулось на второй-третий план.

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

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

1️⃣ Наследование

Выделил это первым пунктом и отдельно. Боль нашего проекта, из-за которой очень долгое время приходилось (и приходится) использовать built_value, в котором наследование было с давних времен (само решение такое себе, очень много лишнего в процессе работы появляется).

Выглядит наследование во `freezed` следующим образом:


class Base {
Base(String value);
}

@freezed
class Usual extends Base with _$Usual {
Usual({int? a}) a = a ?? 0, super('value');
final int a;
}


Остается только вопрос, что делать с тысячами строк уже написанного кода на built_value и обертками для него ;)

2️⃣ Mixed Mode

freezed теперь поддерживает 2 способа создания классов.

Первый из них - обычный, уже знакомый нам по предыдущим версиям:


@freezed
sealed class Usual with _$Usual {
factory Usual({int a}) = _Usual;
}


Второй же более простой, удобный для создания небольших сущностей без специфического синтаксиса:


@freezed
class Usual with _$Usual {
Usual({this.a});
final int a;
}


Такая форма так же позволяет использовать все возможности конструкторов, включая вызов super у родительского класса.

3️⃣ Возможность добавлять не константные значения по умолчанию

Тоже та еще головная боль, в особенности при работе с большими / сложными сущностями.

Конструктор теперь принимает любые значения, можно посмотреть на примере ниже:


@freezed
sealed class Response<T> with _$Response<T> {
// Параметр "time" не константный, раньше такое не сработало бы
Response._({DateTime? time}) : time = time ?? DateTime.now();

factory Response.data(T value, {DateTime? time}) = ResponseData;
factory Response.error(Object error) = ResponseError;

@override
final DateTime time;
}


4️⃣ map/when больше не генерируются

Если раньше у нас имелись методы по типу map или when, которые позволяли писать код с учетом всех вариаций состояний для блоков, например, то теперь freezed использует Дартовый паттерн-метчинг.

Было:


final model = Model.first('42');

final res = model.map(
first: (String a) => 'first $a',
second: (int b, bool c) => 'second $b $c',
);


Стало:


final model = Model.first('42');

final res = switch (model) {
First(:final a) => 'first $a',
Second(:final b, :final c) => 'second $b $c',
};


Важно! Это - "ломающее" изменение в новой версии freezed. После обновления варианта с map не будет, нужна миграция!

#post

🎵 Слушать подкаст в Apple Podcasts
💬 Слушать подкаст в Telegram

🌐 Читать посты в блоге
💬 Навигация по постам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍43🎉1
🧑‍💻 Все материалы по BLoC / flutter_bloc

За почти год с небольшим каким-то образом получилось выпустить материалы по всем популярным темам касательно flutter_bloc.

В этом посте разбил весь контент на категории для более удобной навигации. Так же напоминаю, что весь контент по Блоку можно искать по тегу #bloc.

🫣 Основы

- Flutter Developer Talks #12 - BLoC
- Flutter Developer Learn #1 - Дополнение к выпуску про базу BLoC
- Flutter Developer Learn #2 - BlocBuilder
- Flutter Developer Learn #3 - Реализация состояний в BLoC
- Flutter Developer Learn #4 - BlocListener
- Flutter Developer Learn #5 - Cubit
- Flutter Developer Learn #8 - Как не нужно выстраивать коммуникацию между блоками
- Flutter Developer Learn #10 - BlocConsumer 2

🎮 Продакшн

- Flutter Developer Learn #6 - feature-first и layer-first подходы для организации Flutter-проектов
- bloc_concurrency
- Шиммеры / Скелетоны
- bloc + пагинация = ❤️
- hydrated_bloc: сохраняем состояние блоков
- replay_bloc: откатываем состояния блоков и кубитов

🤔 Тулинг

- Flutter Developer Learn #7 - Генерация шаблонного кода / mason
- bloc_tools: генерируем блоки из консоли

👌 Полезное

- flutter_bloc на собеседованиях
- VS Code для разработки Flutter-приложений

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

#post #bloc

🎵 Слушать подкаст в Apple Podcasts
💬 Слушать подкаст в Telegram

🌐 Читать посты в блоге
💬 Навигация по постам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥155👍4🎉1
📱 Улучшаем резюме при помощи DeepSeek / ChatGPT

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

Резюме выгружал с HH. Работал с PDF и DOC-файлами. О разнице форматов расскажу ниже в заметках.

Просто вставляем следующий текст и прикрепляем файл в чат с AI-ассистентом:

Проанализируй моё резюме на основе следующих данных:
— Текст резюме
— Опыт работы (должности, компании, обязанности)
— Образование
— Навыки
— Сертификаты и достижения (если есть)
— Дополнительная информация (если есть)

Мне нужно понять:
— Какие первые впечатления складываются о кандидате?
— В какую профессию/роль я выгляжу наиболее подходящим кандидатом?
— Какие сильные стороны заметны сразу?
— Какие слабые места стоит доработать?
— Что может насторожить или оттолкнуть рекрутера?
— Как бы ты оценил общее впечатление от моего резюме?

Проанализируй текст как опытный HR/рекрутер и дай подробный, честный разбор.


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

👨🏻‍💻 Итоги по моему резюме

- Возможные недопонимания по части времени работы в разных компаниях:

Я работал в компании Y, и спустя год после ухода оттуда помогал им с наймом как подрядчик. В резюме, если не смотреть на описание, опыт выглядит как Компания Y -> Текущее место работы -> Компания Y. Описание по моему опыту мало кто читает, так что лучше убрать это пункт вообще. Тем более, что там 2 месяца всего - будет больше вопросов со стороны HR, чем пользы.

- Образование:

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

- Достижения без метрик:

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

- Языки:

У меня Английский - B2. Для международных проектов этого может быть недостаточно. Вообще, давно им не занимался, может быть, там уже и не B2. Однако за подсказку спасибо, есть над чем поработать.

❗️ Заметки

1. После первого прогона понять, что не важно, и убрать из него все лишнее.

2. Использовать можно хоть PDF, хоть DOC. Однако нужно учитывать, что DeepSeek может распарсить файл с ошибками, и весь его последующий вывод будет учитывать и их. Если есть ошибки - это минус к итоговой оценке, хотя тут даже не ваша вина. Помогло скормить ему не DOC, а PDF, однако в другом подобном кейсе сработала обратная ситуация.

3. Не все советы прям действительно могут пригодиться. AI подсвечивает много чего, что зависит от конкретной ситуации. Высшее образование не всегда играет хоть сколь большую роль в трудоустройстве, больше обращают внимание на опыт. А Английский язык выше B2 на СНГ-рынке требуется не часто.

4. AI без конкретики выдаст результат по вашей текущей позиции с типичным планом развития. Это не значит, что обязательно после Middle идет Senior, а дальше только в лидство. Если план развития другой, лучше написать об этом заранее - советы будут ориентированы на конкретный кейс.

#post

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍53
🗓 Июньский дамп

Все материалы за июнь.

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

🔖 Посты

- Майский дамп
- Новости / Анонсы 3
- Улучшаем резюме при помощи DeepSeek / ChatGPT

#post #dump

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥3👍2
😐 Эффект "разбитых окон" в разработке софта

Подробнее про теорию разбитых окон можно прочитать тут.

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

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

В видео про то, как не надо выстраивать коммуникации между блоками во flutter_bloc, мы затрагивали тему использования блоков внутри блоков. Это - яркий пример "разбитого окна". Вместо того, чтобы провайдить параметры из одного блока в другой, использования BlocListener'ов или других виджетов для создания коммуникации между ними, мы просто делаем все как можно быстрее. Это дает в свою очередь карт-бланш всем остальным коллегам на подобные технические решения. Особенно если это прошло ревью от лида или других разработчиков, вопросы отпадут само-собой - так точно можно и вам никто ничего не скажет. Даже если и будут вопросы, можно ссылаться на предыдущие реквесты и уже имеющийся код, мол так тут принято.

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

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

Так же нужно учитывать, что мы не всегда можем определить "разбитое окно". Дело касается больше не технических, а концептуальных решений. Глобальные состояния - это не всегда плохо. Плохо то, что они могут использоваться где попало и без следования регламентам и требованиям проекта. Если сущность должна сохраняться через репозиторий или сервис, делать это в обход (например, из самого класса бизнес-модели) - "разбитие окна".

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

P.S: на создание поста повлияли события в моем подъезде (смотри изображение в посте). Сначала там подрались какие-то нетрезвые ребята. Потом краской на полу указали на нехорошего человека и квартиру, в которой он живет (стрелками). Сейчас вообще кто-то дверь открыл будто бы с ноги, и на стене есть отпечаток от сильного удара ручки. Это все происходило постепенно, аналогии напрашиваются сами-собой.

#post

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2
🔍 Кастомные инструменты Дарта как средства работы с техническим долгом

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

Один из возможных способов чинить разбитые окна - собственные аннотации и генерация отчетов о состоянии кода по ним.

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

В коде будет выглядеть так:

@TechnicalDebt(
author: 'fluttermiddlepodcast',
description: 'Move to UI-Kit',
severity: Severity.minor,
deadline: '2025-12-12',
)
class BEShimmer extends StatelessWidget {
final double height;
final double width;

const BEShimmer({
super.key,
required this.height,
required this.width,
});

@override
Widget build(BuildContext context) {
return Shimmer.fromColors(
baseColor: Colors.grey.shade300,
highlightColor: Colors.grey.shade50,
child: SizedBox(
height: height,
width: width,
child: const ColoredBox(
color: Colors.white,
),
),
);
}
}


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

Просто выгружаете проект, и дальше из терминала после `fvm pub get` выполняете:

$ fvm flutter pub run build_runner build --delete-conflicting-outputs


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

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

#post

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥43
🎵 Фоновые звуки в Apple Music

Периодически я работаю под монотонную фоновую музыку (белый шум, либо Lo-Fi). Если раньше просто включал какой-нибудь плейлист на YouTube, то в последнее время приходится искать другие способы прослушивания.

Недавно в рекомендациях Apple Music показал целый раздел с фоновыми звуками. Для тех, кому нужен белый шум (он так же помогает засыпать), вот часть из плейлистов:

🐦 Bird Sounds
Thunderstorms
🐳 Ocean Sounds
🌧 Rain Sounds

Скорее всего, подобные сборники есть и на других площадках (звуки дождя и грозы в Яндекс Музыке тут). Так что если у вас проблемы с доступом на YouTube, или же просто не хочется ставить отдельные приложения подобного формата, рекомендую найти что-то в уже имеющихся сервисах.

#post

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥21👨‍💻1
Flutter Developer Talks
🔖 2024 Stack Overflow Developer Survey На StackOverflow появились результаты ежегодного опроса разработчиков про используемые ими технологии и тенденции в плане обучения и используемых сервисов на работе. 👨🏻‍💻 Из интересного 👉 В опросе приняло участие 65437…
🔖 2025 Stack Overflow Developer Survey

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

👨🏻‍💻 Из интересного

👉 Получено более 49 000 ответов на вопросы. ОТВЕТОВ! Не количество людей, принявших участие в исследовании. В прошлом году было 65 000 человек, видимо популярность площадки все-таки падает.

👉 JavaScript - все еще самый популярный язык программирования у респондентов на платформе. В разделе с языками для обучения его опережает Python, однако в остальных топиках он уступает HTML / SQL.

👉 VS Code все еще самое популярное средство для разработки софта. С большим отрывом ему уступают Visual Studio и IntelliJ IDEA, а где-то между ними расположился NodePad++. Если пройтись по списку и сложить все цифры по IDE на основе IntelliJ (Android Studio, PyCharm, Rider и так далее), то можно будет ровняться с VS Code.

👉 Dart находится на 19 месте в списке самых используемых языков программирования. В прошлом году был на 17. Тут я бы вообще не делал никаких выводов - с учетом падения интереса к SO, не понятно, насколько падение на 2 места действительно идет от популярности, нежели от чего-то еще.


👉 Секции с популярными фреймворками кроме как для Web-разработки нет. Поэтому узнать текущее место Флаттера в этой категории не получится. Ровным счетом как и посмотреть, как дела у конкурентов.

👉 Windows - самая популярная платформа как для персонального, так и для рабочего использования. За ней с небольшим отрывом идут macOS и некоторые дистрибутивы Linux (Debian, Ubuntu, Arch и так далее).

👉 32,4% опрошенных работают удаленно. Офисный формат (только офис, не гибрид) примерно у четверти респондентов.

👉 42,2% работают только в одной компании. Варианты ответа со второй (третьей?) полноценной работой отсутствуют - только парт-тайм с разным количеством часов в неделю.

Есть отдельные темы про AI, но лишний раз обмусоливать это не хочу. Можете познакомиться с ними сами по ссылке в начале поста. Ну и с остальными топиками тоже.

#post

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥3👀1
Flutter Developer Talks
🧑‍💻 Flock Тут Flutter форкнули, и называется вся эта история Flock. Это НЕ замена Флаттера, а отдельный проект для более быстрого развития платформы. 📝 Основные тезисы (по словам автора) 1️⃣ Flutter's labor shortage Или нехватка разработчиков. Типа над…
🧑‍💻 Как дела у Flock

Flock - это форк Флаттера. Подробнее о нем рассказывал в этом посте. Там и о причинах создания ответвления, и о том, что я думаю по этому вопросу. В видео-формате есть ролик Станислава Чернышева, тоже рекомендую ознакомиться. В нем больше информации и рассуждений, с конкретными примерами из уже существующих на тот момент репозиториев.

И вот, решил я посмотреть, какой прогресс у команды Флока за 10 месяцев с момента анонса.

💻 Репозитории, сайт, и их содержимое

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

Часть разделов сайта как были с Coming soon, так и остается с ним. Гайдов по работе с форком тоже нет. Последний пост в блоге - приглашение к дискуссии на GitHub, и датируется он 19 ноября 2024 года.

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

В issues основного репозитория можно найти следующее:

- На вопрос про дальнейшее развитие форка четкого ответа нет
- Из 40 человек, которые хотели контрибьютить в Flock, до реального вклада дошел только 1
- Команда Flock: 3 человека, из которых 2 основателя и 1 сторонний контрибьютор

Что все это значит, и почему так обстоят дела

Когда форк заработает (если вообще заработает) - не понятно. Как и не понятна идея создания форка без предварительной подготовки и наличия единомышленников, которые сразу после анонса будут пилить фичи и развивать форк.

Расчет, как мне кажется, был на гарантированный приток контрибьюторов и отклик у большого числа людей, чего не произошло почти за год существования Flock'а. Явные улучшения, которые предлагались изначально (по-типу включения поддержки Harmony OS и других платформ, отсутствующих во Flutter'е из коробки), почему-то не были реализованы.

Поспевать за всем тем, что добавляется во Flutter, такой маленькой командой невозможно. Авторы Flock жаловались на медленные процессы принятия изменений во Flutter, а получается так, что и у них этот момент тоже может повториться. Как будут подбираться эксперты, которые берут на себя ответственность за влитые правки? Кто будет работать над разрешением конфликтов? Вопросов больше, чем ответов.

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

#post

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥21👏1
🧑‍💻 Flutter Widget Previewer

Вышла экспериментальная фича для просмотра виджетов в режиме реального времени в Google Chrome.

👨🏻‍💻 Что и как можно смотреть?

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

Доступны к просмотру:

- Функции верхнего уровня: методы, возвращающие Widget или WidgetBuilder.

- Статические методы внутри класса, возвращающие Widget или WidgetBuilder.

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

Для отображения виджета во Flutter Widget Previewer нужно пометить аннотацией `Preview` элемент кода, который подходит под один из пунктов списка допустимых компонентов:

import 'package:flutter/widget_previews.dart';
import 'package:flutter/material.dart';

@Preview(name: 'My Sample Text')
Widget mySampleText() {
return const Text('Hello, World!');
}


Далее из терминала выполняем следующую команду:

flutter widget-preview start


Google Chrome открывается автомитически после сборки. Можно скопировать ссылку и использовать просмотрщик в других совместимых браузерах. Результат будет такой же (в зависимости от виджетов), как и на скриншоте в посте.

Помимо просмотра виджетов, можно так же менять:

- Зум: увеличение и уменьшение виджета в окне предварительного просмотра.

- Сброс масштаба: откат после изменений зума.

- Переключение между темной и светлой темами.

- Hot restart отдельно взятого виджета, без пересборки всего Flutter Widget Previewer.

🛠 Кастомизация

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

- size: размер компонента с использованием класса Size.

- textScaleFactor: собственный скейл для текста внутри отображаемого виджета.

- wrapper: функция, которая врапит ваш виджет в заданное дерево виджетов.

- theme: функция для установки Material или Cupertino темы.

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

- localizations: локализация для отображаемого виджета.

🚫 Ограничения

На данный момент имеем следующее:

- Публичные константы: все аргументы, которые принимает аннотация Preview, должны быть публичными и константными. Требуется для нормальной работы генератора кода. В будущем часть ограничений будет смягчена.

- Неподдерживаемые API: нативные плагины и любые API из библиотеки dart:io не поддерживаются. Поскольку FWP работает в вэбе, нативные плагины там не работают. Вэб-плагины тоже не получится использовать, так как нет гарантий из работы локально в IDE.

- Пути к ресурсам: при использовании API fromAsset из dart:ui для загрузки ресурсов необходимо использовать пути на основе пакетов вместо прямых локальных путей. Это дает гарантированный и корректный импорт зависимостей.

- Поддержка браузеров: сейчас доступно только в Chrome, поскольку для FWP требуется поддержка горячей перезагрузки. Поддержку IDE обещают в скором времени.

- Unconstrained-виджеты: на данный момент отображаются только на половину экрана. В будущем поведение изменится.

#post

📱 Слушать подкаст в Apple Podcasts
📱 Слушать подкаст в Яндекс Музыке

📱 Читать посты в блоге
📱 Читать посты в Телеграме
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍532