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
Поговорим о golden-тестах 😎

Мы в Surf убеждены, что golden-тесты — главные тесты, которые нужны в проектах. Многие, кстати, могут знать их как «скриншот-тесты».

Как это работает

Реализуем UI-компонент — например, кнопку. Делаем скриншот, чтобы остался золотой образец — отсюда и название. С ним сверяют другие скриншоты при следующих прогонах. Если они различаются хотя бы на один пиксель, считаем, что UI-компонент сломался.

Чем плохи golden-тесты из коробки, или спасибо golden_toolkit

Flutter поддерживает скриншот-тесты из коробки, но в документации про это почти ничего не говорится. Да и в целом из хорошего в них только то, что они поддерживаются 😁 В остальном — неудобный API, сложная настройка: все golden-тесты не получится настроить в одном месте.

Но! Ребята из Flutter-команды Ebay написали обёртку — пакет golden_toolkit. По умолчанию подключайте его сразу: документация там подробная и понятная.

Что такого особенного даёт golden_toolkit

1️⃣ Билдеры для тестирования виджетов в различных сценариях. Например, есть конфигурация виджета для темной и светлой темы: это два различных сценария, которые нужно протестировать.

2️⃣ Multiscreen-тестирование. Можно писать golden-тесты не только на отдельные UI-компоненты, но и на целые экраны, и смотреть, как они будут выглядеть на самых разных девайсах.

3️⃣ Централизованная конфигурация тестов и удобный API, через который можно с ними работать.

Golden-тесты — это круто
Да, они не помогут протестировать нюансы реализации или бизнес-логику. Но мы пишем мобильные приложения — это фронтенд: от проблем с корректностью отображения и вёрсткой golden-тесты спасают.

Пробовали golden-тесты?
🔥18👍3💯1
Давай познакомимся поближе. Мы хотим развивать канал и понимать, какой контент больше подойдёт аудитории. Пожалуйста, ответь на пару вопросов.

1. Какой у тебя грейд?
Anonymous Poll
18%
Trainee
28%
Junior
35%
Middle
19%
Senior
В карточках рассказываем, какие сюрпризы поджидают разработчика при создании стриминга на Flutter. Знаем об этом не понаслышке: все шишки набивали на собственном опыте, когда пилили платформу видеостриминга для The Hole 😉
🔥19🥰5🤯4
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