Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
ethan
/
appframe
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit b489b6e0
authored
2025-12-11 10:24:03 +0800
by
tanghuan
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
dev
1 parent
e732a20e
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
69 additions
and
9 deletions
lib/bloc/web_cubit.dart
lib/config/constant.dart
lib/config/locator.dart
lib/data/repositories/message/role_info_handler.dart
lib/services/im_service.dart
lib/ui/pages/setting/account_page.dart
lib/ui/pages/setting/account_phone_page.dart
lib/ui/pages/web_page.dart
lib/bloc/web_cubit.dart
View file @
b489b6e
...
@@ -204,7 +204,7 @@ class WebCubit extends Cubit<WebState> {
...
@@ -204,7 +204,7 @@ class WebCubit extends Cubit<WebState> {
// 版本不一致则需要升级
// 版本不一致则需要升级
// 需要强制升级时,一直等待下载完成
// 需要强制升级时,一直等待下载完成
// 不需要强制升级时,异步下载,下载完后弹框提示用户进行确认操作
// 不需要强制升级时,异步下载,下载完后弹框提示用户进行确认操作
if
(
curVersion
!=
configVersion
)
{
if
(
Constant
.
needUpgrade
&&
curVersion
!=
configVersion
)
{
if
(
force
==
"1"
)
{
if
(
force
==
"1"
)
{
// 一直等待升级完成
// 一直等待升级完成
// 遮罩界面
// 遮罩界面
...
@@ -456,6 +456,21 @@ class WebCubit extends Cubit<WebState> {
...
@@ -456,6 +456,21 @@ class WebCubit extends Cubit<WebState> {
_sendResponse
(
resp
);
_sendResponse
(
resp
);
}
}
Future
<
void
>
handleToggleDebug
()
async
{
var
sharedPreferences
=
getIt
.
get
<
SharedPreferences
>();
var
debug
=
sharedPreferences
.
getInt
(
'debug'
)
??
0
;
debug
=
(
debug
==
0
?
1
:
0
);
sharedPreferences
.
setInt
(
'debug'
,
debug
);
var
resp
=
{
'unique'
:
''
,
'cmd'
:
'toggleDebug'
,
'data'
:
{
'debug'
:
debug
},
'errMsg'
:
''
};
_sendResponse
(
resp
);
}
bool
setTitleBar
(
String
title
,
String
color
,
String
bgColor
,
String
icon
)
{
bool
setTitleBar
(
String
title
,
String
color
,
String
bgColor
,
String
icon
)
{
int
parsedTitleColor
=
_hexStringToInt
(
color
);
int
parsedTitleColor
=
_hexStringToInt
(
color
);
int
parsedBgColor
=
_hexStringToInt
(
bgColor
);
int
parsedBgColor
=
_hexStringToInt
(
bgColor
);
...
...
lib/config/constant.dart
View file @
b489b6e
...
@@ -91,4 +91,5 @@ class Constant {
...
@@ -91,4 +91,5 @@ class Constant {
/// 测试阶段使用
/// 测试阶段使用
static
const
bool
needIM
=
false
;
static
const
bool
needIM
=
false
;
static
const
bool
needUpgrade
=
false
;
}
}
lib/config/locator.dart
View file @
b489b6e
...
@@ -20,6 +20,7 @@ import 'package:appframe/data/repositories/message/open_document_handler.dart';
...
@@ -20,6 +20,7 @@ import 'package:appframe/data/repositories/message/open_document_handler.dart';
import
'package:appframe/data/repositories/message/open_link_handler.dart'
;
import
'package:appframe/data/repositories/message/open_link_handler.dart'
;
import
'package:appframe/data/repositories/message/open_weapp_handler.dart'
;
import
'package:appframe/data/repositories/message/open_weapp_handler.dart'
;
import
'package:appframe/data/repositories/message/orientation_handler.dart'
;
import
'package:appframe/data/repositories/message/orientation_handler.dart'
;
import
'package:appframe/data/repositories/message/role_info_handler.dart'
;
import
'package:appframe/data/repositories/message/save_file_to_disk_handler.dart'
;
import
'package:appframe/data/repositories/message/save_file_to_disk_handler.dart'
;
import
'package:appframe/data/repositories/message/save_to_album_handler.dart'
;
import
'package:appframe/data/repositories/message/save_to_album_handler.dart'
;
import
'package:appframe/data/repositories/message/scan_code_handler.dart'
;
import
'package:appframe/data/repositories/message/scan_code_handler.dart'
;
...
@@ -184,6 +185,9 @@ Future<void> setupLocator() async {
...
@@ -184,6 +185,9 @@ Future<void> setupLocator() async {
/// 登录
/// 登录
getIt
.
registerLazySingleton
<
MessageHandler
>(()
=>
GoLoginHandler
(),
instanceName:
'goLogin'
);
getIt
.
registerLazySingleton
<
MessageHandler
>(()
=>
GoLoginHandler
(),
instanceName:
'goLogin'
);
/// 设置用户角色信息
getIt
.
registerLazySingleton
<
MessageHandler
>(()
=>
RoleInfoHandler
(),
instanceName:
'setRoleInfo'
);
/// service
/// service
///
///
/// local server
/// local server
...
...
lib/data/repositories/message/role_info_handler.dart
0 → 100644
View file @
b489b6e
import
'package:appframe/config/locator.dart'
;
import
'package:appframe/services/dispatcher.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
class
RoleInfoHandler
extends
MessageHandler
{
@override
Future
<
bool
>
handleMessage
(
params
)
async
{
if
(
params
is
!
Map
<
String
,
dynamic
>)
{
throw
Exception
(
'参数错误'
);
}
final
String
userId
=
params
[
'userId'
]
as
String
;
final
String
classCode
=
params
[
'classCode'
]
as
String
;
final
int
userType
=
params
[
'userType'
]
as
int
;
final
String
stuId
=
params
[
'stuId'
]
as
String
??
''
;
var
sharedPreferences
=
getIt
.
get
<
SharedPreferences
>();
sharedPreferences
.
setString
(
'auth_userCode'
,
userId
);
sharedPreferences
.
setString
(
'auth_classCode'
,
classCode
);
sharedPreferences
.
setInt
(
'auth_userType'
,
userType
);
sharedPreferences
.
setString
(
'auth_stuId'
,
stuId
);
return
true
;
}
}
lib/services/im_service.dart
View file @
b489b6e
...
@@ -8,6 +8,7 @@ import 'package:tencent_cloud_chat_push/tencent_cloud_chat_push.dart';
...
@@ -8,6 +8,7 @@ import 'package:tencent_cloud_chat_push/tencent_cloud_chat_push.dart';
import
'package:tencent_cloud_chat_sdk/enum/V2TimAdvancedMsgListener.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/V2TimAdvancedMsgListener.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/V2TimSDKListener.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/V2TimSDKListener.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/log_level_enum.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/log_level_enum.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/login_status.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'
;
import
'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'
;
import
'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'
;
import
'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'
;
import
'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'
;
import
'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'
;
...
@@ -74,9 +75,16 @@ class ImService {
...
@@ -74,9 +75,16 @@ class ImService {
onRecvNewMessage:
(
V2TimMessage
message
)
async
{
onRecvNewMessage:
(
V2TimMessage
message
)
async
{
// 处理文本消息
// 处理文本消息
if
(
message
.
elemType
==
MessageElemType
.
V2TIM_ELEM_TYPE_TEXT
)
{
if
(
message
.
elemType
==
MessageElemType
.
V2TIM_ELEM_TYPE_TEXT
)
{
message
.
textElem
?.
text
;
//
message.textElem?.text;
print
(
"收到IM消息--------
${message.textElem?.text}
"
);
// 时间戳转换
// DateTime timestamp = DateTime.fromMillisecondsSinceEpoch(message.timestamp! * 1000);
// String formattedTime = DateFormat('yyyy-MM-dd HH:mm:ss').format(timestamp);
//
// print("收到IM消息—— 发送时间:$formattedTime 发送者:${message.sender} 内容:${message.textElem?.text}");
// 目前只会有文本消息,所以其他消息类型暂不处理,直接return
return
;
}
}
// 使用自定义消息
// 使用自定义消息
if
(
message
.
elemType
==
MessageElemType
.
V2TIM_ELEM_TYPE_CUSTOM
)
{
if
(
message
.
elemType
==
MessageElemType
.
V2TIM_ELEM_TYPE_CUSTOM
)
{
...
@@ -214,10 +222,13 @@ class ImService {
...
@@ -214,10 +222,13 @@ class ImService {
/// 登录 IM
/// 登录 IM
///
///
Future
<
bool
>
login
(
String
userID
)
async
{
Future
<
bool
>
login
(
String
userID
)
async
{
/*var userSig = GenerateTestUserSig(sdkappid: Constant.imSdkAppId, key: Constant.imAppSecure).genSig(
// 登录前先判断登录状态
identifier: userID,
var
loginStatus
=
await
TencentImSDKPlugin
.
v2TIMManager
.
getLoginStatus
();
expire: 86400 * 30,
print
(
'IM 登录状态:
${loginStatus.code}
'
);
);*/
if
(
loginStatus
.
code
==
LoginStatus
.
V2TIM_STATUS_LOGINED
)
{
// 已经登录,不需要再次登录
return
true
;
}
final
apiService
=
getIt
.
get
<
ApiService
>(
instanceName:
"appApiService"
);
final
apiService
=
getIt
.
get
<
ApiService
>(
instanceName:
"appApiService"
);
var
response
=
await
apiService
.
get
(
'/api/v1/im/sign'
,
queryParameters:
{
'userID'
:
userID
});
var
response
=
await
apiService
.
get
(
'/api/v1/im/sign'
,
queryParameters:
{
'userID'
:
userID
});
...
@@ -227,6 +238,10 @@ class ImService {
...
@@ -227,6 +238,10 @@ class ImService {
var
userSig
=
response
.
data
[
'userSig'
];
var
userSig
=
response
.
data
[
'userSig'
];
V2TimCallback
res
=
await
TencentImSDKPlugin
.
v2TIMManager
.
login
(
userID:
userID
,
userSig:
userSig
);
V2TimCallback
res
=
await
TencentImSDKPlugin
.
v2TIMManager
.
login
(
userID:
userID
,
userSig:
userSig
);
loginStatus
=
await
TencentImSDKPlugin
.
v2TIMManager
.
getLoginStatus
();
print
(
'IM 登录状态2:
${loginStatus.code}
'
);
if
(
res
.
code
==
0
)
{
if
(
res
.
code
==
0
)
{
print
(
"IM 登录成功--------"
);
print
(
"IM 登录成功--------"
);
// 添加消息的事件监听器
// 添加消息的事件监听器
...
...
lib/ui/pages/setting/account_page.dart
View file @
b489b6e
...
@@ -69,7 +69,7 @@ class AccountPage extends StatelessWidget {
...
@@ -69,7 +69,7 @@ class AccountPage extends StatelessWidget {
color:
Colors
.
grey
,
color:
Colors
.
grey
,
),
),
),
),
trailing:
Icon
(
Icons
.
arrow_forward_ios
),
trailing:
Icon
(
Icons
.
arrow_forward_ios
,
size:
14
),
onTap:
()
{
onTap:
()
{
context
.
read
<
AccountCubit
>().
goBind
();
context
.
read
<
AccountCubit
>().
goBind
();
},
},
...
...
lib/ui/pages/setting/account_phone_page.dart
View file @
b489b6e
...
@@ -42,7 +42,7 @@ class AccountPhonePage extends StatelessWidget {
...
@@ -42,7 +42,7 @@ class AccountPhonePage extends StatelessWidget {
]),
]),
)
)
:
Padding
(
:
Padding
(
padding:
EdgeInsets
.
all
(
2
0
),
padding:
EdgeInsets
.
all
(
6
0
),
child:
Column
(
child:
Column
(
children:
[
children:
[
SizedBox
(
height:
120
),
SizedBox
(
height:
120
),
...
...
lib/ui/pages/web_page.dart
View file @
b489b6e
This diff is collapsed.
Click to expand it.
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment