Привет, это Анна, Team Lead Flutter-команды Friflex
Сегодня открываю месяц навигации на этом канале — весь октябрь вместе с коллегами буду делиться опытом интеграции карт в мобильные приложения. Начну с Яндекс Карт.
Чтобы подключить Яндекс Карты к приложению на Flutter, установим плагин yandex_mapkit. Это можно сделать в три шага:
Шаг 1. Подготавливаем и добавляем зависимости в pubspec.yaml
Выполняем команду flutter pub get
Шаг 2. Настраиваем Yandex MapKit на Android
1. Открываем файл android/build.gradle и указываем вариант нативной библиотеки full/lite:
2. В файле MainApplication.java или MainApplication.kt указываем локализацию и ключ API:
3. В файле AndroidManifest.xml указываем разрешения:
Шаг 3. Настраиваем Yandex MapKit на iOS
1. Открываем файл AppDelegate.swift и указываем локализацию и API ключ:
2. В файле Podfile раскомментируем строку platform :ios, '12.0' и здесь же добавляем конфигурацию нативной библиотеки full/lite:
Готово, все зависимости настроены. Можно начинать писать код для отображения карты, но об этом я расскажу в следующий раз 🤞
#howtoflutter
Сегодня открываю месяц навигации на этом канале — весь октябрь вместе с коллегами буду делиться опытом интеграции карт в мобильные приложения. Начну с Яндекс Карт.
Чтобы подключить Яндекс Карты к приложению на Flutter, установим плагин yandex_mapkit. Это можно сделать в три шага:
Шаг 1. Подготавливаем и добавляем зависимости в pubspec.yaml
flutter:
sdk: flutter
yandex_mapkit: ^4.1.0
Выполняем команду flutter pub get
Шаг 2. Настраиваем Yandex MapKit на Android
1. Открываем файл android/build.gradle и указываем вариант нативной библиотеки full/lite:
yandexMapkit.variant=<YOUR_DESIRED_VARIANT>
2. В файле MainApplication.java или MainApplication.kt указываем локализацию и ключ API:
MapKitFactory.setLocale("YOUR_LOCALE");
MapKitFactory.setApiKey("YOUR_API_KEY");
3. В файле AndroidManifest.xml указываем разрешения:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Шаг 3. Настраиваем Yandex MapKit на iOS
1. Открываем файл AppDelegate.swift и указываем локализацию и API ключ:
YMKMapKit.setApiKey("YOUR_API_KEY")
2. В файле Podfile раскомментируем строку platform :ios, '12.0' и здесь же добавляем конфигурацию нативной библиотеки full/lite:
ENV['YANDEX_MAPKIT_VARIANT'] = '<YOUR_DESIRED_VARIANT>'
Готово, все зависимости настроены. Можно начинать писать код для отображения карты, но об этом я расскажу в следующий раз 🤞
#howtoflutter
❤8🔥5👍2
Media is too big
VIEW IN TELEGRAM
Привет, это Юра, Tech Lead Flutter-команды Friflex
Меня часто спрашивают, как настроить и установить Flutter Aurora. А вот так!
Записал полную инструкцию. Сегодня подробно покажу, как установить Aurora SDK.
🔗 Скачать Aurora SDK
Что делать дальше, смотрите в следующем выпуске.
#howtoflutter
Меня часто спрашивают, как настроить и установить Flutter Aurora. А вот так!
Записал полную инструкцию. Сегодня подробно покажу, как установить Aurora SDK.
Что делать дальше, смотрите в следующем выпуске.
#howtoflutter
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Cегодня — день интернета в России! Надеемся, у вас достаточно стабильное соединение, чтобы сохранить эти 10 классных пакетов для работы с интернетом:
1. http
Простой и популярный пакет для выполнения HTTP-запросов (GET, POST и других). Отлично подходит для базовых задач, таких как загрузка данных с API или отправка форм.
🔗 http на pub.dev
2. dio
Мощный пакет для HTTP-запросов: с перехватчиками, отменой запросов и управлением тайм-аутами.
🔗 dio на pub.dev
3. graphql_flutter
Идеальное решение для интеграции GraphQL-запросов в приложение, если ваш бекэнд работает с GraphQL.
🔗 graphql_flutter на pub.dev
4. connectivity_plus
Пакет для мониторинга состояния сети. Поможет отслеживать тип подключения (Wi-Fi, мобильные данные) и доступ в интернет.
🔗 connectivity_plus на pub.dev
5. flutter_cache_manager
Этот пакет помогает управлять кэшированием файлов и данных.
🔗 flutter_cache_manager на pub.dev
6. web_socket_channel
Пакет для работы с WebSocket-соединениями. Идеально подходит для реального времени, например, в чатах или системах уведомлений.
🔗 web_socket_channel на pub.dev
7. retrofit
Клиент REST API, вдохновленный популярным библиотекой Retrofit из мира Android. Помогает сократить количество шаблонного кода.
🔗 retrofit на pub.dev
8. flutter_downloader
Этот пакет упрощает скачивание и отображение прогресса. Хорошая штука, если в приложении нужно загружать файлы.
🔗 flutter_downloader на pub.dev
9. firebase_storage
Пакет для интеграции с Firebase и хранения медиафайлов в облаке. Идеальный вариант, если ваш основной бэкенд — это Firebase.
🔗 firebase_storage на pub.dev
10. flutter_inappwebview
Пакет для работы с веб-контентом. Будет очень полезен, если вы собираетесь внедрить WebView или использовать встроенный браузер.
🔗 flutter_inappwebview на pub.dev
Всем быстрого интернета💜
1. http
Простой и популярный пакет для выполнения HTTP-запросов (GET, POST и других). Отлично подходит для базовых задач, таких как загрузка данных с API или отправка форм.
2. dio
Мощный пакет для HTTP-запросов: с перехватчиками, отменой запросов и управлением тайм-аутами.
3. graphql_flutter
Идеальное решение для интеграции GraphQL-запросов в приложение, если ваш бекэнд работает с GraphQL.
4. connectivity_plus
Пакет для мониторинга состояния сети. Поможет отслеживать тип подключения (Wi-Fi, мобильные данные) и доступ в интернет.
5. flutter_cache_manager
Этот пакет помогает управлять кэшированием файлов и данных.
6. web_socket_channel
Пакет для работы с WebSocket-соединениями. Идеально подходит для реального времени, например, в чатах или системах уведомлений.
7. retrofit
Клиент REST API, вдохновленный популярным библиотекой Retrofit из мира Android. Помогает сократить количество шаблонного кода.
8. flutter_downloader
Этот пакет упрощает скачивание и отображение прогресса. Хорошая штука, если в приложении нужно загружать файлы.
9. firebase_storage
Пакет для интеграции с Firebase и хранения медиафайлов в облаке. Идеальный вариант, если ваш основной бэкенд — это Firebase.
10. flutter_inappwebview
Пакет для работы с веб-контентом. Будет очень полезен, если вы собираетесь внедрить WebView или использовать встроенный браузер.
Всем быстрого интернета
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3👍2
Привет, это Анна, Team Lead Flutter-команды Friflex
Продолжаю рассказывать, как интегрировать карты в мобильные приложения. Сегодня разберемся, как создать список точек, которые будут отображаться маркерами на карте
Используем класс
🔴 icon принимает экземпляр PlacemarkIcon, который позволяет создавать простые и составные иконки
🔴 text дает возможность отображать кастомный текст на маркере
🔴 onTap и onDrag задают взаимодействия с маркером
Создадим список точек Point, которые необходимо отобразить маркерами на карте:
Для каждой отдельной точки создаем экземпляр маркера
Список объектов готов. В следующий раз расскажу, как отобразить их на карте.
#howtoflutter
Продолжаю рассказывать, как интегрировать карты в мобильные приложения. Сегодня разберемся, как создать список точек, которые будут отображаться маркерами на карте
yandex_mapkit. Используем класс
PlacemarkMapObject. Он принимает разные параметры, которые помогают создать уникальный дизайн маркера и настроить нужные пользовательские взаимодействия:Создадим список точек Point, которые необходимо отобразить маркерами на карте:
List<Point> get points {
return const [
Point(latitude: 55.755864, longitude: 37.617698),
Point(latitude: 51.507351, longitude: -0.127696),
Point(latitude: 41.887064, longitude: 12.504809),
];
}
Для каждой отдельной точки создаем экземпляр маркера
PlacemarkMapObject.
List<PlacemarkMapObject> get mapObjects => List.generate(
points.length,
(index) => PlacemarkMapObject(
mapId: MapObjectId('MapObject $index'),
point: points[index],
opacity: 1,
text: PlacemarkText(
text: '$index',
style: const PlacemarkTextStyle(size: 14, color: Colors.white),
),
icon: PlacemarkIcon.single(
PlacemarkIconStyle(
image: BitmapDenoscriptor.fromAssetImage('assets/icons/map_point.png'),
scale: 2,
),
),
onTap: (mapObject, point) {
// действие при нажатии на маркер
},
onDrag: (mapObject, point) {
// действие при перетягивании маркера
},
),
);
Список объектов готов. В следующий раз расскажу, как отобразить их на карте.
#howtoflutter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3🤩2
Media is too big
VIEW IN TELEGRAM
Юра, Tech Lead Flutter-команды Friflex, вновь на связи!
Как установить Aurora SDK, я уже рассказал. Переходим к настройке эмулятора для Flutter. Просто, как дважды с два, с этой видеоинструкцией🖱
Как установить Aurora SDK, я уже рассказал. Переходим к настройке эмулятора для Flutter. Просто, как дважды с два, с этой видеоинструкцией
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥4👍2🤩1
Какой канал про Flutter без рубрики #пакет_недели, подумали мы, и вот первый выпуск!
Сегодня рассказываем про Skeletonizer. Этот пакет позволяет создавать скелетоны — упрощенные версии интерфейса, которые пользователь видит, пока контент загружается.
Главное про Skeletonizer:
🔸 Он автоматически создает скелетоны. Пакет анализирует дерево виджетов и формирует анимацию загрузки, повторяя их форму, размеры и расположение.
🔸 Он поддерживает кастомизацию. Skeletonizer позволяет настроить анимацию, цвет и форму скелетона.
🔸 Его легко интегрировать. Можно просто обернуть виджет в Skeletonizer и сразу получить эффект анимации.
🔸 Он поддерживает большинство стандартных виджетов. Например, Container, Text, или ListView.
Как использовать
Создадим анимацию загрузки для карточки профиля:
По умолчанию Skeletonizer создает анимацию, похожую на движущийся светлый блик по заливке виджета. Но ее можно кастомизировать с помощью разных параметров:
Например:
Режим скелетона можно включать и выключать в зависимости от состояния загрузки данных:
❗️ Если виджетов много, Skeletonizer может привести к проблемам с производительностью, особенно на слабых устройствах.
🔥— попробуем красивые скелеты Skeletonizer
🙅— вставим из старых проектов
Сегодня рассказываем про Skeletonizer. Этот пакет позволяет создавать скелетоны — упрощенные версии интерфейса, которые пользователь видит, пока контент загружается.
Главное про Skeletonizer:
Как использовать
Создадим анимацию загрузки для карточки профиля:
import 'package:flutter/material.dart';
import 'package:skeletonizer/skeletonizer.dart';
class ProfileSkeletonDemo extends StatelessWidget {
final bool isLoading = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(noscript: Text('Skeleton Profile Example')),
body: Center(
child: Skeletonizer(
enabled: isLoading,
child: Card(
child: ListTile(
leading: CircleAvatar(radius: 30),
noscript: Text('John Doe'),
subnoscript: Text('Flutter Developer'),
),
),
),
),
);
}
}
void main() => runApp(MaterialApp(home: ProfileSkeletonDemo()));
По умолчанию Skeletonizer создает анимацию, похожую на движущийся светлый блик по заливке виджета. Но ее можно кастомизировать с помощью разных параметров:
backgroundColor: задает основной цвет скелетона.highlightColor: задает цвет блика.duration: продолжительность одного цикла анимации.borderRadius: радиус закругления углов. Например:
Skeletonizer(
enabled: true,
duration: Duration(seconds: 1), // Продолжительность анимации
backgroundColor: Colors.grey[200], // Цвет фона скелетона
highlightColor: Colors.grey[100], // Цвет анимированной заливки
child: YourWidget(),
);
Режим скелетона можно включать и выключать в зависимости от состояния загрузки данных:
Skeletonizer(
enabled: isLoading, // Условие включения скелетона
child: isLoading ? Placeholder() : ContentWidget(),
);
🔥— попробуем красивые скелеты Skeletonizer
🙅— вставим из старых проектов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3🤩2
Привет, это Анна, Team Lead Flutter-команды Friflex
Я уже рассказала, как подключить библиотеку
Библиотека
YandexMap нужно поместить на страницу, где должна находиться карта. Настройки в YandexMap позволяют управлять внешним видом карты и ее функциями. Вот некоторые из них:
1️⃣
2️⃣
3️⃣
4️⃣
Чтобы отобразить маркеры объектов на карте, нужно передать их список в поле
Готово! В следующий раз рассмотрим, как и зачем использовать кластеризацию объектов.
#howtoflutter
Я уже рассказала, как подключить библиотеку
yandex_mapkit, чтобы внедрить карту в мобильное приложение, и как создать список точек, которые будут отображаться маркерами на карте.Библиотека
yandex_mapkit предлагает виджет карты, YandexMap, и разные инструменты для работы с ней. Сегодня покажу, как отобразить карту и добавить маркеры объектов на нее.YandexMap нужно поместить на страницу, где должна находиться карта. Настройки в YandexMap позволяют управлять внешним видом карты и ее функциями. Вот некоторые из них:
nightModeEnabled включает темную темуzoomGesturesEnabled разрешает масштабировать картуonCameraPositionChanged обрабатывает перемещения положения картыonUserLocationAdded позволяет получить местоположение пользователя Чтобы отобразить маркеры объектов на карте, нужно передать их список в поле
mapObjects виджета YandexMap. YandexMap(
mapObjects: mapObjects,
zoomGesturesEnabled: true,
nightModeEnabled: true,
onMapCreated: (controller) {
// действие при создании карты
},
onCameraPositionChanged: (cameraPosition, reason, finished) {
// действие при изменении положения камеры
},
onUserLocationAdded: (view) {
// действие при определении местоположения пользователя средствами Яндекс карты
},
),
Готово! В следующий раз рассмотрим, как и зачем использовать кластеризацию объектов.
#howtoflutter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3👍2
Media is too big
VIEW IN TELEGRAM
Переходим к установке и настройке Aurora-CLI
На связи Юра, Tech Lead Flutter-команды Friflex, с подробной инструкцией, как это сделать.
📎 Как установить Aurora SDK
📎 Как настроить эмулятор для Flutter
На связи Юра, Tech Lead Flutter-команды Friflex, с подробной инструкцией, как это сделать.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3👍3
Привет, это Анна, Team Lead Flutter-команды Friflex
Это четвертый пост из серии о том, как интегрировать карты в мобильные приложения. В прошлый раз я рассказывала, как отобразить маркеры объектов на карте. Сегодня поговорим про кластеризацию объектов.
Иногда маркеры расположены слишком близко и при масштабировании карты наслаиваются друг на друга. При нажатии на один маркер в этом случае может вызываться обработчик из соседнего. Решить эти проблемы поможет кластеризация маркеров.
Кластеры — это объекты карты, которые позволяют при уменьшении масштаба объединить близлежащие маркеры в один объект и отобразить количество объединенных точек.
Для реализации кластеризации в
🔴 mapId — уникальный идентификатор объекта
🔴 placemarks — список маркеров, которые в случае изменения масштаба объединяются в кластеры
🔴 radius — минимальное расстояние между точками на карте, которые остаются разделенными и не входят в кластеры
🔴 minZoom — минимальный уровень масштабирования, при котором отображаются кластеры
Изменить внешний вид кластера можно через обратный вызов
Класс
Чтобы изменить внешний вид в
Параметр
Чтобы отобразить маркеры с кластеризацией на карте, объект
В следующий раз разберем, как управлять стилизацией карты и менять внешний вид внутренних объектов: дорог, ландшафтных зон, мест общего пользования.
#howtoflutter
Это четвертый пост из серии о том, как интегрировать карты в мобильные приложения. В прошлый раз я рассказывала, как отобразить маркеры объектов на карте. Сегодня поговорим про кластеризацию объектов.
Иногда маркеры расположены слишком близко и при масштабировании карты наслаиваются друг на друга. При нажатии на один маркер в этом случае может вызываться обработчик из соседнего. Решить эти проблемы поможет кластеризация маркеров.
Кластеры — это объекты карты, которые позволяют при уменьшении масштаба объединить близлежащие маркеры в один объект и отобразить количество объединенных точек.
Для реализации кластеризации в
yandex_mapkit существует специальный класс — ClusterizedPlacemarkCollection. У него есть обязательные параметры:Изменить внешний вид кластера можно через обратный вызов
onClusterAdded(). Он вызывается каждый раз, когда после изменения масштаба карты создаются новые кластеры или удаляются старые.Cluster — объект кластера, который хранит в себе данные об объединенных маркерах, их количестве и своем внешнем виде.Класс
Cluster реализует метод copyWith(), который обеспечивает иммутабельность текущему объекту кластера. С помощью этого метода можно вернуть новый экземпляр класса. От текущего он будет отличаться параметрами, которые заданы в copyWith().Чтобы изменить внешний вид в
onClusterAdded(), нужно вернуть экземпляр Cluster с измененным через copyWith() параметром appearance. Параметр
appearance типизирован как PlacemarkMapObject, поэтому принцип построения иконки и внешнего вида у кластера такой же, как у обычного маркера.Чтобы отобразить маркеры с кластеризацией на карте, объект
ClusterizedPlacemarkCollection нужно передать в поле mapObjects виджета YandexMap.В следующий раз разберем, как управлять стилизацией карты и менять внешний вид внутренних объектов: дорог, ландшафтных зон, мест общего пользования.
#howtoflutter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3👍2
Рассказали в блоге на Хабре про самые важные пакеты в экосистеме Dart и Flutter и как вообще оценивается их важность. Давайте обсудим 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Самые важные пакеты в экосистеме Dart и Flutter на Pub 2024
Компания Very Good Ventures провела исследование и опубликовала рейтинг самых важных пакетов в экосистеме Dart и Flutter. Рассказываем, какие пакеты вошли в топ — от независимых разработчиков,...
🔥6❤3👍2
Media is too big
VIEW IN TELEGRAM
Продолжаем устанавливать Flutter Aurora вместе с Юрой, Tech Lead Flutter-команды Friflex.
📎 Как установить Aurora SDK
📎 Как настроить эмулятор для Flutter
📎 Как установить и настроить Aurora-CLI
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥5👍3👎1
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Кофе наготове, эмулятор запущен, а код как всегда полон сюрпризов. Будни наступили! Предлагаем добавить в них немного юмора.
Как проходит день Flutter-разработчика🖱
Как проходит день Flutter-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3👍1😁1🤣1
Привет, это Анна, Team Lead Flutter-команды Friflex
Это пятый пост из серии о том, как интегрировать карты в мобильные приложения. В прошлый раз я рассказывала про кластеризацию объектов. Сегодня рассмотрим, как управлять стилизацией карты.
Библиотека
Каждый вложенный json в массиве должен формироваться по ключам:
🔸 tags — набор тегов объектов
🔸 types — типы объектов, к которым должны применяться стили, например, линии, точки, зоны
🔸 elements — составляющие объекта, например, подпись объекта, иконка или текст, и его область
🔸 stylers — параметры стиля объекта, например, видимость, цвет, размер
Чтобы получить нужный стиль, комбинируйте параметры объектов. Например, можно скрыть все объекты торговли и общественного питания и подсветить названия дорог красным цветом.
Больше параметров стилизации описано в документации.
В следующий раз разберем, как построить пешеходный маршрут от точки А до точки Б и отобразить его на карте.
#howtoflutter
Это пятый пост из серии о том, как интегрировать карты в мобильные приложения. В прошлый раз я рассказывала про кластеризацию объектов. Сегодня рассмотрим, как управлять стилизацией карты.
Библиотека
yandex_mapkit предлагает такую возможность при помощи метода setMapStyle у контроллера карты YandexMapController. Метод принимает строку json-массива с заданными параметрами стилей карты. Каждый вложенный json в массиве должен формироваться по ключам:
Чтобы получить нужный стиль, комбинируйте параметры объектов. Например, можно скрыть все объекты торговли и общественного питания и подсветить названия дорог красным цветом.
await mapController.setMapStyle('''
[
{
"tags": {
"any": ["shopping", "food_and_drink"]
},
"stylers": {
"visibility": "off"
}
},
{
"tags": {
"all": ["road"]
},
"elements": ["label.text"],
"stylers": {
"color": "0xFF5757"
}
}
]
''');Больше параметров стилизации описано в документации.
В следующий раз разберем, как построить пешеходный маршрут от точки А до точки Б и отобразить его на карте.
#howtoflutter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍5❤3