This commit is contained in:
zhutao
2025-12-01 16:00:16 +08:00
parent c67bc730af
commit f5ce40063f
14 changed files with 66 additions and 31 deletions

View File

@@ -1 +1,26 @@
flutter build apk -Penv=dev #!/bin/bash
#当前执行目录
current_dir=$(pwd)
channelPath="$current_dir/build/app/outputs/apk/dev"
mkdir -p "$channelPath"
rm -rf "$channelPath"/*
#定义环境变量和 Android 设备品牌
declare -a APP_CHANNELS=("dev")
# 遍历每个环境配置并执行构建
for index in "${APP_CHANNELS[@]}"; do
ENV=${APP_CHANNELS[$index]}
flutter build apk -Penv=dev -Pchannel=$ENV --dart-define=ENV=dev
# 检查构建是否成功
if [ $? -ne 0 ]; then
echo "Build failed for ENV=$ENV"
exit 1
fi
apkFile=$(find $(pwd)/build/app/outputs/apk/release/ -name "*.apk" -print -quit)
# 获取 .apk 文件的文件名
apkFileName=$(basename "$apkFile")
mv $apkFile "$channelPath/$apkFileName"
done
echo "All builds completed successfully."

View File

@@ -11,7 +11,7 @@ declare -a APP_CHANNELS=("release")
# 遍历每个环境配置并执行构建 # 遍历每个环境配置并执行构建
for index in "${APP_CHANNELS[@]}"; do for index in "${APP_CHANNELS[@]}"; do
ENV=${APP_CHANNELS[$index]} ENV=${APP_CHANNELS[$index]}
flutter build apk -Penv=prod -Pchannel=$ENV flutter build apk -Penv=prod -Pchannel=$ENV --dart-define=ENV=prod
# 检查构建是否成功 # 检查构建是否成功
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Build failed for ENV=$ENV" echo "Build failed for ENV=$ENV"

BIN
cert.cer Normal file

Binary file not shown.

View File

@@ -8,19 +8,24 @@ class Config {
///获取接口地址 ///获取接口地址
static String baseUrl() { static String baseUrl() {
if (getEnv() == 'dev') { if (getEnv() == 'dev') {
return 'https://xueguang.test.tuzuu.com/api'; return 'https://xg.test.lifebanktech.com/api';
} else { } else {
return 'https://xueguang.test.tuzuu.com/api'; return 'https://xg.lifebanktech.com/api';
} }
} }
/// 获取websocket地址 /// 获取websocket地址
static String wsUrl() { static String wsUrl() {
return "wss://xueguang.test.tuzuu.com/ws"; final url = webUrl();
final wsBase = url.replaceAll('https', 'wss'); // 替换协议
return '$wsBase/ws';
} }
///网页域名地址 ///网页域名地址
static String get webUrl => "http://xueguang.test.tuzuu.com"; static String webUrl() {
String url = baseUrl();
return url.replaceAll("/api", "");
}
///声网APPid ///声网APPid
static String get swAppId => "011c2fd2e1854511a80c1aebded4eee7"; static String get swAppId => "011c2fd2e1854511a80c1aebded4eee7";

View File

@@ -1,8 +1,8 @@
import 'dart:async';
import 'package:app/global/event_bus.dart'; import 'package:app/global/event_bus.dart';
import 'package:app/providers/user_store.dart'; import 'package:app/providers/user_store.dart';
import 'package:app/router/route_paths.dart'; import 'package:app/router/route_paths.dart';
import 'package:app/widgets/version/version_dialog.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
@@ -12,7 +12,6 @@ import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'global/theme/theme.dart'; import 'global/theme/theme.dart';
import 'global/theme/themes/light_theme.dart';
void main() { void main() {
runApp( runApp(
@@ -43,6 +42,13 @@ class _MyAppState extends State<MyApp> {
ctx?.go(RoutePaths.login); ctx?.go(RoutePaths.login);
} }
}); });
///延迟
WidgetsBinding.instance.addPostFrameCallback((_) {
final ctx = navigatorKey.currentState?.context;
showUpdateDialog(ctx!);
});
} }
@override @override

View File

@@ -37,7 +37,7 @@ class _LoginPageState extends State<LoginPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
} }
///点击发送验证码 ///点击发送验证码

View File

@@ -1,6 +1,5 @@
import 'package:app/global/theme/base/app_theme_ext.dart'; import 'package:app/global/theme/base/app_theme_ext.dart';
import 'package:app/pages/student/home/viewmodel/s_home_vm.dart'; import 'package:app/pages/student/home/viewmodel/s_home_vm.dart';
import 'package:app/widgets/version/version_dialog.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'widgets/tip_card.dart'; import 'widgets/tip_card.dart';
@@ -13,7 +12,6 @@ class SHomePage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
showUpdateDialog(context);
return ChangeNotifierProvider( return ChangeNotifierProvider(
create: (_) => SHomeVm(), create: (_) => SHomeVm(),
child: _HomeView(), child: _HomeView(),

View File

@@ -54,15 +54,18 @@ class TeacherVideo extends StatelessWidget {
Positioned( Positioned(
top: 30, top: 30,
left: 10, left: 10,
child: Container( child: Visibility(
width: 200, visible: !vm.cameraClose,
color: Colors.black, child: Container(
child: AspectRatio( width: 200,
aspectRatio: 16 / 9, color: Colors.black,
child: AgoraVideoView( child: AspectRatio(
controller: VideoViewController( aspectRatio: 16 / 9,
rtcEngine: vm.engine!, child: AgoraVideoView(
canvas: const VideoCanvas(uid: 0), controller: VideoViewController(
rtcEngine: vm.engine!,
canvas: const VideoCanvas(uid: 0),
),
), ),
), ),
), ),

View File

@@ -103,6 +103,7 @@ class StuRoomVM extends ChangeNotifier {
//启动连接 //启动连接
await _ws.connect(); await _ws.connect();
// //
_sub?.cancel();
_sub = _ws.stream.listen((msg) { _sub = _ws.stream.listen((msg) {
//自习室人员变化,同时也设置房间是否开了 //自习室人员变化,同时也设置房间是否开了
if (msg.event == RoomEvent.changeUser) { if (msg.event == RoomEvent.changeUser) {

View File

@@ -13,7 +13,6 @@ class THomePage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// showUpdateDialog(context);
return ChangeNotifierProvider( return ChangeNotifierProvider(
create: (_) => HomeViewModel(), create: (_) => HomeViewModel(),
child: const _HomeView(), child: const _HomeView(),

View File

@@ -4,6 +4,7 @@ import 'dart:io';
import 'package:app/global/config.dart'; import 'package:app/global/config.dart';
import 'package:app/request/api/room_api.dart'; import 'package:app/request/api/room_api.dart';
import 'package:app/request/websocket/room_protocol.dart'; import 'package:app/request/websocket/room_protocol.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import '../dto/room/rtc_token_dto.dart'; import '../dto/room/rtc_token_dto.dart';
@@ -51,7 +52,6 @@ class RoomWebSocket {
_socket = await WebSocket.connect( _socket = await WebSocket.connect(
"${Config.wsUrl()}?token=$wsToken&study_room_id=$roomId", "${Config.wsUrl()}?token=$wsToken&study_room_id=$roomId",
); );
logger.i("连接成功");
_reconnectTimer?.cancel(); _reconnectTimer?.cancel();
_reconnectTimer = null; _reconnectTimer = null;
@@ -76,7 +76,7 @@ class RoomWebSocket {
}, },
onDone: () {}, onDone: () {},
onError: (_) { onError: (_) {
logger.e("连接异常断开"); EasyLoading.showError("连接断开");
}, },
); );
//自动加入房间 //自动加入房间
@@ -88,7 +88,6 @@ class RoomWebSocket {
send(RoomCommand.ping); send(RoomCommand.ping);
}); });
} catch (e) { } catch (e) {
logger.e("连接失败");
_reconnect(); _reconnect();
} }
} }
@@ -110,7 +109,7 @@ class RoomWebSocket {
void _reconnect() { void _reconnect() {
_reconnectTimer?.cancel(); _reconnectTimer?.cancel();
_reconnectTimer = Timer.periodic(Duration(seconds: 3), (timer) { _reconnectTimer = Timer.periodic(Duration(seconds: 3), (timer) {
logger.e("正在重连"); EasyLoading.showToast("正在重连");
connect(); connect();
}); });
} }
@@ -121,11 +120,10 @@ class RoomWebSocket {
_heartbeatTimer = null; _heartbeatTimer = null;
//socket取消 //socket取消
_socket?.close(); _socket?.close();
// 销毁事件流
// _msgController.close();
// 错误重连取消 // 错误重连取消
_reconnectTimer?.cancel(); _reconnectTimer?.cancel();
_reconnectTimer = null; _reconnectTimer = null;
logger.i("websocket销毁成功"); logger.i("websocket销毁成功");
} }
} }

View File

@@ -13,7 +13,7 @@ class BoardDialog extends StatefulWidget {
} }
class _BoardDialogState extends State<BoardDialog> { class _BoardDialogState extends State<BoardDialog> {
bool _loading = true; bool _loading = false;
@override @override
void initState() { void initState() {

View File

@@ -55,12 +55,12 @@ class BoardManager {
"write": isTeacher ? 1 : 0, "write": isTeacher ? 1 : 0,
}; };
String paramStr = params.entries.map((e) => "${e.key}=${e.value}").join("&"); String paramStr = params.entries.map((e) => "${e.key}=${e.value}").join("&");
return "${Config.webUrl()}/board?$paramStr";
return "${Config.webUrl}/board?$paramStr";
} }
/// 获取全局唯一 WebViewController /// 获取全局唯一 WebViewController
Future<WebViewController> getController(String url) async { Future<WebViewController> getController(String url) async {
print(url);
if (_webViewController != null) return _webViewController!; if (_webViewController != null) return _webViewController!;
_webViewController = WebViewController() _webViewController = WebViewController()

View File

@@ -2,7 +2,7 @@ name: app
description: "A new Flutter project." description: "A new Flutter project."
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.1.1 version: 1.1.3
environment: environment:
sdk: ^3.8.1 sdk: ^3.8.1