TGViewer
Channel Public Channel
Flutter. Много

Flutter. Много

@flutter_amiga

Заказать мобильную разработку: https://amiga.ru//?utm_source=tg
Заказать рекламу в канале @amiga_agency_bot

Новости Flutter-разработки, дайджесты мероприятий, личный опыт.
Subscribers
2.96K
Photos
460
Videos
24
Links
284

Showing posts older than #269 · Back to latest

Older Posts 20 shown
Post #268 3.04K
Hola, Amigos! На связи команда Amiga.

Docker Hub прекратил работу на территории России. Это значит, что многие из нас могут столкнуться с проблемами при доступе к важным контейнерам и образам.

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

1️⃣ Зеркала и альтернативы: Используйте зеркала Docker Hub или локальные репозитории для хранения и получения образов.

Рабочее проверенное решение: huecker.io

2️⃣ VPN: Для обхода блокировки можно воспользоваться VPN-сервисами. Это поможет получить доступ к Docker Hub с российской территории.

3️⃣ Локальные решения: Разверните свои собственные локальные Docker-реестры, чтобы хранить и управлять образами в пределах вашей инфраструктуры.

Если у вас есть другие идеи или решения, делитесь в чате!

Будем рады любой информации, которая поможет всем нам продолжать работать эффективно и без перебоев 🙂
  • 🔥 10
  • 👍 5
  • ❤ 4
  • 💘 1
Post #267 2.84K
Hola, Amigos! На связи Вова Зевеке, сегодня расскажу про пакет pod_player.

Ранее в своей статье я пробовал собрать кастомный видеоплеер с помощью пакета youtube_player_flutter. По итогу упёрся в баги, которые нельзя было решить возможностями Flutter. И нашёл замену!

Сам по себе pod_player не сильно отличается от большинства других пакетов для разработки видеоплеера. Однако, он куда меньше тормозит и быстрее грузит видео.

Сначала настроим необходимые разрешения. Для Android, нужно добавить в AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET"/>


Если видео использует URL-адреса http, то добавляем:

<application
- - -
- - - - - -
android:usesCleartextTraffic="true"


Для iOS проводим настройку в файле Info.plist:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>


Пакет добавляет виджет PodVideoPlayer со свойствами:

- controller (PodPlayerController, контроллер для управления видеплеером);
- podProgressBarConfig (PodProgressBarConfig, настройка вёрстки полоски прогресса);
- videoThumbnail (DecorationImage?, превью видео);
- alwaysShowProgressBar (bool, определяет, будет ли всегда отображаться полоска прогресса);
- onToggleFullScreen (Future<void> Function(bool)?, коллбек при переходе плеера в полноэкранный режим);
- onLoading (Widget Function(BuildContext)?, определяет отображаемый виджет при загрузке видео);
- onVideoError (Widget Function()?, определяет отображаемый виджет при ошибке в видео);
- overlayBuilder (Widget Function(OverLayOptions)?, позволяет сделать кастомный интерфейс видеоплеера).

Чтобы плеер проигрывал определённое видео, нужно приложить ссылку на него в виде файла, веб-ссылки, youtube-id, ассет в приложении.

Код с примером пользования youtube-id:

@override
void initState() {
controller = PodPlayerController(
playVideoFrom: PlayVideoFrom.youtube(
widget.videoId,
),
)..initialise();
…
}
…
body: PodVideoPlayer(controller: controller),
…


Всем хорошего кода! Делитесь в чате своим опытом.
  • 👍 8
  • 🔥 7
  • 👏 4
  • 🤩 2
  • 💘 1
Post #266 2.65K
Макросы Dart: повышение уровня абстракции разработки

Hola, Amigos! Недавно прошла конфа Google I/O 2024, на которой было представлено множество новинок, но сегодня поговорим о нашумевшей фиче — Макросы Dart. Кто не смотрел прямой эфир, сейчас расскажем, в чем соль.

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

На конференции анонсировали предварительную версию радикально нового подхода к сериализации и десериализации JSON: макроса JsonCodable.

Как это работает? Откуда взялся метод toJson() (и сопутствующий ему конструктор fromJson())?

Это экспериментальная реализация новой системы макросов, призванной упростить работу разработчиков. Когда компилятор Dart видит аннотацию @JsonCodable(), он немедленно находит определение макроса JsonCodable в реальном времени и начинает его выполнять. Вот как работает макрос:

