amap_location.dart 1.8 KB

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