amap_location.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'package:flutter/services.dart';
  4. import './bean/location_option.dart';
  5. import './bean/location_result_entity.dart';
  6. // IOS:
  7. // add info.plist GaoDeAppKey
  8. class AmapLocation {
  9. static const MethodChannel _channel = const MethodChannel('amap_location');
  10. static final AmapLocation _instance = AmapLocation();
  11. static AmapLocation get instance => _instance;
  12. StreamController _locationStreamController;
  13. Stream<LocationResultEntity> get locationStream =>
  14. _locationStreamController.stream;
  15. AmapLocation() {
  16. _channel.setMethodCallHandler(platformCallHandler);
  17. _locationStreamController =
  18. StreamController<LocationResultEntity>.broadcast();
  19. }
  20. static Future<String> get platformVersion async {
  21. final String version = await _channel.invokeMethod('getPlatformVersion');
  22. return version;
  23. }
  24. Future<void> startLocation({LocationOption options}) async {
  25. if (_locationStreamController == null) {
  26. _locationStreamController =
  27. StreamController<LocationResultEntity>.broadcast();
  28. }
  29. return await _channel.invokeMethod(
  30. 'startLocation', options?.toMap() ?? LocationOption().toMap());
  31. }
  32. Future<void> disposed() async {
  33. if (!_locationStreamController.isClosed) {
  34. await _locationStreamController.close();
  35. _locationStreamController=null;
  36. }
  37. return await _channel.invokeMethod("closeLocation");
  38. }
  39. Future<void> platformCallHandler(MethodCall call) async {
  40. try {
  41. if (call.method == "location") {
  42. LocationResultEntity entity =
  43. LocationResultEntity().fromJson(jsonDecode(call.arguments));
  44. _locationStreamController.add(entity);
  45. }
  46. } catch (ex) {
  47. print('Unexpected error: $ex');
  48. }
  49. return null;
  50. }
  51. Future<void> appleNavigate(double lat, double lng,String title) async {
  52. return await _channel.invokeMethod('appleNavigate', {
  53. 'lat': lat,
  54. "lng": lng,
  55. "title": title,
  56. });
  57. }
  58. }