1️⃣ Создайте новый класс - новую конструкцию языка, которая позволяет добавлять новые объявления к существующим классам.
2️⃣ Прочитайте определение класса Vehicle, данное разработчиком, и определите, что у него есть два поля - description и wheels.
3️⃣ Добавьте новую сигнатуру метода toJson в класс дополнения.
4️⃣ Заполните тело метода toJson, чтобы обработать сериализацию полей description и wheels.

Всё это происходит без задержек и интегрировано в существующие рабочие процессы разработчиков, такие как горячая перезагрузка, как показано в скринкасте.

Как вам такие новости? Делитесь в чате своими мыслями.
  • 👍 19
  • 💘 11
  • ❤ 5
Post #265 2.53K
Hola, Amigos! Сегодняшнего дня с нетерпением ждали все IT компании. Подготовка к Рейтингу Рунета, без преувеличений, длится целый год. Апрель выдался сумасшедшим, потому что нововведения сыпались на почту каждый день. В прямом смысле, хотелось рвать волосы на голове🤪

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

Что ж, перейдем к нашим победам:

1 место среди молодых разработчиков мобильных приложений

1 место среди молодых digital-подрядчиков крупнейших компаний

2 место среди разработчиков мобильных приложений для оптовой и розничной торговли

3 место среди компаний по анализу и тестированию мобильных приложений

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

5 место среди разработчиков приложений для услуг

6 место среди мобильных разработчиков Москвы

21 место среди мобильных разработчиков России

Мы сильно поднялись в этом году! Невероятно гордимся командой и радуемся результатам рейтинга 2024 года. Принимаем ваши поздравления в комментариях и поднимаем бокальчик шампанского!

Страшно представить, что будет на 4 году Amiga. Страшно интересно!😏
  • 👏 20
  • ❤ 10
  • 🔥 8
Post #264 2.38K
Рейтинг мобильных разработчиков России по выручке в 2023 году

Hola, Amigos! Ну что, пошла жара! Рейтинг Digirate опубликовал результаты ииии… *барабанная дробь*

Amiga заняла 8 место среди компаний мобильных разработчиков по выручке в 2023 году ❤️

Это не может не радовать, ведь нам всего 3 года! Честно признаться, когда мы погружаемся в рутину, то думаем, что за 3 года можно было и лучше. Но когда мы смотрим на цифры, а цифры никогда не лгут, то понимаем, что растем космически!

И останавливаться не собираемся. Уверенно стремимся в ТОП!

А если хочешь вместе с нами, то присоединяйся к нашей команде.
  • 👍 24
  • 🎉 4
  • 💘 3
Post #263 3.13K
Обзор Flutter Flow

Hola, Amigos! Сегодня мы поговорим о инструменте Flutter Flow, который поможет вам ускорить и упростить разработку мобильных приложений на Flutter.

Что такое Flutter Flow

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

Преимущества инструмента

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

Практический пример использования

Представим, что у вас есть задача создать экран входа в приложение. С помощью Flutter Flow вы можете:

1️⃣ Добавить элементы ввода для имени пользователя и пароля.

2️⃣ Создать кнопку «Войти», которая будет активировать процесс аутентификации.

3️⃣ Настроить внешний вид элементов, выбрав подходящие цвета, шрифты и стили.

Все это можно сделать в несколько простых шагов, без необходимости писать код.

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

Делитесь в чате, используете ли вы Flutter Flow в работе?
  • 👎 33
  • 👍 9
  • 💩 7
  • ❤ 2
  • 💘 2
Post #261 3.21K
14 мая Google I/O

Hola, Amigos! Грядет одно из самых ожидаемых событий в мире технологий — конференция Google I/O! В этом году она пройдет с 14 по 17 мая и обещает множество захватывающих новостей и анонсов для мобильных разработчиков ⚙️

Google I/O — это отличная возможность погрузиться в мир новых технологий, продуктов и инноваций от Google. Для флаттер-разработчиков это особенно важное событие, так как на конференции обычно анонсируются значительные обновления и нововведения в экосистеме Google, включая инструменты и ресурсы для разработки приложений на Flutter.

Конференция проходит офлайн, но у нас будет возможность узнать о новых возможностях и инструментах Flutter в прямом эфире. Регистрируйтесь на официальном сайте Google I/O 🙂
  • 💘 4
  • 👌 3
  • ❤ 2
  • 👍 1
  • 🍓 1
Post #260 3.15K
Полезные посты и статьи апреля, которые вы могли пропустить

Hola, Amigos! Собрали для вас в одну подборку все полезные посты и статьи апреля, чтобы вам было чем заняться на майских праздниках 🙂

