Hibok
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

167 lines
4.4 KiB

  1. import 'dart:math';
  2. import 'package:chat/data/UserData.dart';
  3. import 'package:chat/map/google_map_location_picker.dart';
  4. import 'package:chat/map/location_result.dart';
  5. import 'package:chat/models/group_info_model.dart';
  6. import 'package:flutter/cupertino.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:geolocator/geolocator.dart';
  9. import 'package:google_maps_flutter/google_maps_flutter.dart';
  10. import 'package:permission_handler/permission_handler.dart';
  11. import '../../data/constants.dart';
  12. import '../../generated/i18n.dart';
  13. import '../../utils/CustomUI.dart';
  14. class TravelButlerPage extends StatefulWidget {
  15. final GroupInfoModel groupInfoModel;
  16. TravelButlerPage({Key key, this.groupInfoModel}) : super(key: key);
  17. @override
  18. State<StatefulWidget> createState() {
  19. return TravelButlerPageState();
  20. }
  21. }
  22. class TravelButlerPageState extends State<TravelButlerPage> {
  23. LocationResult startResult;
  24. LocationResult endResult;
  25. double distance=0.0;
  26. double distanceB=0.0;
  27. @override
  28. void initState() {
  29. super.initState();
  30. }
  31. @override
  32. void dispose() {
  33. // MessageMgr().off('Update Group Info', updateGroupInfo);
  34. super.dispose();
  35. }
  36. @override
  37. Widget build(BuildContext context) {
  38. Widget appBar = AppBar(
  39. backgroundColor: AppColors.NewAppbarBgColor,
  40. title: Text(
  41. I18n.of(context).travel_butler,
  42. textScaleFactor: 1.0,
  43. style: TextStyle(color: AppColors.NewAppbarTextColor),
  44. ),
  45. // leading: CustomUI.buildCustomLeading(context),
  46. centerTitle: true,
  47. );
  48. return Scaffold(
  49. appBar: appBar,
  50. body: SafeArea(
  51. child: ListView(
  52. children: <Widget>[
  53. InkWell(
  54. child: Text(
  55. I18n.of(context).travel_butler+'起点',
  56. textScaleFactor: 1.0,
  57. style: TextStyle(color: AppColors.NewAppbarTextColor,fontSize: 30),
  58. ),
  59. onTap: () async{
  60. startResult =await _openMap(context);
  61. },
  62. ),
  63. InkWell(
  64. child: Text(
  65. I18n.of(context).travel_butler+'终点',
  66. textScaleFactor: 1.0,
  67. style: TextStyle(color: AppColors.NewAppbarTextColor,fontSize: 30),
  68. ),
  69. onTap: () async{
  70. endResult = await _openMap(context);
  71. },
  72. ),
  73. InkWell(
  74. child: Text(
  75. '距离查询',
  76. textScaleFactor: 1.0,
  77. style: TextStyle(color: AppColors.NewAppbarTextColor,fontSize: 30),
  78. ),
  79. onTap: () async{
  80. if(startResult!=null && endResult!=null){
  81. distanceB =await Geolocator().distanceBetween(startResult.latLng.latitude,startResult.latLng.longitude,endResult.latLng.latitude,endResult.latLng.longitude);
  82. setState(() {
  83. print('开始计算');
  84. distance =getDistance(startResult.latLng.latitude,startResult.latLng.longitude,endResult.latLng.latitude,endResult.latLng.longitude);
  85. });
  86. }else{
  87. print('参数为空');
  88. }
  89. },
  90. ),
  91. // Text('距离为: ${getDistanceStr(distance)}'),
  92. // Text('距离为: ${getDistanceStr(distanceB)}')
  93. Text('距离为: $distance'),
  94. Text('距离为: $distanceB'),
  95. ],
  96. ),
  97. ),
  98. );
  99. }
  100. getDistanceStr(double m){
  101. if(m<1000){
  102. return '${m.toInt()} M';
  103. }else{
  104. return '${(m/1000).toStringAsFixed(2)} KM';
  105. }
  106. }
  107. getDistance(double lat1, double lng1, double lat2, double lng2) {
  108. double radLat1 = rad(lat1);
  109. double radLat2 = rad(lat2);
  110. double a = radLat1 - radLat2;
  111. double b = rad(lng1) - rad(lng2);
  112. double s = 2 *
  113. asin(sqrt(pow(sin(a / 2), 2) +
  114. cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2)));
  115. return s * 6378138.0;
  116. }
  117. double rad(double d) {
  118. return d * pi / 180.0;
  119. }
  120. _openMap(BuildContext context) async {
  121. if (await CustomUI.showPermissionSetting(
  122. context, PermissionGroup.location, I18n.of(context).open_location)) {
  123. return LocationPicker.pickLocation(
  124. context, 'AIzaSyAb9JNtW0BEZ_qLeDg87ZhvxSmZply-7hU',
  125. initialCenter: LatLng(UserData().latitude, UserData().longitude));
  126. // print('地图结果 ${result}');
  127. // return result;
  128. }
  129. }
  130. }