| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import 'dart:async';
- import 'dart:convert';
- import 'package:flutter/services.dart';
- import './bean/location_option.dart';
- import './bean/location_result_entity.dart';
- // IOS:
- // add info.plist GaoDeAppKey
- class AmapLocation {
- static const MethodChannel _channel = const MethodChannel('amap_location');
- static final AmapLocation _instance = AmapLocation();
- static AmapLocation get instance => _instance;
- StreamController _locationStreamController;
- Stream<LocationResultEntity> get locationStream =>
- _locationStreamController.stream;
- AmapLocation() {
- _channel.setMethodCallHandler(platformCallHandler);
- _locationStreamController =
- StreamController<LocationResultEntity>.broadcast();
- }
- static Future<String> get platformVersion async {
- final String version = await _channel.invokeMethod('getPlatformVersion');
- return version;
- }
- Future<void> startLocation({LocationOption options}) async {
- if (_locationStreamController == null) {
- _locationStreamController =
- StreamController<LocationResultEntity>.broadcast();
- }
- return await _channel.invokeMethod(
- 'startLocation', options?.toMap() ?? LocationOption().toMap());
- }
- Future<void> disposed() async {
- if (!_locationStreamController.isClosed) {
- await _locationStreamController.close();
- }
- return await _channel.invokeMethod("closeLocation");
- }
- Future<void> platformCallHandler(MethodCall call) async {
- try {
- if (call.method == "location") {
- LocationResultEntity entity =
- LocationResultEntity().fromJson(jsonDecode(call.arguments));
- _locationStreamController.add(entity);
- }
- } catch (ex) {
- print('Unexpected error: $ex');
- }
- return null;
- }
- Future<void> appleNavigate(double lat, double lng,String title) async {
- return await _channel.invokeMethod('appleNavigate', {
- 'lat': lat,
- "lng": lng,
- "title": title,
- });
- }
- }
|