Compare commits

..

10 Commits

Author SHA1 Message Date
WinUser01 ea1ec2c3bf hyzp_ybqx-Commit193:为进行iOS打包进行修改准备
(1)取消支持"x86"模拟器
(2)版本号更新为version: 1.6.5+20250527
7 months ago
WinUser01 419c614ba4 hyzp_ybqx-Commit192:为进行iOS打包进行修改准备
(1)为了开发测试,暂时恢复支持"x86"模拟器,等发布时再取消。
在 R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\android\app\build.gradle 文件中的下面位置添加"x86"支持
        ndk {
            abiFilters "x86", "arm64-v8a", "armeabi", "armeabi-v7a", "mips" // 不支持"x86", "x86_64"模拟器
        }

(2)将 pubspec.yaml 中的路径修改为 macOS 兼容的路径格式(使用 `/` 并指向正确位置):
将文件 R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\pubspec.yaml 中的
  flutter_superplayer:
    path: .\lib\my_flutter_superplayer
修改为:
  flutter_superplayer:
    path: ./lib/my_flutter_superplayer

(3)手动统一项目的组织标识
A、获取R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\android\app\build.gradle中的applicationId
   defaultConfig {
       applicationId "com.flutter.hyzp_ybqx"
   }
B、修改iOS的PRODUCT_BUNDLE_IDENTIFIER,苹果AppID不支持下划线
将文件
R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\ios\Runner.xcodeproj\project.pbxproj中的
com.example.hyzpYibin
全部替换为:com.flutter.hyzpYbqx
7 months ago
WinUser01 8660f34617 hyzp_ybqx-Commit191:为减小发布的apk体积,取消支持"x86"模拟器。版本号更新为 version: 1.6.4+20250521 7 months ago
WinUser01 0a5c013060 hyzp_ybqx-Commit190:为了开发测试,暂时恢复支持"x86"模拟器,等发布时再取消。
已经实现不同区县用户登录后,在“推送交警”页面显示对应单位的公章

潘总,请你确认一下以下清单。20250519潘总已经微信确认过了。

在区县App中加入区县生态环境局公章的名单:
	宜宾市珙县生态环境局.png
	宜宾市筠连生态环境局.png
	宜宾三江新区城乡融合发展局.png
	宜宾市兴文生态环境局.png
	宜宾市叙州生态环境局.png
	宜宾市长宁生态环境局.png

没有公章的区县生态环境局的名单:
	宜宾市翠屏生态环境局.png
	宜宾市高县生态环境局.png
	宜宾市江安生态环境局.png
	宜宾市南溪生态环境局.png
7 months ago
WinUser01 1969f3e142 hyzp_ybqx-Commit189:为了开发测试,暂时恢复支持"x86"模拟器,等发布时再取消。
解决视频播放页面退出后还在获取视频流的问题

R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\lib\widget\my_superplayer.dart

  @override
  void dispose() {
    Playing = false;
    // 云台控制代码:1:停止动作、3:启动雨刷、11:焦距变大、12:焦距变小
    setSphericalCameraDio(id: widget.id, dwip: widget.dwip, cmdCode: 1);
    _playerController.release();  // 必须显示释放视频播放资源,否则即使退出视频播放页面后台还在获取视频流
    super.dispose();
  }
7 months ago
WinUser01 c49207e0d1 hyzp_ybqx-Commit188:版本号更新为version: 1.6.3+20231229。已经基本实现在“点位地图”中添加“导航”功能,能够保存用户选择的默认导航地图。
为啦减小apk包体积,在文件中限定只支持"arm64-v8a","armeabi","armeabi-v7a","mips",不支持"x86_64","x86"模拟器,apk包体积由92.9MB减小到57.6MB
2 years ago
WinUser01 bfb8284bf0 hyzp_ybqx-Commit187:版本号更新为version: 1.6.2+20231229。已经基本实现在“点位地图”中添加“导航”功能,能够保存用户选择的默认导航地图 2 years ago
WinUser01 99cce09b19 hyzp_ybqx-Commit186:已经基本实现在“点位地图”中添加“导航”功能,能够保存用户选择的默认导航地图 2 years ago
WinUser01 67896aef90 hyzp_ybqx-Commit185:解决升级 android-studio-2022.2.1.20-windows.exe 后编译报错问题:
一、flutter运行项目报错-Could not initialize class org.codehaus.groovy.runtime.InvokerHelper-OK
flutter运行项目报错-Could not initialize class org.codehaus.groovy.runtime.InvokerHelper-OK
更改java版本解决方法(对我有效):

1. 在你的项目中,找到android\gradle.properties文件,打开这个文件。内容如下,里面的内容都是在项目构建过程中自动生成的。
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true

