| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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;
- }
- }
|