Flutter Friendly
1.04K subscribers
166 photos
71 videos
1 file
146 links
Канал Friflex о разработке на Flutter. Обновления, плагины, полезные материалы — превращаем знания в реальный опыт, доступный каждому разработчику.

🔗 Наш канал для разработчиков: @friflex_dev
🔗 Канал о продуктовой разработке: @friflex_product
Download Telegram
Привет, это Анна, Team Lead Flutter-команды Friflex

Сегодня открываю месяц навигации на этом канале — весь октябрь вместе с коллегами буду делиться опытом интеграции карт в мобильные приложения. Начну с Яндекс Карт.

Чтобы подключить Яндекс Карты к приложению на 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
Привет, это Анна, Team Lead Flutter-команды Friflex

Продолжаю рассказывать, как интегрировать карты в мобильные приложения. Сегодня разберемся, как создать список точек, которые будут отображаться маркерами на карте yandex_mapkit.

Используем класс PlacemarkMapObject. Он принимает разные параметры, которые помогают создать уникальный дизайн маркера и настроить нужные пользовательские взаимодействия:

🔴 icon принимает экземпляр PlacemarkIcon, который позволяет создавать простые и составные иконки
🔴 text дает возможность отображать кастомный текст на маркере
🔴 onTap и onDrag задают взаимодействия с маркером

Создадим список точек 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: BitmapDescriptor.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
🔥63🤩2
Привет, это Анна, Team Lead Flutter-команды Friflex

Я уже рассказала, как подключить библиотеку yandex_mapkit, чтобы внедрить карту в мобильное приложение, и как создать список точек, которые будут отображаться маркерами на карте.

Библиотека yandex_mapkit предлагает виджет карты, YandexMap, и разные инструменты для работы с ней. Сегодня покажу, как отобразить карту и добавить маркеры объектов на нее.

YandexMap нужно поместить на страницу, где должна находиться карта. Настройки в YandexMap позволяют управлять внешним видом карты и ее функциями. Вот некоторые из них:

1️⃣ nightModeEnabled включает темную тему
2️⃣ zoomGesturesEnabled разрешает масштабировать карту
3️⃣ onCameraPositionChanged обрабатывает перемещения положения карты
4️⃣ 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
Привет, это Анна, Team Lead Flutter-команды Friflex

Это четвертый пост из серии о том, как интегрировать карты в мобильные приложения. В прошлый раз я рассказывала, как отобразить маркеры объектов на карте. Сегодня поговорим про кластеризацию объектов.

Иногда маркеры расположены слишком близко и при масштабировании карты наслаиваются друг на друга. При нажатии на один маркер в этом случае может вызываться обработчик из соседнего. Решить эти проблемы поможет кластеризация маркеров.

Кластеры — это объекты карты, которые позволяют при уменьшении масштаба объединить близлежащие маркеры в один объект и отобразить количество объединенных точек.

Для реализации кластеризации в yandex_mapkit существует специальный класс — ClusterizedPlacemarkCollection. У него есть обязательные параметры:

🔴mapId — уникальный идентификатор объекта

🔴placemarks — список маркеров, которые в случае изменения масштаба объединяются в кластеры

🔴radius — минимальное расстояние между точками на карте, которые остаются разделенными и не входят в кластеры

🔴minZoom — минимальный уровень масштабирования, при котором отображаются кластеры

Изменить внешний вид кластера можно через обратный вызов 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
🔥83👍2
Привет, это Анна, Team Lead Flutter-команды Friflex

Это пятый пост из серии о том, как интегрировать карты в мобильные приложения. В прошлый раз я рассказывала про кластеризацию объектов. Сегодня рассмотрим, как управлять стилизацией карты.

Библиотека yandex_mapkit предлагает такую возможность при помощи метода setMapStyle у контроллера карты YandexMapController. Метод принимает строку json-массива с заданными параметрами стилей карты.

Каждый вложенный json в массиве должен формироваться по ключам:
🔸 tags — набор тегов объектов
🔸 types — типы объектов, к которым должны применяться стили, например, линии, точки, зоны
🔸 elements — составляющие объекта, например, подпись объекта, иконка или текст, и его область
🔸 stylers — параметры стиля объекта, например, видимость, цвет, размер

Чтобы получить нужный стиль, комбинируйте параметры объектов. Например, можно скрыть все объекты торговли и общественного питания и подсветить названия дорог красным цветом.
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👍53
Привет, это Анна, Team Lead Flutter-команды Friflex

В прошлый раз я рассказала, как изменить стиль карты. Сегодня разберем, как построить пешеходный маршрут от точки А до точки Б. Будем использовать инструменты yandex_mapkit.

Чтобы построить маршрут, добавим точки его начала и конца:
static const startPoint = Point(latitude: 55.745797, longitude: 37.605862);
static const endPoint = Point(latitude: 55.752754, longitude: 37.604188);


Библиотека yandex_mapkit предоставляет доступ к классу YandexPedestrian. Его асинхронный метод requestRoutes позволяет получить список возможных пешеходных маршрутов между заданными точками.

Поле points принимает набор точек RequestPoint, которые должны быть включены в маршрут. Начальную и конечную точку необходимо помечать типом RequestPointType.wayPoint.

Помимо этих двух точек можно добавить несколько промежуточных, тогда маршрут будет построен с учетом их посещения. Им следует задавать тип RequestPointType.viaPoint.

Кроме того, можно задать временные параметры timeOptions, такие как время отправления и время прибытия. Также метод принимает параметр avoidSteep, который отвечает за исключение крутых поворотов на пути.
var resultWithSession = await YandexPedestrian.requestRoutes(
timeOptions: TimeOptions(departureTime: DateTime.now()),
avoidSteep: true,
points: [
RequestPoint(
point: startPoint,
requestPointType: RequestPointType.wayPoint,
),
RequestPoint(
point: endPoint,
requestPointType: RequestPointType.wayPoint,
),
]);


Вот и построили маршрут. Получили не только геометрию пути, которую можно на карте построить с помощью линий PolylineMapObject, но и различные полезные метаданные. Например, время в пути и расстояние.

#howtoflutter
5🔥3👍2