Hola, Amigos! Наконец можем поделиться с вами записью доклада Паши Гершевича, нашего Flutter Team Lead, с конференции CrossConf о кроссплатформенной разработке и трендам IT, которая прошла 8 ноября в Москве🔥
Напомним, тема доклада: «UI логгера на Flutter: Как сделать работу с логами удобнее и быстрее?».
В своем выступлении он рассказал о Dev Screen, зачем он нужен и как его внедрять, а также о том, как эффективно с ним работать при релизе приложения. Доклад особенно полезен Flutter-разработчикам🙂
Запись выступления ждет вас по ссылке. Ставьте реакции, если понравился доклад Паши, и делитесь в чате, какая тема выступления вас бы точно заинтересовала!
Напомним, тема доклада: «UI логгера на Flutter: Как сделать работу с логами удобнее и быстрее?».
В своем выступлении он рассказал о Dev Screen, зачем он нужен и как его внедрять, а также о том, как эффективно с ним работать при релизе приложения. Доклад особенно полезен Flutter-разработчикам
Запись выступления ждет вас по ссылке. Ставьте реакции, если понравился доклад Паши, и делитесь в чате, какая тема выступления вас бы точно заинтересовала!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤5👍5
Hola, Amigos! Наконец готовы анонсировать крупнейшую конференцию BOOST'25 для владельцев и руководителей веб-студий, digital-агентств и продакшенов.
Мероприятие пройдет 23-24 сентября на площадке Школы управления Сколково⚙️
Приходите послушать топовых экспертов, предпринимателей и визионеров из различных областей и компаний⚙️
*️⃣ 1 200 участников
*️⃣ 150+ спикеров
В этом году на BOOST 7 тематических потоков:
☁️ Управление бизнесом
☁️ Продажи, маркетинг и PR
☁️ Дизайн и креатив
☁️ Управление проектами (✅ новый поток)
☁️ Digital-маркетинг
☁️ Управление разработкой
☁️ Управление и тренды в интернет-маркетинге
Что вас ждёт на конференции помимо насыщенной докладной части:
🍎 Мастермайнды и мастер-классы с лидерами отрасли:
вы сможете получить ценные знания и навыки, которые помогут вашему агентству выйти на новый уровень.
🍎 Выставка продуктов и решений: ознакомьтесь с новейшими инструментами и технологиями, которые помогут оптимизировать процессы в вашем бизнесе.
А ещё:
🥝 Нетворкинг: возможность встретиться с коллегами, обменяться идеями и наладить полезные контакты с профессионалами из разных регионов.
🥝 Секретные бары и афтепати до последнего гостя.
📌 Билеты доступны в трех категориях и их количество ограничено, регистрация на BOOST'25 по ссылке.
P.S. Дарим промокод на скидку 10% — amiga10
Мероприятие пройдет 23-24 сентября на площадке Школы управления Сколково
Приходите послушать топовых экспертов, предпринимателей и визионеров из различных областей и компаний
В этом году на BOOST 7 тематических потоков:
Что вас ждёт на конференции помимо насыщенной докладной части:
вы сможете получить ценные знания и навыки, которые помогут вашему агентству выйти на новый уровень.
А ещё:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Hola, Amigos! Уже в воскресенье встретимся на крупнейшем IT-забеге страны — RUNIT. В этом году будет 12 000 участников и более 5 000 бегунов. Если не участвуете в забеге, все равно приходите на мероприятие, там будем мы!
На нашей площадке в этом году:
⚙️ команда — будем ждать вас, чтобы обсудить идею для стартапа или спеть «Верхом на звезде» до начала концерта;
⚙️ тент и пуфики — перевести дух в тени и расслабиться;
⚙️ кольцеброс — прошлогодняя звезда! Всем так понравилось играть, что мы решили повторить и в этом году. Победителей ждут вкусные подарки и фирменные носки от наших партнеров Babushkasocks.
Приходите, побеждайте и забирайте крутые призы!❤️
На нашей площадке в этом году:
Приходите, побеждайте и забирайте крутые призы!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥2😍2
Hola, amigos!
Ждем всех на RUNIT!
У нас много подарков и веселые активности
Приходите на стенд Amiga
Ждем всех на RUNIT!
У нас много подарков и веселые активности
Приходите на стенд Amiga
Hola, Amigos! Сегодня расскажем, как сэкономить время при работе в VSCode.
Добавьте в
⚙️
⚙️
⚙️
⚙️
⚙️
Эти настройки помогают поддерживать чистый, организованный, готовый к продакшну код без лишней рутины.
Добавьте в
settings.json
:
{
"editor.formatOnSave": true,
"[dart]": {
"editor.formatOnSave": false,
"editor.inlayHints.enabled": "off",
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit",
}
}
}
editor.formatOnSave
: автоматически форматирует Dart-файлы;"[dart]": { "editor.formatOnSave": false }
: отключает или включает дефолтный Dart Formatter при сохранении файла;editor.inlayHints.enabled: "off"
: отключает подсказки типов (inlay hints);source.fixAll
: автоматически фиксит мелкие ошибки (добавляет const, корректирует код);source.organizeImports
: упорядочивает и удаляет неиспользуемые импорты;Эти настройки помогают поддерживать чистый, организованный, готовый к продакшну код без лишней рутины.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍5❤2
Hola, Amigos! Спасибо всем, кто забежал на нашу площадку на крупнейшем IT-забеге страны RUNIT'25. Нас буквально не отпускали — со всеми поболтали, тысячу раз сыграли в кольцеброс, обменялись идеями и зарядились энергией на год вперед!
⚙️ Кольцеброс снова стал звездой, а брендированные подарки — шары от МосШар и носки от наших друзей из Babushkasocks быстро разлетелись между крутыми участниками.
Спасибо всем, кто был с нами в этом году, а остальных ждем в следующем — мы готовим кое-что очень классное❤️
Спасибо всем, кто был с нами в этом году, а остальных ждем в следующем — мы готовим кое-что очень классное
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥4
Как экспортировать Canvas в изображение без рендера на экране
Иногда нужно сохранить нарисованное в
Иногда нужно сохранить нарисованное в
CustomPainter
в виде PNG, но не хочется (или невозможно) отображать его на экране. Можно это сделать, используя Canvas и PictureRecorder
: Future<Uint8List> toImage(BuildContext context, Size size) async {
final devicePixelRatio = MediaQuery.of(context).devicePixelRatio;
final recorder = ui.PictureRecorder();
final canvas = Canvas(recorder);
// Масштабируем канвас под плотность пикселей
canvas.scale(devicePixelRatio);
final painter = MyPainter(); // <-- ваш кастомный painter
painter.paint(canvas, size);
// Считаем итоговый размер
final width = (size.width * devicePixelRatio).floor();
final height = (size.height * devicePixelRatio).floor();
// Получаем изображение
final imageResult = await recorder
.endRecording()
.toImage(width, height);
// Конвертируем в PNG
final byteData = await imageResult.toByteData(
format: ui.ImageByteFormat.png,
);
return byteData!.buffer.asUint8List();
}
👍17🤬2❤1
Как создавать качественные интерфейсы, где все отступы и размеры кратные 8 px
Что это даст? По сути, «8» — это простая и эффективная система: все элементы дизайна (ширина, высота, внутренние/внешние отступы) кратны 8 px. Такой подход упрощает верстку, делает интерфейс визуально гармоничным и облегчает работу команды.
С помощью AppSpacer.pX() вы задаете отступы и размеры строго по системе 8: 8, 16, 24, 32. Делитесь в чате, пробовали такой метод?
Что это даст? По сути, «8» — это простая и эффективная система: все элементы дизайна (ширина, высота, внутренние/внешние отступы) кратны 8 px. Такой подход упрощает верстку, делает интерфейс визуально гармоничным и облегчает работу команды.
class AppSpacer extends StatelessWidget {
final double? width;
final double? height;
const AppSpacer._({Key? key, this.width, this.height}) : super(key: key);
factory AppSpacer.p32() => const AppSpacer._(height: 32, width: 32);
factory AppSpacer.p24() => const AppSpacer._(height: 24, width: 24);
factory AppSpacer.p16() => const AppSpacer._(height: 16, width: 16);
factory AppSpacer.p8() => const AppSpacer._(height: 8, width: 8);
@override
Widget build(BuildContext context) {
return SizedBox(width: width, height: height);
}
}
С помощью AppSpacer.pX() вы задаете отступы и размеры строго по системе 8: 8, 16, 24, 32. Делитесь в чате, пробовали такой метод?
👍6❤4🤔4🤡3🔥1
Hola, Amigos! Сегодня расскажем, как открыть системные настройки, если пользователь отказался от уведомлений (особенно на iOS)
Если пользователь отключил уведомления на iOS, повторно показать системный prompt уже нельзя. Единственный вариант — перенаправить его в настройки приложения вручную.
Вариант 1 — через url_launcher
Вариант проще — с permission_handler:
Делитесь в чате, использовали эти методы?
Если пользователь отключил уведомления на iOS, повторно показать системный prompt уже нельзя. Единственный вариант — перенаправить его в настройки приложения вручную.
Вариант 1 — через url_launcher
import 'package:url_launcher/url_launcher.dart';
Future<void> openSettings() async {
Uri url;
if (defaultTargetPlatform == TargetPlatform.iOS) {
url = Uri.parse('app-settings:');
} else if (defaultTargetPlatform == TargetPlatform.android) {
url = Uri.parse('package:uly.vlog.diary');
} else {
throw Exception('Unsupported platform');
}
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
throw 'Could not launch $url';
}
}
Вариант проще — с permission_handler:
import 'package:permission_handler/permission_handler.dart';
openAppSettings();
Делитесь в чате, использовали эти методы?
🔥5❤2👍1
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня разберемся, как нам установить релизное приложение на iOS 🙂
Для начала нам нужен файл с разрешением
Для сборки через консоль нужно пойти по пути
Для сборки через Xcode из Organizer нажимаем правой кнопкой мыши на архив, выбираем “Show in Finder”, а дальше, как и с архивом из консоли, пока не дойдем до
Обращаю внимание, что устройство должно быть зарегистрировано в App Store Connect на аккаунт, которому принадлежит приложение.
Пишите в чате, использовали такой метод?
Для начала нам нужен файл с разрешением
`.app`
или .ipa
— для этого собираем iOS привычным способом. Тут все зависит от вас — flutter build ios --release или flutter build ipa, а может даже архивирование через Xcode. Для IPA делать нам уже ничего не надо, а вот для других способов нам нужно достать файл:Для сборки через консоль нужно пойти по пути
/build/ios/archive/Runner.xcarchive
, там нажать правой кнопкой мыши и в меню выбрать “Показать содержимое пакета”, файл будет по пути /Products/Applications/Runner.app.Для сборки через Xcode из Organizer нажимаем правой кнопкой мыши на архив, выбираем “Show in Finder”, а дальше, как и с архивом из консоли, пока не дойдем до
Runner.app.
Вся остальная работа проста. Нужно открыть Xcode, пойти по пути Windows -> Devices and Simulators -> Ваше устройство. Там будет графа Installed Apps, куда мы и добавим файл — можно либо перетащить его, либо нажать на плюсик и выбрать из системы. После этого нужно немного подождать завершения установки.Обращаю внимание, что устройство должно быть зарегистрировано в App Store Connect на аккаунт, которому принадлежит приложение.
Пишите в чате, использовали такой метод?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2