Есть ли способ добавить GOOGLE MAPS inf FLUTTER WEB?
Я изучаю флаттер-веб и хочу добавить в него карту Google. Хотя я использовал карту Google с помощью google_maps_flutter в приложении flutter-app, но это работает для Android и iOS.
4 ответа
Во-первых, вам понадобятся ключи API Google Map. Перед инициализацией у вас должен быть проект в вашей облачной платформе Google. Создайте его, если у вас его нет.
Затем найдите "Карта Javascript" и включите ее. В противном случае ключ api выдаст сообщение об ошибке, в котором говорится, что картографический сервис Google не активирован.
Инициализируем google map js sdk в нашем index.html
файл, расположенный внутри web
папка вашего дерева проекта.
<script src="https://maps.googleapis.com/maps/api/js?key=<YOUR-API-KEY>"></script>
И импортируйте google_maps вpubspec.yaml
файл:
dependencies:
google_maps: ^3.4.1
А вот как вы создаете виджет карты Google.
import 'dart:html';
import 'package:flutter/material.dart';
import 'package:google_maps/google_maps.dart';
import 'dart:ui' as ui;
Widget getMap() {
String htmlId = "7";
// ignore: undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(htmlId, (int viewId) {
final myLatlng = LatLng(1.3521, 103.8198);
final mapOptions = MapOptions()
..zoom = 10
..center = LatLng(1.3521, 103.8198);
final elem = DivElement()
..id = htmlId
..style.width = "100%"
..style.height = "100%"
..style.border = 'none';
final map = GMap(elem, mapOptions);
Marker(MarkerOptions()
..position = myLatlng
..map = map
..title = 'Hello World!'
);
return elem;
});
return HtmlElementView(viewType: htmlId);
}
htmlId
- уникальный идентификатор для имени элемента div
ui.platformViewRegistry.registerViewFactory
- создает веб-просмотр в dart
LatLng(1.3521, 103.8198)
- класс, который принимает широту и долготу местоположения
DivElement()
- класс для создания дайв-элемента
GMap
- создает элемент карты Google
Marker()
- красный значок, который отображается в вашем LatLng на карте Google
HtmlElementView()
- создает представление платформы для Flutter Web
Подробнее о пакете google_maps можно найти здесь:
https://pub.dev/packages/google_maps
Краткое руководство по его использованию можно найти здесь:
https://dev.to/happyharis/flutter-web-google-maps-381a
Надеюсь это поможет. Спасибо
Недавно был выпущен новый официальный плагин: https://pub.dev/packages/google_maps_flutter_web. Он уже работает с существующим плагином google_maps_flutter, просто добавьте свой скрипт api в
web/index.html
. Обратите внимание на его ограничения на данный момент - нет поворота, нет панели инструментов карты, нет функции моего местоположения.
Чтобы добавить ключ API в веб-приложение, отредактируйте
index.html
файл в
web
. Добавьте ссылку на сценарий JavaScript для Карт в разделе заголовка с вашим ключом API.
<head>
<base href="/">
<meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="A new Flutter project.">
<!-- iOS meta tags & icons -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="google_maps_in_flutter">
<link rel="apple-touch-icon" href="icons/Icon-192.png">
<!-- TODO: Add your Google Maps API key here -->
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR-KEY-HERE"></script>
<title>google_maps_in_flutter</title>
<link rel="manifest" href="manifest.json">
</head>
Теперь пришло время получить карту на экране. Обновлять
lib/main.dart
следующим образом:.
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
void main() => runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late GoogleMapController mapController;
final LatLng _center = const LatLng(45.521563, -122.677433);
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Maps Sample App'),
backgroundColor: Colors.green[700],
),
body: GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: _center,
zoom: 11.0,
),
),
),
);
}
}
Я еще не тестировал его, но если вам нужно кросс-платформенное решение, возможно, вы можете попробовать: https://pub.dev/packages/flutter_google_maps