| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import 'dart:async';
- import 'dart:convert';
- import 'package:amap_location/location_option.dart';
- import 'package:amap_location/location_result_entity.dart';
- import 'package:flutter/services.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 _streamController;
- Stream<LocationResultEntity> get locationStream => _streamController.stream;
- AmapLocation(){
- _channel.setMethodCallHandler(platformCallHandler);
- _streamController = 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 (_streamController == null) {
- _streamController = StreamController<LocationResultEntity>.broadcast();
- }
- return await _channel.invokeMethod(
- 'startLocation', options?.toMap() ?? LocationOption().toMap());
- }
- Future<void> disposed() async {
- if (!_streamController.isClosed) {
- await _streamController.close();
- }
- _streamController = null;
- return await _channel.invokeMethod("closeLocation");
- }
- Future<void> platformCallHandler(MethodCall call) async {
- try {
- if (call.method == "location") {
- LocationResultEntity entity =
- LocationResultEntity().fromJson(jsonDecode(call.arguments));
- _streamController.add(entity);
- }
- } catch (ex) {
- print('Unexpected error: $ex');
- }
- return null;
- }
- }
|