Browse Source

Merge branch 'new_dev' of https://github.com/deepcloud2048/deep_voice into new_dev

weicu
liwei1dao 12 months ago
parent
commit
f2b80e8e26
  1. 8
      lib/data/services/account_service.dart
  2. 9
      lib/data/services/db/database_helper.dart
  3. 195
      lib/data/services/version_update_service.dart
  4. 1
      lib/modules/profile/controllers/profile_controller.dart

8
lib/data/services/account_service.dart

@ -1,9 +1,11 @@
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:logger/logger.dart';
import '../../core/utils/synchrodata.dart';
import '../../modules/login/controllers/googleLogin.dart';
import '../../modules/login/controllers/facebookLogin.dart';
import '../services/network/api.dart';
import 'db/database_helper.dart';
/// 账号管理服务
///
@ -76,6 +78,12 @@ class AccountService extends GetxService {
/// 返回操作结果,包含成功状态和错误信息
Future<AccountOperationResult> signOut() async {
try {
// 上传会议记录操作记录
await Synchrodata.uploadOperationRecords();
// 关闭数据库连接
await DatabaseHelper().close();
// 清理本地数据
final dataCleaned = await clearUserData();
if (!dataCleaned) {

9
lib/data/services/db/database_helper.dart

@ -22,6 +22,8 @@ class DatabaseHelper {
Map? userInfo = storage.read("user_info");
if (userInfo != null) {
_userId = userInfo['user']['uid'];
} else {
_userId = '';
}
String path = join(
await getDatabasesPath(),
@ -115,4 +117,11 @@ class DatabaseHelper {
});
await batch.commit();
}
Future<void> close() async {
if (_database != null) {
await _database!.close();
_database = null;
}
}
}

195
lib/data/services/version_update_service.dart

@ -1,5 +1,6 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'dart:math' as math;
import 'package:get/get.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher.dart';
@ -8,7 +9,6 @@ import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import '../models/channel_app_model.dart';
import 'network/api.dart';
import 'dart:math' as math;
/// 版本更新服务类
class VersionUpdateService extends GetxService {
@ -49,7 +49,11 @@ class VersionUpdateService extends GetxService {
String get cachedDeviceBrand => _deviceBrand ?? '';
/// 获取缓存的渠道信息
UserChannel get cachedChannel => _channel ?? UserChannel.UNKNOWN;
UserChannel get cachedChannel =>
_channel ??
(_platform?.toLowerCase() == 'ios'
? UserChannel.GLOBAL_APPLE
: UserChannel.GLOBAL_GOOGLE);
/// 获取缓存的最新版本
String get cachedLatestVersion => _latestVersion ?? '';
@ -90,96 +94,6 @@ class VersionUpdateService extends GetxService {
// super.onInit();
// }
/// 获取当前应用版本信息
Future<String> getCurrentVersion() async {
try {
final packageInfo = await PackageInfo.fromPlatform();
_appVersion = packageInfo.version;
_buildNumber = packageInfo.buildNumber;
return '${packageInfo.version}+${packageInfo.buildNumber}';
} catch (e) {
_logger.e('获取当前版本信息失败: $e');
return '1.0.0';
}
}
/// 获取当前平台信息
Future<PlatformInfo> getCurrentPlatformInfo() async {
if (Platform.isIOS) {
return const PlatformInfo(
platform: 'ios',
storeType: AppStoreType.appStore,
channel: UserChannel.GLOBAL_APPLE,
);
}
if (Platform.isAndroid) {
// 根据设备品牌判断应用商店类型
return await getAndroidStoreInfoByBrand();
}
return const PlatformInfo(
platform: 'unknown',
storeType: AppStoreType.unknown,
channel: UserChannel.UNKNOWN,
);
}
/// 根据设备品牌获取应用商店信息
///
/// 该方法根据设备品牌判断应用商店类型,并返回对应的 [PlatformInfo] 对象。
/// 如果品牌不在预设列表中,将使用环境变量 [Channel] 或默认值 [UserChannel.GLOBAL_GOOGLE]。
Future<PlatformInfo> getAndroidStoreInfoByBrand() async {
try {
final deviceInfo = DeviceInfoPlugin();
final androidInfo = await deviceInfo.androidInfo;
final brand = androidInfo.brand.toLowerCase();
_deviceBrand = brand;
String channelFromEnv = dotenv.env['Channel'] ?? 'OFFICIAL';
_channel = UserChannel.fromName(channelFromEnv);
UserChannel brandChannel; //品牌渠道,只用于请求版本更新信息
switch (brand) {
case 'huawei':
brandChannel = UserChannel.CHINA_HUAWEI;
break;
case 'xiaomi':
case 'redmi':
brandChannel = UserChannel.CHINA_XIAOMI;
break;
case 'oppo':
case 'oneplus':
brandChannel = UserChannel.CHINA_OPPO;
break;
case 'vivo':
case 'iqoo':
brandChannel = UserChannel.CHINA_VIVO;
break;
case 'honor':
brandChannel = UserChannel.CHINA_HONOR;
break;
default:
brandChannel = _channel ?? UserChannel.GLOBAL_GOOGLE;
break;
}
return PlatformInfo(
platform: 'android',
storeType: AppStoreType.official,
channel: brandChannel,
);
} catch (e) {
_logger.e('获取Android设备信息失败: $e');
return const PlatformInfo(
platform: 'android',
storeType: AppStoreType.googlePlay,
channel: UserChannel.UNKNOWN,
);
}
}
/// 检查版本更新
Future<VersionUpdateInfo> checkForUpdate() async {
if (_lastCheckTime != null &&
@ -203,7 +117,7 @@ class VersionUpdateService extends GetxService {
final platformInfo = await getCurrentPlatformInfo();
_platform = platformInfo.platform;
//_channel = platformInfo.channel;
_channel = platformInfo.channel;
_lastCheckTime = DateTime.now();
// 调用后端接口获取最新版本信息
@ -233,7 +147,7 @@ class VersionUpdateService extends GetxService {
// 设置游客登录显示状态(先用当前渠道结果作为回退,再用.env渠道覆盖以保持一致)
_isShowTourists = appInfo.tourists;
if (_channel != platformInfo.channel) {
if (Platform.isAndroid && _channel != platformInfo.channel) {
//[4]当前渠道与.env渠道不同,需要从.env渠道获取游客登录配置
await _refreshTouristsFromEnv();
}
@ -281,6 +195,97 @@ class VersionUpdateService extends GetxService {
}
}
/// 获取当前应用版本信息
Future<String> getCurrentVersion() async {
try {
final packageInfo = await PackageInfo.fromPlatform();
_appVersion = packageInfo.version;
_buildNumber = packageInfo.buildNumber;
return '${packageInfo.version}+${packageInfo.buildNumber}';
} catch (e) {
_logger.e('获取当前版本信息失败: $e');
return '1.0.0';
}
}
/// 获取当前平台信息
Future<PlatformInfo> getCurrentPlatformInfo() async {
if (Platform.isIOS) {
return const PlatformInfo(
platform: 'ios',
storeType: AppStoreType.appStore,
channel: UserChannel.GLOBAL_APPLE,
);
}
if (Platform.isAndroid) {
// 根据设备品牌判断应用商店类型
return await getAndroidStoreInfoByBrand();
}
return const PlatformInfo(
platform: 'unknown',
storeType: AppStoreType.unknown,
channel: UserChannel.UNKNOWN,
);
}
/// 根据设备品牌获取应用商店信息
///
/// 该方法根据设备品牌判断应用商店类型,并返回对应的 [PlatformInfo] 对象。
/// 如果品牌不在预设列表中,将使用环境变量 [Channel] 或默认值 [UserChannel.GLOBAL_GOOGLE]。
Future<PlatformInfo> getAndroidStoreInfoByBrand() async {
try {
final deviceInfo = DeviceInfoPlugin();
final androidInfo = await deviceInfo.androidInfo;
final brand = androidInfo.brand.toLowerCase();
_deviceBrand = brand;
String channelFromEnv = dotenv.env['Channel'] ?? 'OFFICIAL';
Logger().d('channelFromEnv: $channelFromEnv');
_channel = UserChannel.fromName(channelFromEnv);
UserChannel brandChannel; //品牌渠道,只用于请求版本更新信息
switch (brand) {
case 'huawei':
brandChannel = UserChannel.CHINA_HUAWEI;
break;
case 'xiaomi':
case 'redmi':
brandChannel = UserChannel.CHINA_XIAOMI;
break;
case 'oppo':
case 'oneplus':
brandChannel = UserChannel.CHINA_OPPO;
break;
case 'vivo':
case 'iqoo':
brandChannel = UserChannel.CHINA_VIVO;
break;
case 'honor':
brandChannel = UserChannel.CHINA_HONOR;
break;
default:
brandChannel = _channel ?? UserChannel.GLOBAL_GOOGLE;
break;
}
return PlatformInfo(
platform: 'android',
storeType: AppStoreType.official,
channel: brandChannel,
);
} catch (e) {
_logger.e('获取Android设备信息失败: $e');
return const PlatformInfo(
platform: 'android',
storeType: AppStoreType.googlePlay,
channel: UserChannel.UNKNOWN,
);
}
}
/// 从.env文件刷新游客登录配置
Future<void> _refreshTouristsFromEnv() async {
try {

1
lib/modules/profile/controllers/profile_controller.dart

@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:logger/logger.dart';
import '../../../data/models/user_Info.dart';
import '../../settings/controllers/settings_controller.dart';
import 'dart:io';
//import 'dart:convert';
import 'package:flutter_image_compress/flutter_image_compress.dart';

Loading…
Cancel
Save