2. 在这个gradle.properties文件中增加你的java路径。格式是org.gradle.java.home=C:\\Program Files\\Java\\jdk-11.0.11。于是,gradle.properties文件的内容变为。
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true
org.gradle.java.home=C:\\Program Files\\Java\\jdk-11.0.11

改为这些版本不行:
org.gradle.java.home=c:\\Program Files\\Android\\Android Studio\\jbr
org.gradle.java.home=c:\\Program Files\\Android\\Android Studio\\jre

改为该版本OK:
org.gradle.java.home=c:\\Users\\WinUser01\\.jdks\\jbr_11.0.15_2022-04-19

3. 保存文件。最后flutter run就OK了。

二、SuperPlayerImpl.java 编译报错,解决办法:打开文件 SuperPlayerImpl.java,把报错的4个语句注释掉即可编译通过
s:\Android.bak\Android Studio-2022.x\Android Studio-2022.2.1.20\flutter运行项目报错-Could not initialize class org.codehaus.groovy.runtime.InvokerHelper-OK\hyzp_ybqx-编译报错解决-OK\SuperPlayerImpl-OK.java

R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\lib\my_flutter_superplayer\android\src\main\java\com\tencent\liteav\demo\superplayer\model\SuperPlayerImpl.java:106: ����: �Ҳ�������
                    mLivePlayer.resumeLive();
                               ^
  ����:   ���� resumeLive()
  λ��: ����ΪTXLivePlayer�ı��� mLivePlayer
R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\lib\my_flutter_superplayer\android\src\main\java\com\tencent\liteav\demo\superplayer\model\SuperPlayerImpl.java:504: ����: �Ҳ�������
        mLivePlayer.prepareLiveSeek(domian, bizidNum);
                   ^
  ����:   ���� prepareLiveSeek(String,int)
  λ��: ����ΪTXLivePlayer�ı��� mLivePlayer
R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\lib\my_flutter_superplayer\android\src\main\java\com\tencent\liteav\demo\superplayer\model\SuperPlayerImpl.java:736: ����: �Ҳ�������
            mLivePlayer.resumeLive();
                       ^
  ����:   ���� resumeLive()
  λ��: ����ΪTXLivePlayer�ı��� mLivePlayer
R:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\lib\my_flutter_superplayer\android\src\main\java\com\tencent\liteav\demo\superplayer\model\SuperPlayerImpl.java:811: ����: �Ҳ�������
                mLivePlayer.seek(position);
2 years ago
WinUser01 840a7145ce hyzp_ybqx-Commit184:版本号更新为 version: 1.6.1+20221111。视频播放器已经更新为fijkplayer: ^0.8.8,第一帧加载很快,双击暂停图标会改变,已经实现视频截图功能 3 years ago

@ -41,6 +41,9 @@ android {
targetSdkVersion 29
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
ndk {
abiFilters "arm64-v8a", "armeabi", "armeabi-v7a", "mips" // "x86", "x86_64"
}
}
buildTypes {

@ -1 +1 @@
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":20221111,"versionName":"1.6.1","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":20250521,"versionName":"1.6.4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]

@ -36,6 +36,9 @@
<!-- 请求忽略电池优化,用于后台定时提醒等 -->
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<!-- Permissions options for the `location` group -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:name="com.flutter.hyzp_ybqx.MyApplication"
android:icon="@mipmap/ic_launcher"

@ -8,7 +8,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.android.tools.build:gradle:3.5.4'
}
}

@ -2,3 +2,4 @@ org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
android.enableR8=true
org.gradle.java.home=c:\\Users\\WinUser01\\.jdks\\jbr_11.0.15_2022-04-19

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@ -310,7 +310,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.hyzpYibin;
PRODUCT_BUNDLE_IDENTIFIER = com.flutter.hyzpYbqx;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
@ -438,7 +438,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.hyzpYibin;
PRODUCT_BUNDLE_IDENTIFIER = com.flutter.hyzpYbqx;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
@ -461,7 +461,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.hyzpYibin;
PRODUCT_BUNDLE_IDENTIFIER = com.flutter.hyzpYbqx;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};