Выбирайте, что вам интересно, и переходите по ссылкам.

🔵 Записки мобильного разработчика (пакет visibility_detector)

🔵 Обзор pin_code_fields

🔵 Полезный пакет для управления яркостью экрана

🔵 Home Widget для iOS

🔴 Вакансия Middle Flutter-разработчика в Amiga

🔵 Полезный пакет для управления зависимостями в приложении

🔵 Apple усиливает защиту данных пользователей с 1 мая

Полезные пакеты вы всегда найдёте по тэгу #пп.

Всем хорошего кода! ❤️
  • 👍 4
  • ❤ 3
  • ❤‍🔥 2
  • 👏 1
  • 💘 1
Post #259 3.38K
Apple усиливает защиту данных пользователей с 1 мая

Hola, Amigos! Apple ввел новые требования о файле PrivacyInfo.xcprivacy, которое направлено на то, чтобы разработчики явно указывали, какие данные собирают их приложения и для каких целей эти данные используются.

До 1 мая 2024 года все приложения должны быть обновлены и должны содержать файл PrivacyInfo.xcprivacy с корректно заполненной информацией о конфиденциальности.

⚙️ Большинство библиотек уже включают в себя Privacy Manifest. Проверьте обновления для используемых вами библиотек.

Создание файла PrivacyInfo.xcprivacy:

1️⃣ File -> New -> File
2️⃣ Выберите шаблон App Privacy
3️⃣ Выберите таргет вашего проекта или SDK
4️⃣ Назовите файл PrivacyInfo и сохраните

Заполнение файла PrivacyInfo.xcprivacy:

1️⃣ Указать тип данных из письма от Apple (например, местоположение, контакты, фотографии и т.д.)
2️⃣ Найти категорию в документации
3️⃣ Описать, как эти данные используются вашим приложением и обосновать необходимость сбора этих данных

Советы по заполнению:

🔵 Убедитесь, что вы указываете все данные, которые собираете, а также цель сбора данных.
🔵 Будьте честны. Это поможет избежать проблем с проверкой приложения.
🔵 Если вы не знаете, с какой целью в приложении используется определённая категория, вы можете найти в коде конкретные методы.

1 мая уже совсем близко, поэтому советуем убедиться, что вы обновили свои приложения. Всем хорошего кода! 🙂
  • 👍 13
  • 🔥 4
  • ❤ 2
  • 💘 1
Post #258 2.65K
Hola, Amigos! На связи Саша Чаплыгин, Flutter dev Amiga. Сегодня расскажу про пакет get_it для управления зависимостями в приложении. Он основан на паттерне «Service Locator», что позволяет создавать и регистрировать зависимости в централизованном контейнере и получать доступ к ним из любой части приложения.

Покажу, как использовать пакет на примере регистрации синглтона.


/// code above
runApp(const VnApp());
}, (e, s) async {});
}

class VnApp extends StatefulWidget {
const VnApp({super.key});

@override
State<VnApp> createState() => _VnAppState();
}

