Surf Flutter Team – Telegram
Surf Flutter Team
3.13K subscribers
676 photos
54 videos
265 links
Комьюнити Flutter-разработчиков Surf.

🛠 Разработали решения для KFC, Росбанка и Medium Quality
📚 Делимся полезными материалами и обучаем стажёров

💬 Чат → https://news.1rj.ru/str/+aJbtJ4znXCBhOGIy

🧑🏻‍💻 Вакансии: career.surf.ru
📲 По вопросам @SurfAskBot
Download Telegram
Forwarded from Surf Tech
Ищем опытного Flutter-разработчика 🏄‍♂️

В Surf работают с Flutter уже больше трёх лет. За это время реализовали 25+ проектов, написали множество статей, выступали на конференциях.

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

Требования к вакансии смотри на карточках. Если твои навыки подходят — пиши нашему рекрутеру и отправляй резюме.
🤩9👍41
Пост признания в любви…
К корове! 🐮

Мы вам не рассказывали, но…

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

В какой-то момент мы поняли, что некоторые члены команды никогда не видели своих коллег лично. Так родилась идея собраться всем вместе в одной точке. Привет, Питер!

Чтобы продуктивно поработать, мы арендовали коворкинг. Который с чьей-то лёгкой руки превратился в… коровкинг.

Этот новояз нам так понравился, что корова стала символом единства отдела: у нас появился мерч отдела с коровкой и логотип этого канала.

Вот так корова стала для Flutter-отдела по-настоящему священным животным 😜
👍2713🤣11❤‍🔥3👏2
This media is not supported in your browser
VIEW IN TELEGRAM
🔥207👍32👏2
Маленькая «неожиданность» с массивами, или как вместо 24 значений в каждом массиве получилось 168 🙄

Что случилось
Нужно было посчитать средние значения в каждый час каждого дня недели. А затем собрать их в массив массивов, где массив представляет собой день недели, заполненный средними значениями за каждый час. То есть
List<List<double>>
.

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

final valuesPerWeekday = List.filled(7, <double>[])


и заполнять уже в формате 

valuesPerWeekday[weekday].add(avgValue)
.

Каково было удивление, когда вместо 24 значений в каждом массиве я обнаружил 168 😱

В чём подвох
Открываем документацию к конструктору List.filled и читаем:
/// All elements of the created list share the same [fill] value


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

Выводы
1️⃣ Читайте внимательно документацию к тому, что используете, и не повторяйте моих ошибок.
2️⃣ Пишите документацию на свои реализации сполна. Обязательно подсвечивайте неочевидные кейсы, чтобы потом волосы на голове не вырывать.
3️⃣ Используйте
List.generate(length, (index) => <double>[])
для таких генераций: на каждый индекс создастся уникальный объект.
👍17🤔10🔥8❤‍🔥2😁2
Текстовые виджеты: почему на устройствах иногда «едет» вёрстка

При работе с текстовыми виджетами может произойти ситуация, когда в эмуляторе всё работает нормально, а на реальном устройстве вёрстка неожиданно меняется.

Всё дело в textScaleFactor
Это свойство есть у виджетов Text и RichText

Text scale factor — один из Accessibility-параметров, его задаёт пользователь у себя на устройстве. Отвечает за масштаб текста: например, слабовидящий человек ставит коэффициент 2, чтобы читалось лучше.

Текст становится в два раза крупнее указанного в коде приложения fontsize — и всё, приехали. До свидания, красивая вёрстка 🥲

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

Читать статью >>
🔥17👍62
Бывает, что разработчики допускают орфографические ошибки в коде, комментариях, документации

Это кажется не критичным, но на деле вызывает проблемы:
🔹 отвлекает во время ревью;
🔹 нужно потратить время, чтобы поправить ошибки после ревью;
🔹 может ввести в заблуждение, если есть ошибка в названии параметра или класса;
🔹 ну и просто немного раздражает.

Решение очевидно: после установки красивой темы нужно вместе с другими плагинами сразу же настроить проверку орфографии.

В карточках рассказываем, как это сделать.
🔥20👍7
Пакет Share, точнее, его преемник share_plus — простая как топор библиотека

Передал Share.share(‘message’); — и шеринг работает на всех телефонах без проблем. 

Но если при разработке вы используете планшеты, то всё оказывается не так очевидно 👇👇👇

На одном из проектов у нас появился баг, при котором на айпадах не работала кнопка «Поделиться». 

Реализация была, как обычно, с помощью строки Share.share(‘message’);, но консоль стала ругаться на MethodChanel её при выполнении. 

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

Обсуждение и решение проблемы >>

⚠️ Главное: если приложение делается и для планшетов тоже, всегда передавайте sharePositionOrigin.
🔥22👍4
Слушаем новый эпизод Flutter Dev Podcast 🎧

Разложили по полочкам обновление 3.7 — там и 19 новых виджетов, и долгожданные фоновые изоляты, и превью нового графического движка!

У микрофона Cёрферы Евгений Сатуров и Марк Абраменко, Михаил Матюнин (Fox) и aso.dev founder Игорь Кравченко.

Подписывайcя на подкаст в Telegram и слушай на всех доступных площадках:

Soundcloud | Яндекс.Музыка | Spotify | Apple Podcasts | CastBox | Google Подкасты | VK
🔥15👍8
Принимаем заявки на Flutter Weekend Study Jam 👨🏻‍💻

Начинаем онлайн на следующих выходных, программа такая:

📌 8 апреля — слушаешь лекции от крутых Сёрферов, подробности на карточках 👆
📌 9 апреля — решаешь задачу из нашего курса по Flutter (обновляем его, про это расскажем позже)

Далее подведём итоги, самых лучших позовём на собеседование — и бац, ты уже стажируешься во Flutter-команде Surf!

Не тяни — заполняй заявку до 6 апреля 👍
🔥17👍4🤔2
Перепись канала! Какой у тебя грейд?
Anonymous Poll
10%
Trainee
25%
Junior
33%
Middle
19%
Senior
14%
Без грейда