@ -66,6 +66,7 @@ class UserInfo {
qx_name_long = '宜宾市' + trim_county(qx_name);
service_tel = '\n服务热线187-8467-8300';
copyright_info = '© ' + qx_name_long + '生态环境局 四川省踏石科技 版权所有' + service_tel;
official_seal = qx_name_long + '生态环境局' + '.png'; //
//
center_latitude = 28.77914; //
center_longitude = 104.644079; //
@ -109,6 +110,11 @@ class UserInfo {
qx_name_long = '宜宾' + qx_name;
copyright_info = '© ' + qx_name_long + '城乡融合发展局 四川省踏石科技\n版权所有,' + service_tel.substring(1);
copyright_info_PinYin = 'YIBIN SANJIANG NEW AREA BLACK SMOKE CAR CAPTURE SYSTEM';
// images14便.png
// r:\FlutterProject\FlutterProject61-hyzp_ybqx_with_ios\hyzp_ybqx\assets\images\.png
official_seal = qx_name_long + '城乡融合发展局' + '.png'; //
//
// coordinate = {latitude: 28.822633806922394, longitude: 104.75964294854222}
center_latitude = 28.822633806922394; //
@ -161,6 +167,7 @@ class UserInfo {
default:
break;
}
print('official_seal = $official_seal'); // official_seal = .png
}
//

@ -7,7 +7,6 @@ import 'dart:math';
import 'package:ai_save_account/ai_save_account.dart';
import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart';
import 'package:camera/camera.dart';
import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart' as crypto;
@ -15,17 +14,13 @@ import 'package:device_info/device_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:hyzp_ybqx/provider/player_region.dart';
import 'UserInfo.dart';
import 'dioFun.dart';
////////////////////////////////////////////
double g_radioImage = 10 / 16; //
double g_radioImage = 10 / 16; //
AudioPlayer playerClick;
AudioPlayer playerClacks;
@ -124,6 +119,52 @@ List listReviewed = [];
bool g_bVoiceRemind = false; //
int g_remindGap = 60; // 60S0
bool g_bSaveDefaultMap = false; //
String g_defaultMapName = ''; //
//
String getMapChsName(String mapName) {
if (mapName.length == 0) {
return '';
}
mapName = mapName.toLowerCase();
String mapKey = '';
String _mapChsName = '';
// mapName key
for (var key in mapChsName.keys) {
// print('$key ${mapChsName[key]}');
if (mapName.indexOf(key) > -1) {
if (mapKey.length == 0 || key.length < mapKey.length) {
mapKey = key;
}
}
}
_mapChsName = mapChsName[mapKey];
if (_mapChsName == null) {
_mapChsName = mapName + (mapName.length > 0 ? '地图' : '');
}
return _mapChsName;
}
// key
Map<String, String> mapChsName = {
'apple': '苹果地图',
'google': '谷歌地图',
'googlego': '谷歌地图轻量版',
'amap': '高德地图',
'baidu': '百度地图',
'waze': '位智地图',
'yandexmaps': 'Yandex地图',
'yandexnavi': 'Yandex导航地图',
'citymapper': '城市地图',
'mapswithme': '离线地图',
'osmand': 'OsmAnd地图',
'doubleGis': 'doubleGis地图',
'tencent': '腾讯地图',
};
// Timer g_remindTimer; //
//
// //
@ -187,6 +228,7 @@ String copyright_info_PinYin = '';
//
double center_latitude = -1; //
double center_longitude = -1; //
String official_seal = ''; //
clear_user_info() {
qx_code = -1;

@ -119,7 +119,7 @@ class _MyAppState extends State<MyApp> {
// g_bVoiceRemind = (null == g_bVoiceRemind) ? false : g_bVoiceRemind; //
g_bVoiceRemind = (null == g_bVoiceRemind) ? true : g_bVoiceRemind; //
// print('g_bVoiceRemind = $g_bVoiceRemind');
g_remindGap = await Storage.getInt('nRemindGap');
g_remindGap = await Storage.getInt('nRemindGap');
g_remindGap = (null == g_remindGap) ? 60 : g_remindGap; // 60S
eventBus.fire(VoiceRemindUpdate('g_bVoiceRemind 数据已更新'));

@ -103,7 +103,7 @@ public class SuperPlayerImpl implements SuperPlayer, ITXVodPlayListener, ITXLive
case TXLiveConstants.PLAY_ERR_NET_DISCONNECT:
case TXLiveConstants.PLAY_EVT_PLAY_END:
if (mCurrentPlayType == SuperPlayerDef.PlayerType.LIVE_SHIFT) { // 直播时移失败,返回直播
mLivePlayer.resumeLive();
// mLivePlayer.resumeLive();
updatePlayerType(SuperPlayerDef.PlayerType.LIVE);
onError(SuperPlayerCode.LIVE_SHIFT_FAIL, "时移失败,返回直播");
updatePlayerState(SuperPlayerDef.PlayerState.PLAYING);
@ -501,7 +501,7 @@ public class SuperPlayerImpl implements SuperPlayer, ITXVodPlayListener, ITXLive
e.printStackTrace();
TXCLog.e(TAG, "playTimeShiftLiveURL: bizidNum error = " + bizid);
}
mLivePlayer.prepareLiveSeek(domian, bizidNum);
// mLivePlayer.prepareLiveSeek(domian, bizidNum);
}
/**
@ -733,7 +733,7 @@ public class SuperPlayerImpl implements SuperPlayer, ITXVodPlayListener, ITXLive
@Override
public void resumeLive() {
if (mCurrentPlayType == SuperPlayerDef.PlayerType.LIVE_SHIFT) {
mLivePlayer.resumeLive();
// mLivePlayer.resumeLive();
}
updatePlayerType(SuperPlayerDef.PlayerType.LIVE);
}
@ -808,7 +808,7 @@ public class SuperPlayerImpl implements SuperPlayer, ITXVodPlayListener, ITXLive
updatePlayerType(SuperPlayerDef.PlayerType.LIVE_SHIFT);
LogReport.getInstance().uploadLogs(LogReport.ELK_ACTION_TIMESHIFT, 0, 0);
if (mLivePlayer != null) {
mLivePlayer.seek(position);
// mLivePlayer.seek(position);
}
}
if (mObserver != null) {

@ -4,8 +4,10 @@ import 'package:flutter_bmfmap/BaiduMap/bmfmap_map.dart';
import 'package:flutter_screenutil/screen_util.dart';
import 'package:hyzp_ybqx/components/commonFun.dart';
import 'package:hyzp_ybqx/components/hyxx_data_handle.dart';
import 'package:map_launcher/map_launcher.dart';
import '../../../components/dioFun.dart';
import '../../../services/Storage.dart';
import 'dwInfoDialog.dart';
import 'dwInfo_data.dart';
@ -20,6 +22,11 @@ class BasicMap extends StatefulWidget {
}
class _BasicMapState extends State<BasicMap> {
//
double destinationLatitude = 28.45382237207785;
double destinationLongitude = 104.7506958256658;
String destinationTitle = '珙县大坪上';
Size screenSize;
BMFMapOptions mapOptions;
BMFMapController myMapController;
@ -32,9 +39,18 @@ class _BasicMapState extends State<BasicMap> {
}
}
List<AvailableMap> availableMaps;
void init() async {
//
availableMaps = await MapLauncher.installedMaps;
}
@override
void initState() {
super.initState();
init();
mapOptions = BMFMapOptions(
//center: BMFCoordinate(39.965, 116.404),//
//30 116.395645038,39.9299857781 -
@ -291,8 +307,17 @@ class _BasicMapState extends State<BasicMap> {
.push(
PageRouteBuilder(
opaque: false,
pageBuilder: (context, animation, secondaryAnimation) =>
dwInfoDialog(id: id, dwIndex: dwIndex, title: title, content: content),
pageBuilder: (context, animation, secondaryAnimation) => dwInfoDialog(
id: id,
dwIndex: dwIndex,
title: title,
content: content,
parentContext: context,
destinationLatitude: double.parse(listCoordinate[1]),
destinationLongitude: double.parse(listCoordinate[0]),
destinationTitle: listDwinfoGetList2[dwIndex]["dwmc"],
availableMaps: availableMaps,
),
),
)
.then((value) async {

@ -1,21 +1,38 @@
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:hyzp_ybqx/components/dioFun.dart';
import 'package:map_launcher/map_launcher.dart';
//import 'package:hyzp_ybqx/widget/player_pro.dart';
import '../../../components/commonFun.dart';
import '../../../services/Storage.dart';
import 'maps_sheet.dart';
//
class dwInfoDialog extends Dialog {
dwInfoDialog({@required this.id, this.title = "", @required this.dwIndex, this.content});
dwInfoDialog({
@required this.id,
this.title = "",
@required this.dwIndex,
this.content,
//
this.parentContext,
this.destinationLatitude,
this.destinationLongitude,
this.destinationTitle,
this.availableMaps,
});
int dwIndex;
String id;
String title;
String content;
bool ret = false;
BuildContext parentContext;
@override
Widget build(BuildContext context) {
getCurrentPosition();
Size mediaSize = MediaQuery.of(context).size;
return WillPopScope(
child: Material(
@ -90,9 +107,9 @@ class dwInfoDialog extends Dialog {
onPressed: () async {
ret = true;
getingDwVideo = false;
Navigator.pop(context, ret); //sRet
navigationMap(context);
},
child: Text("确认"),
child: Text("导航"),
),
RaisedButton(
child: Text("取消"),
@ -115,4 +132,102 @@ class dwInfoDialog extends Dialog {
},
);
}
//
double destinationLatitude = 28.45382237207785;
double destinationLongitude = 104.7506958256658;
String destinationTitle = '珙县大坪上';
double originLatitude;
double originLongitude;
String originTitle = '我的位置';
List<Coords> waypoints = [
// Coords(37.7705112, -122.4108267),
// Coords(37.6988984, -122.4830961),
// Coords(37.7935754, -122.483654),
];
DirectionsMode directionsMode = DirectionsMode.driving;
List<AvailableMap> availableMaps;
// String defaultMapName = 'Amap';
String defaultMapName = g_defaultMapName;
AvailableMap defalutMap;
void getCurrentPosition() async {
print('getCurrentPosition begin');
//
g_bSaveDefaultMap = await Storage.getBool('bSaveDefaultMap');
g_bSaveDefaultMap = (null == g_bSaveDefaultMap) ? false : g_bSaveDefaultMap; //
//
g_defaultMapName = await Storage.getString('defaultMapName');
g_defaultMapName = (null == g_defaultMapName) ? '' : g_defaultMapName; //
defaultMapName = g_defaultMapName;
//
// availableMaps = await MapLauncher.installedMaps; //
if (defaultMapName != null && defaultMapName.length > 0) {
for (var map in availableMaps) {
if (defaultMapName.toLowerCase() == map.mapName.toLowerCase()) {
defalutMap = map;
break;
}
}
}
await Geolocator.getCurrentPosition().then((Position value) {
originLatitude = value.latitude;
originLongitude = value.longitude;
print('value = ${value.toString()}');
// value = Latitude: 28.796201, Longitude: 104.607751
print('getCurrentPosition end');
});
}
navigationMap(BuildContext context) {
print('this.defalutMap = ${defalutMap}');
if (defalutMap != null) {
defalutMap.showDirections(
destination: Coords(
destinationLatitude,
destinationLongitude,
),
destinationTitle: destinationTitle,
origin: originLatitude == null || originLongitude == null
? null
: Coords(originLatitude, originLongitude),
originTitle: originTitle,
waypoints: waypoints,
directionsMode: directionsMode,
);
} else {
MapsSheet.show(
context: parentContext,
onMapTap: (map) {
if (g_bSaveDefaultMap) {
g_defaultMapName = map.mapName;
Storage.setString('defaultMapName', g_defaultMapName);
}
map.showDirections(
destination: Coords(
destinationLatitude,
destinationLongitude,
),
destinationTitle: destinationTitle,
origin: originLatitude == null || originLongitude == null
? null
: Coords(originLatitude, originLongitude),
originTitle: originTitle,
waypoints: waypoints,
directionsMode: directionsMode,
);
},
);
}
Navigator.pop(context, ret); //sRet
}
}

@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:map_launcher/map_launcher.dart';
class MapsSheet {
static show({
@required BuildContext context,
@required Function(AvailableMap map) onMapTap,
}) async {
final availableMaps = await MapLauncher.installedMaps;
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return SafeArea(
child: Column(
children: <Widget>[
Expanded(
child: SingleChildScrollView(
child: Container(
child: Wrap(
children: <Widget>[
for (var map in availableMaps)
ListTile(
onTap: () {
print('map.mapName = ${map.mapName}');
// map.mapName = Amap
Navigator.pop(context);
onMapTap(map);
},
title: Text(map.mapName),
leading: SvgPicture.asset(
map.icon,
height: 30.0,
width: 30.0,
),
),
],
),
),
),
),
],
),
);
},
);
}
}

@ -13,6 +13,7 @@ import 'package:keyboard_avoider/keyboard_avoider.dart';
//
import '../../../components/commonFun.dart';
//import 'package:hyzp_ybqx/widget/player_pro_new.dart';
import '../../../components/dioFun.dart';
import '../../../components/doJSON.dart';
@ -75,6 +76,8 @@ class _LoginPageState extends State<TsjjContentNew> with SingleTickerProviderSta
try_setState(); //
});
print('official_seal = $official_seal');
_widthLeft = _screenWidth / 2;
getListFlields();
@ -123,7 +126,8 @@ class _LoginPageState extends State<TsjjContentNew> with SingleTickerProviderSta
print('_mapTsjjGetTsStatus = $_mapTsjjGetTsStatus');
// getMediaUrl(_mapGetTsjjGetData['pic_url'])
await flustars.WidgetUtil.getImageWH(url: getMediaUrl(_mapGetTsjjGetData['pic_url'])).then((rect) {
await flustars.WidgetUtil.getImageWH(url: getMediaUrl(_mapGetTsjjGetData['pic_url']))
.then((rect) {
if (null != rect) {
_radioImage = rect.height / rect.width;
print("rect = $rect_radioImage = $_radioImage");
@ -915,8 +919,13 @@ class _LoginPageState extends State<TsjjContentNew> with SingleTickerProviderSta
//color: Colors.black12,
decoration: BoxDecoration(
//color: Colors.white,
// image: DecorationImage(
// image: AssetImage("assets/images/jkzx_stamp.png"), fit: BoxFit.contain),
// image: DecorationImage(
// image: AssetImage("assets/images/宜宾市长宁生态环境局.png"), fit: BoxFit.contain),
image: DecorationImage(
image: AssetImage("assets/images/jkzx_stamp.png"), fit: BoxFit.contain),
image: AssetImage("assets/images/" + official_seal), fit: BoxFit.contain),
),
//child:
),

@ -16,6 +16,7 @@ import 'package:hyzp_ybqx/pages/Works/TJXX/tj_data.dart';
import 'package:hyzp_ybqx/pages/tabs/page5_userManager.dart';
import 'package:hyzp_ybqx/pages/tabs/page6_download.dart';
import 'package:hyzp_ybqx/pages/tabs/page7_setRemind.dart';
import 'package:hyzp_ybqx/pages/tabs/page8_defaultMap.dart';
import 'package:hyzp_ybqx/services/EventBus.dart';
import 'package:hyzp_ybqx/widget/JdButton.dart';
import 'package:package_info/package_info.dart';
@ -111,35 +112,35 @@ class _Page4_MyMsicsNewState extends State<Page4_MyMsicsNew>
static onNullFun() {}
Widget _getListTile(
title, {
String leadPath = '',
Color leadColor,
Color textColor,
onTapFun = onNullFun,
onLongPressFun = onNullFun,
size = 16.0,
bool bBadge = false,
Widget trailWidget = const Icon(Icons.arrow_forward_ios),
}) {
title, {
String leadPath = '',
Color leadColor,
Color textColor,
onTapFun = onNullFun,
onLongPressFun = onNullFun,
size = 16.0,
bool bBadge = false,
Widget trailWidget = const Icon(Icons.arrow_forward_ios),
}) {
// print("_getListTile bVoiceRemind = $bVoiceRemind"); // _getListTile bVoiceRemind = false
return Column(
children: <Widget>[
ListTile(
leading: bBadge
? Badge(
position: BadgePosition.topEnd(top: -7, end: -12),
badgeContent: null,
child: Image.asset(
leadPath,
height: ScreenUtil().setHeight(78),
fit: BoxFit.fitHeight,
),
)
position: BadgePosition.topEnd(top: -7, end: -12),
badgeContent: null,
child: Image.asset(
leadPath,
height: ScreenUtil().setHeight(78),
fit: BoxFit.fitHeight,
),
)
: Image.asset(
leadPath,
height: ScreenUtil().setHeight(78),
fit: BoxFit.fitHeight,
),
leadPath,
height: ScreenUtil().setHeight(78),
fit: BoxFit.fitHeight,
),
title: Text(title, style: TextStyle(fontSize: size, color: textColor)),
trailing: trailWidget,
contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 0),
@ -202,6 +203,10 @@ class _Page4_MyMsicsNewState extends State<Page4_MyMsicsNew>
leadPath: 'assets/images/账户管理.png',
leadColor: _deepBlueColor,
onTapFun: OnTap_user_manager),
_getListTile('默认导航',
leadPath: 'assets/images/默认地图3.png',
leadColor: _deepBlueColor,
onTapFun: OnTap_DefaultMap),
//bNewVer
_getListTile('版本更新',
leadPath: 'assets/images/版本更新.png',
@ -213,9 +218,7 @@ class _Page4_MyMsicsNewState extends State<Page4_MyMsicsNew>
leadColor: _deepBlueColor,
onTapFun: OnTap_download),
_getListTile('提醒设置',
leadPath: 'assets/images/语音提醒.png',
leadColor: _deepGreyColor,
onTapFun: OnTap_Remind),
leadPath: 'assets/images/语音提醒.png', leadColor: _deepGreyColor, onTapFun: OnTap_Remind),
_getListTile('关于',
leadPath: 'assets/images/关于.png', leadColor: _deepBlueColor, onTapFun: OnTap_MyAbout)
@ -511,6 +514,10 @@ class _Page4_MyMsicsNewState extends State<Page4_MyMsicsNew>
Navigator.of(context).push(MaterialPageRoute(builder: (context) => page5_userManager()));
}
OnTap_DefaultMap() async {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => page8_defaultMap()));
}
OnTap_download() {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => page6_download()));
}

@ -0,0 +1,284 @@
import 'package:badges/badges.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:hyzp_ybqx/pages/Login/FaceReg.dart';
import 'package:hyzp_ybqx/pages/Login/ModifyPassword.dart';
import 'package:hyzp_ybqx/services/Storage.dart';
import '../../components/commonFun.dart';
import '../../widget/JdButton.dart';
class page8_defaultMap extends StatefulWidget {
page8_defaultMap({Key key}) : super(key: key);
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<page8_defaultMap> {
bool bSaveDefaultMap = false;
String defaultMapName = '';
dispose() {
super.dispose();
}
@override
void initState() {
super.initState();
init();
}
void init() async {
//
//
g_bSaveDefaultMap = await Storage.getBool('bSaveDefaultMap');
g_bSaveDefaultMap = (null == g_bSaveDefaultMap) ? false : g_bSaveDefaultMap; //
//
g_defaultMapName = await Storage.getString('defaultMapName');
g_defaultMapName = (null == g_defaultMapName) ? '' : g_defaultMapName; //
bSaveDefaultMap = g_bSaveDefaultMap;
// bSaveDefaultMap = false;
// defaultMapName = g_defaultMapName;
// defaultMapName = '高德地图';
// defaultMapName = getMapChsName('amap');
defaultMapName = getMapChsName(g_defaultMapName);
setState(() {});
}
////////
static onNullFun() {}
Widget _getListTile(
title, {
String leadPath = '',
Color leadColor,
Color textColor,
onTapFun = onNullFun,
onLongPressFun = onNullFun,
size = 16.0,
bool bBadge = false,
Widget trailWidget = const Icon(Icons.arrow_forward_ios),
}) {
// print("_getListTile bSaveDefaultMap = $bSaveDefaultMap "); // _getListTile bSaveDefaultMap = false
return Column(
children: <Widget>[
ListTile(
leading: bBadge
? Badge(
position: BadgePosition.topEnd(top: -7, end: -12),
badgeContent: null,
child: Image.asset(
leadPath,
height: ScreenUtil().setHeight(78),
fit: BoxFit.fitHeight,
// color: leadColor, //
),
)
: Image.asset(
leadPath,
height: ScreenUtil().setHeight(78),
fit: BoxFit.fitHeight,
),
title: Text(title, style: TextStyle(fontSize: size, color: textColor)),
trailing: trailWidget,
contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 0),
enabled: true,
onTap: onTapFun,
onLongPress: onLongPressFun,
),
Divider(
height: 1.0,
),
],
);
}
List<Widget> _listViewUser = [];
Color _greenColor = Color.fromRGBO(36, 206, 192, 1); //绿
Color _deepBlueColor = Color.fromRGBO(79, 118, 230, 1); //
Color _deepGreyColor = Color.fromRGBO(116, 139, 161, 1); //
Color _ligthBlueColor = Color.fromRGBO(80, 159, 245, 1); //
OnTap_FaceReg() async {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => FaceReg()));
}
OnTap_modify_password() {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => ModifyPassword()));
}
OnTap_Remind() {
setState(() {
bSaveDefaultMap = !bSaveDefaultMap;
print("bSaveDefaultMap = $bSaveDefaultMap");
});
}
Widget getTextField() {
return Container(
width: ScreenUtil().setWidth(400),
child: TextField(
readOnly: !bSaveDefaultMap,
focusNode: FocusNode(),
textAlignVertical: TextAlignVertical(y: 1.0),
controller: TextEditingController.fromValue(TextEditingValue(
text: defaultMapName.toString(),
//
selection: TextSelection.fromPosition(TextPosition(
affinity: TextAffinity.downstream, offset: defaultMapName.toString().length)))),
maxLines: 1,
keyboardType: TextInputType.text,
decoration: InputDecoration(
//contentPadding: EdgeInsets.only(bottom: 16),
// hintText: widget.text,
// border: OutlineInputBorder(
// borderRadius: BorderRadius.circular(30), borderSide: BorderSide.none),
border: UnderlineInputBorder(borderSide: BorderSide(color: Colors.lightBlue)),
focusedBorder: UnderlineInputBorder(borderSide: BorderSide(color: Colors.lightBlue)),
enabledBorder: UnderlineInputBorder(borderSide: BorderSide(color: Colors.lightBlue)),
),
onChanged: (v) {
defaultMapName = v;
},
),
);
}
Widget getText(String text) {
return Container(
child: Text(text,
style: TextStyle(
fontSize: 16,
color: Colors.blueAccent,
fontWeight: FontWeight.bold,
decoration: TextDecoration.underline,
)),
);
}
////////
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // appBar
// appBar
child: AppBar(
automaticallyImplyLeading: false,
centerTitle: true,
titleSpacing: 0.0,
//title
flexibleSpace: Container(
//SizedBox(height: ScreenUtil().statusBarHeight), //
// SizedBox(height: ScreenUtil().setHeight(10)), //
padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), //
child: Container(
//height: ScreenUtil().setHeight(173),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
Color.fromRGBO(12, 186, 156, 1),
Color.fromRGBO(39, 127, 235, 1),
],
),
),
// decoration: BoxDecoration(
// gradient: LinearGradient(colors: [
// Color(0xFF0018EB),
// Color(0xFF01C1D9),
// ], begin: Alignment.bottomCenter, end: Alignment.topCenter),
// ),
),
),
title: Padding(
padding: EdgeInsets.only(left: 0, right: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
getIconAndTextButton(
iconColor: Colors.white,
iconData: Icons.chevron_left_outlined,
onPress: () {
Navigator.pop(context);
},
),
Expanded(
child: Text("默认导航设置",
style: TextStyle(color: Colors.white, fontSize: 20),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis),
),
SizedBox(width: 50),
],
),
),
),
),
body: Container(
padding: EdgeInsets.only(top: 30, bottom: 20, left: 20, right: 20),
child: ListView(
children: [
Center(
child: Container(
margin: EdgeInsets.only(top: 30),
height: ScreenUtil().setWidth(160),
width: ScreenUtil().setWidth(160),
//child: Image.asset('assets/images/user.png', fit: BoxFit.cover),
child: Image.asset('assets/images/ybsthbj.png', fit: BoxFit.fitHeight),
),
),
SizedBox(height: 50),
_getListTile('保存默认导航地图',
leadPath: 'assets/images/地图选中.png',
leadColor: _deepGreyColor,
// textColor: bSaveDefaultMap ? Colors.blue : null,
onTapFun: OnTap_Remind,
trailWidget: bSaveDefaultMap
? Icon(Icons.check_box, color: Colors.blue)
: Icon(Icons.check_box_outline_blank, color: Colors.blueAccent)),
_getListTile('已选默认导航地图:',
leadPath: 'assets/images/用户选择.png',
leadColor: _deepBlueColor,
trailWidget: getText(defaultMapName)),
SizedBox(height: 60),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
JdButton(
height: 128,
width: 282,
//height: 126,
text: "确认",
color: Colors.blueAccent,
onTop: () async {
g_bSaveDefaultMap = bSaveDefaultMap;
await Storage.setBool('bSaveDefaultMap', g_bSaveDefaultMap);
if (!g_bSaveDefaultMap) {
await Storage.setString('defaultMapName', '');
}
Navigator.pop(context);
},
),
JdButton(
height: 128,
width: 282,
//height: 126,
text: "取消",
color: Colors.blueAccent,
onTop: () {
Navigator.pop(context);
},
)
],
),
],
),
),
);
}
}

@ -60,6 +60,7 @@ class _SuperPlayerPageState extends State<SuperPlayerPage>
Playing = false;
// 131112
setSphericalCameraDio(id: widget.id, dwip: widget.dwip, cmdCode: 1);
_playerController.release(); // 使退
super.dispose();
}
@ -74,8 +75,7 @@ class _SuperPlayerPageState extends State<SuperPlayerPage>
// });
// init();
WidgetsBinding.instance.addObserver(this);
WidgetsBinding.instance.addObserver(this);
_playerController.setOption(FijkOption.hostCategory, "enable-snapshot", 1);
_playerController.setOption(FijkOption.playerCategory, "mediacodec-all-videos", 1);
@ -202,12 +202,12 @@ class _SuperPlayerPageState extends State<SuperPlayerPage>
playerRegionProvide = Provider.of<PlayerRegionProvide>(context);
playerRatioProvide = Provider.of<PlayerRatioProvide>(context);
// List<Widget> listData = getDataListControl2();
double btnHeight1 = 70; //
double btnHeight2 = 160; //
int btnCount = 4; //
// int btnCount3 = listData.length; //
var mediaSize = MediaQuery.of(context).size;
// // List<Widget> listData = getDataListControl2();
// double btnHeight1 = 70; //
// double btnHeight2 = 160; //
// int btnCount = 4; //
// // int btnCount3 = listData.length; //
// var mediaSize = MediaQuery.of(context).size;
// widget.id-2
double btn_left = -2 == widget.id ? 347 : 70; //

@ -377,6 +377,13 @@ packages:
relative: true
source: path
version: "0.0.3"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.19.1"
flutter_swiper:
dependency: "direct main"
description:
@ -408,6 +415,27 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.1"
geolocator:
dependency: "direct main"
description:
name: geolocator
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.2.1"
geolocator_platform_interface:
dependency: transitive
description:
name: geolocator_platform_interface
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.9"
geolocator_web:
dependency: transitive
description:
name: geolocator_web
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.1"
get_it:
dependency: "direct main"
description:
@ -485,6 +513,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.1"
map_launcher:
dependency: "direct main"
description:
name: map_launcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.3+1"
matcher:
dependency: transitive
description:

@ -76,7 +76,11 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
#version: 1.5.2+20220531
#version: 1.5.3+20220620
#version: 1.5.4+20220827
version: 1.6.1+20221111
#version: 1.6.1+20221111
#version: 1.6.2+20231229
#version: 1.6.3+20231229
#version: 1.6.4+20250521
version: 1.6.5+20250527
environment:
sdk: ">=2.7.0 <3.0.0"
@ -199,7 +203,7 @@ dependencies:
flutter_echarts: ^1.5.0
flutter_superplayer:
path: .\lib\my_flutter_superplayer
path: ./lib/my_flutter_superplayer
# 二维码生成 https://pub.dev/packages/qr_flutter
qr_flutter: ^3.2.0
@ -210,6 +214,11 @@ dependencies:
# 添加水印插件
disable_screenshots: ^0.1.0
# 导航相关插件
map_launcher: ^1.1.3+1
flutter_svg: ^0.19.1
geolocator: ^6.2.1
dev_dependencies:
flutter_test:
sdk: flutter

Loading…
Cancel
Save