class _VnAppState extends State<VnApp> {
GetIt getIt = GetIt.instance;


Затем используем MultiRepositoryProvider и RepositoryProvider из пакета flutter_bloc для того, чтобы мы смогли обратиться к синглтону из любой части приложения. Переменная router у нас отвечает за навигацию с пакетом go_router.


MultiRepositoryProvider(
providers: [
RepositoryProvider(create: (context) => getIt),
RepositoryProvider(create: (context) => router),
],


И в initState «регистрируем» синглтон.


getIt.registerSingleton(router);
var storage = StorageRepository();
getIt.registerSingleton<StorageRepository>(storage);


Теперь, находясь на любой странице приложения, мы можем обратиться к нужному нам репозиторию с помощью context.read<GetIt>().get<…>().


class MainPage extends StatelessWidget {
const MainPage({super.key});

@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => MainBloc(
pageState: PageState(),
mainRepository: context.read<GetIt>().get<MainRepository>(),
profileRepository: context.read<GetIt>().get<ProfileRepository>(),
),


Get It — надежный инструмент для управления зависимостями в ваших приложениях Flutter, обеспечивая удобство, эффективность и чистоту кода.

Пишите о вашем опыте с Get It в чате!
  • 👎 30
  • ❤ 9
  • 👍 8
  • 🔥 3
  • 💩 3
  • 🥰 1
  • 💘 1
Post #257 2.91K
Вакансия Middle Flutter-разработчика в Amiga

Hola, Amigos! Наша команда находится в поисках Flutter-разработчика. Может быть, это именно ты — наш дорогой подписчик?

Что нужно делать:
⚙️ верстать экраны и реализовывать анимации;
⚙️ писать бизнес-логику для компонентов;
⚙️ подключать приложения к API;
⚙️ заниматься интеграцией со сторонними сервисами.

Что мы предлагаем:
⚙️ лофт-офис в центре Москвы;
⚙️ гибрид или удаленка;
⚙️ крупные заказчики и интересные кейсы;
⚙️ оформление по ТК РФ.

Мы подходим друг другу, если ты хочешь быть частью молодой команды с амбициозными целями и большими планами!

Знакомьтесь с вакансией по ссылке и откликайтесь! Не забудьте указать в сопроводительном письме, что узнали о вакансии из Flutter. Много 🙂

Присоединяйся к нашей команде ❤️
  • 👍 6
  • ❤ 2
  • 🔥 2
  • 💘 2
Post #256 2.85K
Home Widget для iOS

Hola, Amigos! На связи Сергей Климович, Mobile Team Lead агентства заказной разработки Amiga. Ранее мы вас знакомили с Home Widget для Android, теперь поговорим про iOS.

Рассмотрим, как WidgetKit можно интегрировать в существующий проект Flutter. В конце статьи вас ждет краткий обзор того, как может выглядеть стилизованная и полностью реализованная версия этой функции с помощью Movie Picker.

Переходите по ссылке и читайте статью. Пишите в чате об опыте работы с Home Widget!
  • 🔥 13
  • 👍 5
  • 💘 2
  • ❤ 1
Post #255 3.18K
Записки мобильного разработчика

Hola, Amigos! На связи Владимир Зевеке, Flutter dev Amiga. Ранее я рассказывал о том, как интегрировать штрих-коды в приложение Flutter. Сегодня хочу поделиться пакетом screen_brightness, который помогает управлять яркостью экрана. В моём случае, этот виджет понадобился для более эффективной работы другого пакета barcode.

Обратите внимание, что screen_brightness работает только на реальных устройствах, на эмуляторе пакет функционировать не будет⚙️

Давайте перейдем к практике: в нашем приложении есть страница, которая должна быть всегда яркой на 70%. Если при переходе на нее экран тусклый, то мы должны поднять яркость до тех самых 70%.

Сделаем это в отдельном методе, который мы будем вызывать в initState().

double brightness = 1.0;

@override
void initState() {
initBrightness();
super.initState();
}


Future<void> initBrightness() async {
brightness = await FlutterScreenWake.brightness;
if (brightness < 0.7) {
await FlutterScreenWake.setBrightness(0.7);
}
}


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

return Material(
child: PopScope(
onPopInvoked: (value) async {
await FlutterScreenWake.setBrightness(brightness);
},
child: Scaffold(
appBar: AppBar(
backgroundColor: const Color(0xFF1A1A18),
leading: InkWell(
onTap: () async {
await FlutterScreenWake.setBrightness(brightness);
if (mounted) {
Navigator.of(context).pop();
}
},
<…>
),
),
body: <…>,
),
),
);


Таким образом мы можем изменять по своему усмотрению системные настройки яркости в приложении⚙️

Пишите в чате, если было полезно!
  • 🔥 13
  • 👍 6
  • ❤ 3
  • 💩 2
  • 🥰 1
  • 💘 1
Post #254 3.31K
Обзор pin_code_fields

Hola, Amigos! С вами Владимир Зевеке, Flutter dev Amiga. Сегодня расскажу про пакет pin_code_fields и его применение на практике.

Пакет полезен для авторизации в приложении по номеру телефона. Я использвовал пакет в NDA проекте из сферы здоровья. Но авторизация по одноразовому коду также часто встречается в приложениях банков, e-com, услуг доставки и др.

Переходите на Habr и читайте статью! Дайте знать, если будет полезно 🙂

И делитесь в чате, в каких проектах вы использовали пакет pin_code_fields?
  • 👍 11
  • ❤ 4
  • 💩 3
  • 🔥 2
  • 💘 1
Post #253 3.8K
Записки мобильного разработчика

Hola, Amigos! На связи Саша Чаплыгин, Flutter-dev агентства продуктовой разработки Amiga. Сегодня мы вновь займемся практикой! 🙂

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

В новой статье на Habr я рассказал о том, как определить положение объекта на экране с помощью пакета visibility_detector. Это может быть полезно, когда мы хотим понять, виден тот или иной виджет на экране в данный момент или нет.

Читайте по ссылке и делитесь в чате о своем опыте применения пакета⚙️
  • 🔥 14
  • 👍 10
  • 💘 3
  • 💩 2
Post #252 3.53K
Полезные посты и статьи марта, которые вы могли пропустить

Hola, Amigos! На выходных провожаем март, и поэтому заранее для вас собрали всё самое интересное в этом месяце. Выбирайте тему и переходите по ссылке.

1️⃣ Обновления Flutter 3.19

2️⃣ Все на BOOST

3️⃣ Виджет MaterialApp для создания графического интерфейса в стиле material design

4️⃣ Кейс: Приложение для АЗС за 2 месяца

5️⃣ Полезный пакет safe_device

Полезные пакеты вы всегда найдёте по тэгу #пп.

Всем хорошего кода! 🙂
  • 👍 2
  • 💘 2
  • ❤ 1
Post #251 3.17K
Hola, Amigos! Сегодня расскажем, чем полезен пакет safe_device.

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

Особенности и функции пакета:

⚙️ Позволяет определить, происходит ли выполнение кода на реальном устройстве или в эмуляторе.

⚙️ Можно получить доступ к информации о платформе устройства, такой как операционная система, версия и другие характеристики.

⚙️ Позволяет проверить доступность различных функций устройства, таких как камера, GPS, Bluetooth и многое другое.

Рекомендуем всем внедрить #пп в свои проекты и убедиться в его эффективности!

Делитесь в чате используете ли вы пакетом safe_device?
  • 🔥 7
  • ❤ 2
  • 💘 2
Post #250 2.53K
Кейс: Мобильное приложение для сети АЗС за 2 месяца

Hola, Amigos! На связи Amiga — агентство продуктовой разработки. Сегодня расскажем, как мы перенесли мобильное приложение с Битрикс на Flutter за 2 месяца, сохранив позиции в сторах и многотысячную базу клиентов.

Наш клиент — Хакасская топливная компания (ХТК), у которой уже было свое мобильное приложение на Битрикс с программой лояльности и с базой пользователей более 70 000 человек.

Битрикс прекратил поддержку мобильного модуля, и мы оперативно перенесли мобильное приложение на Flutter 🦋

Нам удалось сохранить большую базу клиентов ХТК и их доверие к компании. Удержать позиции в App Store и Google Play. А также улучшить дизайн интерфейса.

Читайте подробности в статье на vc.

Мы всегда рады вашей обратной связи! ❤️
  • 🔥 13
  • 🏆 7
  • ❤ 6
  • 💘 1
Post #249 3.01K
Обзор MaterialApp

Hola, Amigos! Сегодня расскажем про виджет MaterialApp, который есть в каждом проекте. Он предназначен для создания графического интерфейса в стиле material design.

MaterialApp располагается в самом верху глобального дерева виджетов.

Material Design — это дизайн-система, разработанная Google, которая позволяет сделать универсальный дизайн для разных платформ и устройств.

Основные поля настроек локализации MaterialApp:

– locale ([Locale?] определяет языковой стандарт для виджета «Localizations»;
– localizationsDelegates ([Iterable<LocalizationsDelegate<dynamic>>?] делегаты, которые определяют все локализованные ресурсы для виджета «Localizations»);
– supportedLocales ([Iterable<Locale>] список языков, для которых локализовано это приложение).

Основные поля настроек темы MaterialApp:

– Настройка темы приложения (theme ([ThemeData?] визуальные свойства по умолчанию, а также отедельно для других режимов darkTheme, highContrastTheme, highContrastDarkTheme)
– Устанавливает текущую тему themeMode ([ThemeMode?]).

Основные поля настроек навигации MaterialApp:

– routes ([Map<String, Widget Function(BuildContext)>] таблица маршрутизации верхнего уровня приложения);
– initialRoute ([String?] имя первого отображаемого маршрута, если создан навигатор).

Можно вызвать конструктор MaterialApp.router(), который позволит настроить routerConfig, что бывает полезно при подключении кастомной навигации, например, с применением пакета go_router.

Ну и всем знакомые поля:

– debugShowCheckedModeBanner ([bool] включает небольшой баннер «DEBUG» в режиме отладки);
– home ([Widget?] виджет для маршрута приложения по умолчанию).

А вы используете MaterialApp или CupertinoApp? Рассказывайте в чате.
  • 👍 10
  • 🔥 3
  • 👏 2
  • 🍓 1
  • 💘 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →