feat: 增加客服2

This commit is contained in:
2026-01-13 01:19:13 -08:00
parent 2ea6cd2379
commit 1d2a89a80a
7 changed files with 101 additions and 1 deletions
@@ -61,6 +61,11 @@ class HIMenuView extends GetView<HIMenuController> implements HasSwipeConfig {
title: '在线客服',
onTap: () => KRCommonUtil.kr_openCustomerService(),
),
const MenuItem(
iconName: 'icon-5',
title: '在线客服2',
route: Routes.KR_CHATWOOT,
),
];
return HIBaseScaffold(
@@ -0,0 +1,12 @@
import 'package:get/get.dart';
import '../controllers/kr_chatwoot_controller.dart';
/// 客服2Chatwoot)依赖绑定
class KRChatwootBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<KRChatwootController>(
() => KRChatwootController(),
);
}
}
@@ -0,0 +1,21 @@
import 'package:get/get.dart';
/// 客服2Chatwoot)控制器
class KRChatwootController extends GetxController {
/// Chatwoot 客服链接
final String kr_chatwootUrl = 'https://app.chatwoot.com/widget?website_token=YXQmh16ymNYW1SVybhnoQQ9w';
/// 加载状态
final RxBool kr_isLoading = true.obs;
@override
void onInit() {
super.onInit();
}
/// 设置加载状态
/// [loading] 是否正在加载
void kr_setLoading(bool loading) {
kr_isLoading.value = loading;
}
}
@@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:kaer_with_panels/app/widgets/hi_base_scaffold.dart';
import 'package:kaer_with_panels/app/widgets/kr_simple_loading.dart';
import '../controllers/kr_chatwoot_controller.dart';
/// 客服2Chatwoot)视图页面
class KRChatwootView extends GetView<KRChatwootController> {
const KRChatwootView({super.key});
@override
Widget build(BuildContext context) {
return HIBaseScaffold(
showBack: true,
topContentAreaHeight: 0,
child: Stack(
children: [
InAppWebView(
initialUrlRequest: URLRequest(
url: WebUri(controller.kr_chatwootUrl),
),
initialSettings: InAppWebViewSettings(
javaScriptEnabled: true,
domStorageEnabled: true,
allowsInlineMediaPlayback: true,
),
onLoadStart: (controller, url) {
this.controller.kr_setLoading(true);
},
onLoadStop: (controller, url) {
this.controller.kr_setLoading(false);
},
onReceivedError: (controller, request, error) {
this.controller.kr_setLoading(false);
},
),
Obx(() {
if (controller.kr_isLoading.value) {
return const Center(
child: KRSimpleLoading(
size: 40,
),
);
}
return const SizedBox.shrink();
}),
],
),
);
}
}
@@ -57,7 +57,7 @@ class KRCrispController extends GetxController {
_nativeConfig = native_crisp.CrispConfig(
websiteID: AppConfig.getInstance().kr_website_id,
user: native_crisp.User(
email: identifier,
email: null,
nickName: identifier,
),
);