Hibok
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

184 行
5.2 KiB

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