fix: 修改客服,增加sdk使用;增加邀请链接短链,升级flutter到3.35.0,Dart 3.9.0

This commit is contained in:
2026-01-24 23:14:18 -08:00
parent 57a47874be
commit e59cbf8b60
20 changed files with 457 additions and 187 deletions
@@ -1,21 +1,69 @@
import 'package:get/get.dart';
import 'package:chatwoot_flutter_sdk/chatwoot_sdk.dart';
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:kaer_with_panels/app/common/app_run_data.dart';
/// 客服2Chatwoot)控制器
class KRChatwootController extends GetxController {
/// Chatwoot 客服链接
final String kr_chatwootUrl = 'https://app.chatwoot.com/widget?website_token=YXQmh16ymNYW1SVybhnoQQ9w';
import 'package:kaer_with_panels/app/utils/kr_secure_storage.dart';
/// 加载状态
final RxBool kr_isLoading = true.obs;
class KRChatwootController {
// 配置参数
final String baseUrl = 'https://app.chatwoot.com';
final String inboxIdentifier = 'YXQmh16ymNYW1SVybhnoQQ9w';
@override
void onInit() {
super.onInit();
KRChatwootController() {
KRSecureStorage().kr_readData(key: 'USER_INFO').then((value) {
print('KRSecureStorage_keyUserInfo: $value');
});
}
/// 设置加载状态
/// [loading] 是否正在加载
void kr_setLoading(bool loading) {
kr_isLoading.value = loading;
/// 获取当前用户信息
/// 建议从你的全局 UserState 或本地存储中动态获取
ChatwootUser get chatUser {
final appRunData = KRAppRunData.getInstance();
final userId = appRunData.kr_userId.value?.toString();
final deviceId = appRunData.deviceId;
final account = appRunData.kr_account.value;
// 优先使用 userId 作为唯一标识,如果没有则使用 deviceId
final identifier = userId ?? deviceId ?? 'unknown_user';
// 名字使用账号,如果没有则显示 Guest
final name = account ?? 'Guest';
// 邮箱如果是邮箱格式则使用,否则构造一个唯一的虚拟邮箱以满足格式要求
String email = '';
if (account != null && account.contains('@')) {
email = account;
} else {
email = '$identifier@hifastvpn.com';
}
return ChatwootUser(
identifier: identifier, // 必填:用于关联历史聊天记录
name: name,
email: email,
);
}
}
/// 处理文件/附件选择逻辑
Future<List<String>> onFilePicker() async {
try {
final result = await FilePicker.platform.pickFiles(
allowMultiple: true,
type: FileType.any,
);
if (result != null && result.paths.isNotEmpty) {
// 过滤掉 null 路径并转换为 String 列表
return result.paths.whereType<String>().toList();
}
} catch (e) {
debugPrint("KRChatwoot: 文件选择失败 - $e");
}
return [];
}
// 可以在这里添加更多业务方法,例如:
// void trackEvent(String eventName) { ... }
}