Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня мы еще немного обсудим с вами отслеживание включения клавиатуры устройства.
Случаи, когда нам нужно отслеживать
1. Если мы работаем с виджетом, который плохо складывается. Например, платформенные виджеты. В одном из наших кейсов на WebView располагалось текстовое поле, которое на Android начало уходить под клавиатуру. В этом случае мы использовали отслеживание для добавления отступов, что помогло справиться с проблемой.
2. Чтобы выводить дополнительные виджеты сразу над клавиатурой, если она открыта. Например, список emoji или что-то подобное. А также менять что-либо на экране, если нам нужно.
3. Это может быть одним из способов отслеживания, пишет ли пользователь что-то в чат. Все же видели надписи «печатает…» в мессенджерах.
Как мы получили высоту клавиатуры
Так как у нас не получилось сжимать WebView автоматически, мы решили прибегнуть к отслеживанию. Попробовав способы из первой части, мы поняли, что они нам не подходят. Поэтому долго выбирали библиотеку, которая подойдет. Вот несколько:
keyboard_height_plugin — позволяет отслеживать не только, открыта ли клавиатура, но и ее высоту. Именно эту библиотеку мы выбрали в итоге.
flutter_keyboard_visibility — самая популярная библиотека, но достаточно сложная в подключении.
Именно эти 2 пакета мы можем порекомендовать к использованию в своих проектах.
Теперь давайте посмотрим, как мы организовали отслеживание. Наш виджет уже и так был
И в методе
Не забываем, что сам объект нужно разрушить вместе с виджетом, поэтому добавляем в
Теперь можно применить новую переменную для отступа.
Делитесь в чате, были ли у вас похожие случаи?
Случаи, когда нам нужно отслеживать
1. Если мы работаем с виджетом, который плохо складывается. Например, платформенные виджеты. В одном из наших кейсов на WebView располагалось текстовое поле, которое на Android начало уходить под клавиатуру. В этом случае мы использовали отслеживание для добавления отступов, что помогло справиться с проблемой.
2. Чтобы выводить дополнительные виджеты сразу над клавиатурой, если она открыта. Например, список emoji или что-то подобное. А также менять что-либо на экране, если нам нужно.
3. Это может быть одним из способов отслеживания, пишет ли пользователь что-то в чат. Все же видели надписи «печатает…» в мессенджерах.
Как мы получили высоту клавиатуры
Так как у нас не получилось сжимать WebView автоматически, мы решили прибегнуть к отслеживанию. Попробовав способы из первой части, мы поняли, что они нам не подходят. Поэтому долго выбирали библиотеку, которая подойдет. Вот несколько:
keyboard_height_plugin — позволяет отслеживать не только, открыта ли клавиатура, но и ее высоту. Именно эту библиотеку мы выбрали в итоге.
flutter_keyboard_visibility — самая популярная библиотека, но достаточно сложная в подключении.
Именно эти 2 пакета мы можем порекомендовать к использованию в своих проектах.
Теперь давайте посмотрим, как мы организовали отслеживание. Наш виджет уже и так был
Stateful
, поэтому работ проводилось немного. Сначала мы добавили объект из библиотеки и создали переменную под размер самой клавиатуры:final _keyboardHeightPlugin = KeyboardHeightPlugin();
double _keyboardHeight = 0;
И в методе
initState
подписались на изменения через callback:_keyboardHeightPlugin.onKeyboardHeightChanged((double height) {
setState(() {
_keyboardHeight = height;
});
});
Не забываем, что сам объект нужно разрушить вместе с виджетом, поэтому добавляем в
dispose
вот такой вызов:_keyboardHeightPlugin.dispose();
Теперь можно применить новую переменную для отступа.
Делитесь в чате, были ли у вас похожие случаи?
👍9🔥6
Hola, Amigos! Начинаем год с выступлений и зовем вас с собой😍 Присоединяйтесь к нам на FlutterConf — первую Flutter-конференцию в России!
📅 Дата: 21 февраля 2025 года
📍 Место: Москва, 3-я ул. Ямского Поля, 26А
В программе:
• Два потока докладов про реальные кейсы с нестандартными требованиями, архитектурные решения и инструменты для Flutter-проектов.
• Нетворкинг-события — завести полезные знакомства и найти новых единомышленников.
• Экспертная зона — обсудить конкретные вопросы с профессионалами, получить практический совет и понять, как расти в профессии.
• Круглый стол: прошлое, настоящее и будущее Flutter.
• AfterParty, где получится неформально пообщаться с коллегами.
Некоторые из докладов конференции:
→ Павел Гершевич. Mobile TeamLead, Amiga. Доклад: «Многомодульность в Flutter 2.0. Все подходы и что нового»
→ Станислав Чернышев. Доцент СПбГУАП, автор книги «Основы Dart». Доклад: «Жизненный цикл фичи в Dart: от issue до релиза»
→ Максим Ясаков. Flutter-разработчик, Яндекс. Доклад: «ArtVM: встроенная виртуальная микро среда исполнения для Dart»
Полный список тем, подробности и регистрация по ссылке: FlutterConf 2025
Промокод Amiga10 даёт скидку 10% на покупку билетов🔥
До встречи! 🙂
📅 Дата: 21 февраля 2025 года
📍 Место: Москва, 3-я ул. Ямского Поля, 26А
В программе:
• Два потока докладов про реальные кейсы с нестандартными требованиями, архитектурные решения и инструменты для Flutter-проектов.
• Нетворкинг-события — завести полезные знакомства и найти новых единомышленников.
• Экспертная зона — обсудить конкретные вопросы с профессионалами, получить практический совет и понять, как расти в профессии.
• Круглый стол: прошлое, настоящее и будущее Flutter.
• AfterParty, где получится неформально пообщаться с коллегами.
Некоторые из докладов конференции:
→ Павел Гершевич. Mobile TeamLead, Amiga. Доклад: «Многомодульность в Flutter 2.0. Все подходы и что нового»
→ Станислав Чернышев. Доцент СПбГУАП, автор книги «Основы Dart». Доклад: «Жизненный цикл фичи в Dart: от issue до релиза»
→ Максим Ясаков. Flutter-разработчик, Яндекс. Доклад: «ArtVM: встроенная виртуальная микро среда исполнения для Dart»
Полный список тем, подробности и регистрация по ссылке: FlutterConf 2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤6👍4
Дайджест января
Hola, Amigos! Собрали в одну подборку все полезные посты с декабря до января, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам:
⚪️ Connectivity во Flutter
⚪️ Итоги FlutterInProduction
⚪️ FlutterDevPodcast: Многомодульность во Flutter
⚪️ Single State vs State Machine
⚪️ Статья: «Кастомный трансофрмер для BloC»
⚪️ CodeStyle на Flutter-проектах
⚪️ Действия при открытии и закрытии клавиатуры (ч.1)
⚪️ Действия при открытии и закрытии клавиатуры (ч.2)
⚪️ И еще кое-что... Приглашаем на крупнейшую конференцию FlutterConf 🔥 И напоминаем, что с нашим промокодом Amiga10 вы получите скидку 10% на покупку билета!
Всем хорошего кода!
Hola, Amigos! Собрали в одну подборку все полезные посты с декабря до января, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам:
Всем хорошего кода!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3❤2
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Иногда при запросах к серверу нам не хватает заголовков, и нужно использовать Cookies, хотя это что-то из мира Web-разработки.
Cookies — данные, которые нам отдает сервер, чтобы при дальнейших запросах мы их вернули. Это может использоваться для:
⚙️ аутентификации пользователя;
⚙️ определения сессий (например, мы определяем, что пользователь открыл приложении и пользуется им);
⚙️ хранение каких-либо данных (например, корзины).
Давайте рассмотрим, как мы можем с ними работать на Flutter.
Если мы используем пакет http или его производные, то нам понадобится библиотека cookie_jar. В случае работы с dio, есть dio_cookie_manager. Работают они одинаково — вторая библиотека это надстройка над первой.
Сначала нужно определить, как будут храниться наши Cookie. Существует 2 варианта — обычный
Давайте создадим PersistentCookieJar и добавим его к dio:
Так мы получаем путь к любому месту хранения, но рекомендую использовать папку приложения, и в ней создавать папку
Если установлен параметр
Делитесь в чате, добавляли работу с Cookies на своих проектах?
Cookies — данные, которые нам отдает сервер, чтобы при дальнейших запросах мы их вернули. Это может использоваться для:
Давайте рассмотрим, как мы можем с ними работать на Flutter.
Если мы используем пакет http или его производные, то нам понадобится библиотека cookie_jar. В случае работы с dio, есть dio_cookie_manager. Работают они одинаково — вторая библиотека это надстройка над первой.
Сначала нужно определить, как будут храниться наши Cookie. Существует 2 варианта — обычный
CookieJar
, который сохраняет в ОЗУ, и PersistentCookieJar
, который сохраняет в постоянную память.Давайте создадим PersistentCookieJar и добавим его к dio:
Future<void> prepareJar() async {
final Directory appDocDir = await getApplicationDocumentsDirectory();
final String appDocPath = appDocDir.path;
final jar = PersistCookieJar(
ignoreExpires: true,
storage: FileStorage(appDocPath + "/.cookies/"),
);
dio.interceptors.add(CookieManager(jar));
}
Так мы получаем путь к любому месту хранения, но рекомендую использовать папку приложения, и в ней создавать папку
/.cookies/
, чтобы директория была скрыта от посторонних глаз.Если установлен параметр
ignoreExpires
, то значит приложение или библиотека игнорируют срок годности Cookie и продолжают его использовать, даже если он истек.Делитесь в чате, добавляли работу с Cookies на своих проектах?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4❤3
Hola, Amigos! На связи Михаил Чернецов, Flutter Dev в Amiga. Сегодня расскажем, как работать с файлами cookie в WebView на Flutter. Мы рассмотрим два популярных пакета для работы — webview_flutter и flutter_inappwebview, которые предоставляют схожий функционал. Рассмотрим работу с куки в webview_flutter:
Для использование cookie в flutter_inappwebview используется похожая схема работы с куками:
Главное отличие второго пакета в том, что он позволяет не только устанавливать файлы cookie, но и получать уже существующие, что удобно для дальнейшей логики в приложении.
Делитесь в чате кейсами работы с Cookies на своих проектах!
final cookieManager = WebViewCookieManager();
// устанавливаем cookie с именем test и значением тест на наш хост.
cookieManager.setCookie(
WebViewCookie(
name: “test”,
value: “test”,
domain: “https://example.com”,
),
);
Для использование cookie в flutter_inappwebview используется похожая схема работы с куками:
final cookieManager = CookieManager.instance();
cookieManager.setCookie(
url: WebUrl(“https://example.com”)
name: “test”,
value: “test”,
),
Главное отличие второго пакета в том, что он позволяет не только устанавливать файлы cookie, но и получать уже существующие, что удобно для дальнейшей логики в приложении.
List<Cookie> cookies = await cookieManager.getCookies(url: WebUrl(“https://example.com”));
Делитесь в чате кейсами работы с Cookies на своих проектах!
👍3❤2🔥2🤝1
Hola, Amigos! Принимаем поздравления, нам исполнилось 4 года🥳
В этом году мы достигли значительных успехов, и каждый шаг делал нас только сильнее и увереннее. Давайте вспомним, какие важные моменты произошли в нашем пути за 2024 год:
⚙️ Взяли 72 интересных проекта, это в 2 раза больше, чем в прошлом году;
⚙️ Обновили корпоративный сайт, и теперь улучшаем его для максимального удобства;
⚙️ Наш канал Flutter.Много вырос на 50%;
⚙️ Поучаствовали в 10 масштабных мероприятиях;
⚙️ Завоевали 2 и 3 место на премии CrossConf Awards и серебро и бронзу на Tagline Awards в номинации «Лучшее мобильное MVP-приложение» с кейсом разработки мобильного приложения для сети «Аптека Ваша №1» и в номинации «Лучший маркетплейс» с кейсом создания первого маркетплейса горного оборудования в России;
⚙️ Запустили новые площадки для разработки;
⚙️ Оптимизировали процессы;
⚙️ Улучшили продуктовый подход и расширили спектр услуг;
⚙️ Научились делать больше с меньшими затратами ресурсов, стали эффективнее и сильнее.
С каждым годом количество крупных клиентов и сложных интересных проектов увеличивается, а значит — нам доверяют.
Спасибо всей команде, клиентам и партнёрам — без вас этот путь был бы невозможен! А мы замотивированы расти и не останавливаться, поэтому stay tuned❤️
В этом году мы достигли значительных успехов, и каждый шаг делал нас только сильнее и увереннее. Давайте вспомним, какие важные моменты произошли в нашем пути за 2024 год:
С каждым годом количество крупных клиентов и сложных интересных проектов увеличивается, а значит — нам доверяют.
Спасибо всей команде, клиентам и партнёрам — без вас этот путь был бы невозможен! А мы замотивированы расти и не останавливаться, поэтому stay tuned
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉17👍7❤4🔥3🤝1
Hola, Amigos! В день всех влюбленных подготовили для вас карточки с поздравлениями💖
Отправляйте близким, сохраняйте и пишите в комментариях, как ещё можно признаться в любви, если работаешь в IT:)
Отправляйте близким, сохраняйте и пишите в комментариях, как ещё можно признаться в любви, если работаешь в IT:)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🥰6💘3👍1👎1
Hola, Amigos! Напоминаем о must-visit этого февраля — FlutterConf, первую в России конференцию, полностью посвященную Flutter!
В этот раз Павел Гершевич, наш Flutter Team Lead, выступит с докладом: «Многомодульность в Flutter 2.0. Все подходы и что нового». Павел поделится своим опытом, расскажет о современных подходах к многомодульности и том, как это может упростить вашу разработку.
📅 Дата: 21 февраля 2025 года
📍 Место: Москва, 3-я ул. Ямского Поля, 26А
Еще в программе:
• Два потока докладов про реальные кейсы с нестандартными требованиями, архитектурные решения и инструменты для Flutter-проектов.
• Нетворкинг-события — завести полезные знакомства и найти новых единомышленников.
• Экспертная зона — обсудить конкретные вопросы с профессионалами, получить практический совет и понять, как расти в профессии.
• Круглый стол: прошлое, настоящее и будущее Flutter.
• AfterParty, где получится неформально пообщаться с коллегами.
🔥Напоминаем, промокод Amiga10 даст вам скидку 10% на билеты. Успейте зарегистрироваться!
Программа лежит по ссылке, а мы ждем вас в 1 зале в 11:30!
В этот раз Павел Гершевич, наш Flutter Team Lead, выступит с докладом: «Многомодульность в Flutter 2.0. Все подходы и что нового». Павел поделится своим опытом, расскажет о современных подходах к многомодульности и том, как это может упростить вашу разработку.
📅 Дата: 21 февраля 2025 года
📍 Место: Москва, 3-я ул. Ямского Поля, 26А
Еще в программе:
• Два потока докладов про реальные кейсы с нестандартными требованиями, архитектурные решения и инструменты для Flutter-проектов.
• Нетворкинг-события — завести полезные знакомства и найти новых единомышленников.
• Экспертная зона — обсудить конкретные вопросы с профессионалами, получить практический совет и понять, как расти в профессии.
• Круглый стол: прошлое, настоящее и будущее Flutter.
• AfterParty, где получится неформально пообщаться с коллегами.
🔥
Программа лежит по ссылке, а мы ждем вас в 1 зале в 11:30!
🔥5❤3👍3
Hola, Amigos! На связи Михаил Чернецов, Flutter dev в Amiga. Сегодня рассмотрим плагин sensors_plus, который открывает доступ к сенсорам вашего устройства. С его помощью можно получать данные от акселерометра, гироскопа, магнитометра и барометра.
Как это работает?
Для доступа к данным сенсоров достаточно подписаться на соответствующий стрим. Например:
Важно: На некоторых старых Android-устройствах данные сенсоров могут быть недоступны. Поэтому не забывайте обрабатывать ошибки через
Какие стримы доступны?
accelerometerEvents — необработанные данные акселерометра, включая гравитационное притяжение Земли.
userAccelerometerEvents — данные акселерометра без учета гравитации.
gyroscopeEvents — данные о вращении устройства.
magnetometerEvents — данные о магнитном поле вокруг устройства.
barometerEvents — данные об атмосферном давлении.
Для доступа к сенсорам в iOS необходимо добавить ключ в
Для чего могут быть использованы эти датчики:
Акселерометр — например, для определения тряски устройства.
Магнитометр — для определения направления взгляда пользователя (например, в картографии).
Гироскоп — для определения наклона устройства (раньше часто использовался в играх).
Барометр — для измерения высоты над уровнем моря.
Плагин
Как это работает?
Для доступа к данным сенсоров достаточно подписаться на соответствующий стрим. Например:
userAccelerometerEvents.listen(
(AccelerometerEvent event) {
…
},
onError: (error) {},
cancelOnError: true,
);
Важно: На некоторых старых Android-устройствах данные сенсоров могут быть недоступны. Поэтому не забывайте обрабатывать ошибки через
onError
.Какие стримы доступны?
accelerometerEvents — необработанные данные акселерометра, включая гравитационное притяжение Земли.
userAccelerometerEvents — данные акселерометра без учета гравитации.
gyroscopeEvents — данные о вращении устройства.
magnetometerEvents — данные о магнитном поле вокруг устройства.
barometerEvents — данные об атмосферном давлении.
Для доступа к сенсорам в iOS необходимо добавить ключ в
Info.plist
, иначе приложение упадет.<key>NSMotionUsageDescription</key>
<string>Ваше описание</string>
Для чего могут быть использованы эти датчики:
Акселерометр — например, для определения тряски устройства.
Магнитометр — для определения направления взгляда пользователя (например, в картографии).
Гироскоп — для определения наклона устройства (раньше часто использовался в играх).
Барометр — для измерения высоты над уровнем моря.
Плагин
sensors_plus
— это мощный инструмент для работы с сенсорами, который может открыть новые возможности для вашего приложения. Попробуйте и делитесь своими кейсами!🔥9👍5❤3
Дайджест февраля
Hola, Amigos! Собрали в одну подборку все полезные посты февраля, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам:
⚪️ Cookies во Flutter. Часть 1
⚪️ Cookies во Flutter. Часть 2
⚪️ Многомодульность во Flutter 2.0
⚪️ С днем всех влюбленных
⚪️ Sensors_plus
Всем хорошего кода!
Hola, Amigos! Собрали в одну подборку все полезные посты февраля, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам:
Всем хорошего кода!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥3
Hola, Amigos! FlutterConf 2025 позади, и это было мощно! 🚀
Впервые в России состоялась конференция, полностью посвященная Flutter, и она объединила сотни разработчиков, архитекторов и экспертов индустрии. Два потока докладов, дискуссии, нетворкинг, разборы кейсов — все, чтобы участники ушли с багажом полезных знаний и новых знакомств.
Наш Flutter TeamLead Павел Гершевич рассказал о многомодульности в Flutter 2.0 — разобрали подходы, обсудили лучшие практики и свежие фичи.
Также Павел поделился впечатлениями:
Спасибо организаторам, спикерам и всем, кто присоединился! Увидимся в следующем году! 🚀
Впервые в России состоялась конференция, полностью посвященная Flutter, и она объединила сотни разработчиков, архитекторов и экспертов индустрии. Два потока докладов, дискуссии, нетворкинг, разборы кейсов — все, чтобы участники ушли с багажом полезных знаний и новых знакомств.
Наш Flutter TeamLead Павел Гершевич рассказал о многомодульности в Flutter 2.0 — разобрали подходы, обсудили лучшие практики и свежие фичи.
Также Павел поделился впечатлениями:
FlutterConf стал местом, где все Flutter-разработчики России могут общаться, обмениваться опытом и узнавать что-то новое.
Как член программного комитета скажу, что нам удалось собрать сильные доклады, и конференция прошла просто отлично! Много участников, общения, знакомств. Будем рады видеть на следующем FlutterConf.
Спасибо организаторам, спикерам и всем, кто присоединился! Увидимся в следующем году! 🚀
🔥8❤5👍3
Hola, Amigos! Делимся полезным:
Критическое мышление в эпоху быстрого принятия решений
Руководитель в IT каждый день решает задачи разной степени адовости. Иногда решения принимаются на автомате, по шаблону — потому что так быстрее. Но чем выше ставка, тем важнее уметь включать критическое мышление.
28 марта на офлайн-митапе разберемся, как руководителям в IT не попадать в когнитивные ловушки и принимать решения осознанно. Организаторы из AGIMA обещают много экспертов и классную программу:
🔥 В первой части вечера бизнес-тренер Алексей Кельин научит сомневаться во всем — в хорошем смысле. Он покажет инструменты, которые помогут руководителям критически оценивать свои мысли, видеть ситуацию со всех сторон и принимать эффективные решения.
💬 Потом гости обсудят кейсы с лидерами команд из СберАналитики, Госуслуг, Okko, Магнит OMNI, СОГАЗ и AGIMA — когда нестандартные решения дали бизнесу профит в деньгах, людях и нервах.
🥂 В финале — зона для нетворкинга с вкусной едой, напитками и кальянами (потому что критическое мышление лучше тренируется с бокалом в руках).
Событие закрытое и эксклюзивное — только для руководителей IT-команд, CEO, CTO, CPO, PO, которые принимают стратегические решения в крупных компаниях.
Мы создаем атмосферу для обмена опытом между лидерами рынка, поэтому все заявки тщательно модерируются.
Количество мест ограничено — успейте зарегистрироваться по ссылке: https://clck.ru/3GqLWF
Критическое мышление в эпоху быстрого принятия решений
Руководитель в IT каждый день решает задачи разной степени адовости. Иногда решения принимаются на автомате, по шаблону — потому что так быстрее. Но чем выше ставка, тем важнее уметь включать критическое мышление.
28 марта на офлайн-митапе разберемся, как руководителям в IT не попадать в когнитивные ловушки и принимать решения осознанно. Организаторы из AGIMA обещают много экспертов и классную программу:
🔥 В первой части вечера бизнес-тренер Алексей Кельин научит сомневаться во всем — в хорошем смысле. Он покажет инструменты, которые помогут руководителям критически оценивать свои мысли, видеть ситуацию со всех сторон и принимать эффективные решения.
💬 Потом гости обсудят кейсы с лидерами команд из СберАналитики, Госуслуг, Okko, Магнит OMNI, СОГАЗ и AGIMA — когда нестандартные решения дали бизнесу профит в деньгах, людях и нервах.
🥂 В финале — зона для нетворкинга с вкусной едой, напитками и кальянами (потому что критическое мышление лучше тренируется с бокалом в руках).
Событие закрытое и эксклюзивное — только для руководителей IT-команд, CEO, CTO, CPO, PO, которые принимают стратегические решения в крупных компаниях.
Мы создаем атмосферу для обмена опытом между лидерами рынка, поэтому все заявки тщательно модерируются.
Количество мест ограничено — успейте зарегистрироваться по ссылке: https://clck.ru/3GqLWF
🔥5❤3👍3
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня обсудим максимально полезный инструмент для командной работы — Git Hooks.
При совместной разработке кода часто возникают различия в стилях: кто-то забывает переносы строк, кто-то — запятые. Конечно, можно поручить форматирование CI/CD, но это займет больше времени. Git Hooks выполняются на рабочей станции разработчика и легко настраиваются.
Для чего могут быть полезны Git Hooks:
⚙️ Форматирование кода —
⚙️ Статический анализ кода —
⚙️ Запуск тестов
Все это можно запускать в определенные моменты:
⚙️ Перед и после
⚙️ Перед и после
⚙️ Перед и после других команд гита
Давайте рассмотрим на примере добавления команды на форматирование кода перед тем, как разработчик сделает коммит.
Пример: добавим команду форматирования кода перед коммитом. Сначала укажем папку для Git Hooks:
Далее создадим эту папку и в ней файл pre-commit. Посмотрим на его наполнение:
Тут мы не просто не вызываем наш метод, но и смотрим на его результат. Если он ничего не поменял, то выведем, что все хорошо, в обратном случае попросим пользователя сделать коммит еще раз.
Во второй части мы перенесем этот скрипт на Dart.
Делитесь в чате: используете ли вы Git Hooks в своих проектах? Какие команды запускаете?
При совместной разработке кода часто возникают различия в стилях: кто-то забывает переносы строк, кто-то — запятые. Конечно, можно поручить форматирование CI/CD, но это займет больше времени. Git Hooks выполняются на рабочей станции разработчика и легко настраиваются.
Для чего могут быть полезны Git Hooks:
dart format
dart analyze
Все это можно запускать в определенные моменты:
git commit
git push
Давайте рассмотрим на примере добавления команды на форматирование кода перед тем, как разработчик сделает коммит.
Пример: добавим команду форматирования кода перед коммитом. Сначала укажем папку для Git Hooks:
git config core.hooksPath .githooks/
Далее создадим эту папку и в ней файл pre-commit. Посмотрим на его наполнение:
#!/usr/bin/env bash
#dart format
printf "\e[33;1m%s\e[0m\n" 'Running dart format'
result=$(dart format .)
result_lines=$(echo "$result" | wc -l)
if [ "$result_lines" -gt 1 ]; then
echo "$result"
printf "\e[31;1m%s\e[0m\n" 'Dart format applied changes, please recommit'
exit 1
fi
echo "$result"
printf "\e[32;1m%s\e[0m\n" 'Finished running dart format'
Тут мы не просто не вызываем наш метод, но и смотрим на его результат. Если он ничего не поменял, то выведем, что все хорошо, в обратном случае попросим пользователя сделать коммит еще раз.
Во второй части мы перенесем этот скрипт на Dart.
Делитесь в чате: используете ли вы Git Hooks в своих проектах? Какие команды запускаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3