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 0925b7fc
authored
2025-11-27 14:17:41 +0800
by
tanghuan
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
调整下载和解压
1 parent
51f507f4
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
82 additions
and
32 deletions
lib/bloc/web_cubit.dart
lib/services/local_server_service.dart
lib/bloc/web_cubit.dart
View file @
0925b7f
...
@@ -178,8 +178,6 @@ class WebCubit extends Cubit<WebState> {
...
@@ -178,8 +178,6 @@ class WebCubit extends Cubit<WebState> {
WebViewController
get
controller
=>
_controller
;
WebViewController
get
controller
=>
_controller
;
WebCubit
(
super
.
initialState
)
{
WebCubit
(
super
.
initialState
)
{
print
(
'========================== 构造 WebCubit =========================='
);
// 没有登录数据,跳转到登录页面
// 没有登录数据,跳转到登录页面
if
(
state
.
sessionCode
==
null
||
state
.
sessionCode
==
''
)
{
if
(
state
.
sessionCode
==
null
||
state
.
sessionCode
==
''
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
{
...
@@ -191,11 +189,12 @@ class WebCubit extends Cubit<WebState> {
...
@@ -191,11 +189,12 @@ class WebCubit extends Cubit<WebState> {
}
}
Future
<
void
>
_init
()
async
{
Future
<
void
>
_init
()
async
{
try
{
// 获取版本信息
// 获取版本信息
var
versionConfig
=
await
_getVersionConfig
();
var
versionConfig
=
await
_getVersionConfig
();
var
correctVersion
=
versionConfig
[
'version'
]
as
String
;
var
correctVersion
=
versionConfig
[
'version'
]
as
String
;
var
downloadUrl
=
versionConfig
[
'zip'
]
as
String
;
var
downloadUrl
=
versionConfig
[
'zip'
]
as
String
;
var
urgency
=
versionConfig
[
'urgency'
]
as
int
?
??
1
;
var
urgency
=
versionConfig
[
'urgency'
]
as
int
?
??
0
;
// 当前使用的H5版本
// 当前使用的H5版本
var
curVersion
=
getIt
.
get
<
SharedPreferences
>().
getString
(
'h5_version'
)
??
Constant
.
h5Version
;
var
curVersion
=
getIt
.
get
<
SharedPreferences
>().
getString
(
'h5_version'
)
??
Constant
.
h5Version
;
...
@@ -206,7 +205,7 @@ class WebCubit extends Cubit<WebState> {
...
@@ -206,7 +205,7 @@ class WebCubit extends Cubit<WebState> {
// 一直等待升级完成
// 一直等待升级完成
// 遮罩界面
// 遮罩界面
emit
(
state
.
copyWith
(
isUpgrading:
true
));
emit
(
state
.
copyWith
(
isUpgrading:
true
));
await
_upgrade
(
cur
Version
,
downloadUrl
);
await
_upgrade
(
correct
Version
,
downloadUrl
);
// 升级完成后取消遮罩,继续初始化其它数据
// 升级完成后取消遮罩,继续初始化其它数据
emit
(
state
.
copyWith
(
isUpgrading:
false
));
emit
(
state
.
copyWith
(
isUpgrading:
false
));
}
else
{
}
else
{
...
@@ -218,6 +217,10 @@ class WebCubit extends Cubit<WebState> {
...
@@ -218,6 +217,10 @@ class WebCubit extends Cubit<WebState> {
);
);
}
}
}
}
}
catch
(
e
)
{
print
(
'升级检测处理失败'
);
print
(
e
);
}
// 消息处理器
// 消息处理器
_dispatcher
=
MessageDispatcher
();
_dispatcher
=
MessageDispatcher
();
...
@@ -269,30 +272,38 @@ class WebCubit extends Cubit<WebState> {
...
@@ -269,30 +272,38 @@ class WebCubit extends Cubit<WebState> {
try
{
try
{
// 下载zip文件
// 下载zip文件
var
tempDir
=
await
getTemporaryDirectory
();
var
tempDir
=
await
getTemporaryDirectory
();
var
save
FilePath
=
'
${tempDir.path}
/
${Uuid().v4()}
.zip'
;
var
temp
FilePath
=
'
${tempDir.path}
/
${Uuid().v4()}
.zip'
;
Response
response
=
await
dio
.
download
(
zipUrl
,
save
FilePath
);
Response
response
=
await
dio
.
download
(
zipUrl
,
temp
FilePath
);
if
(
response
.
statusCode
!=
200
)
{
if
(
response
.
statusCode
!=
200
)
{
throw
Exception
(
'文件下载失败'
);
throw
Exception
(
'文件下载失败'
);
}
}
// 解压zip文件
var
dir
=
await
getApplicationSupportDirectory
();
String
?
httpDirect
;
String
httpDirPath
=
'
${dir.path}
/
${Constant.h5DistDir}
'
;
if
(
Platform
.
isAndroid
)
{
var
direct
=
await
getExternalStorageDirectory
();
var
httpDir
=
Directory
(
httpDirPath
);
httpDirect
=
'
${direct?.path}
/
${Constant.h5DistDir}
/
$version
'
;
if
(!
httpDir
.
existsSync
())
{
}
else
if
(
Platform
.
isIOS
||
Platform
.
isMacOS
)
{
await
httpDir
.
create
(
recursive:
true
);
var
direct
=
await
getApplicationSupportDirectory
();
httpDirect
=
'
${direct.path}
/
${Constant.h5DistDir}
/
$version
'
;
}
}
var
result
=
await
ZipUtil
.
extractZipFile
(
saveFilePath
,
httpDirect
!);
var
tempZipFile
=
File
(
tempFilePath
);
var
saveZipFilePath
=
'
$httpDirPath
/
$version
.zip'
;
// 复制zip文件,保留备用
await
tempZipFile
.
copy
(
saveZipFilePath
);
// 删除临时文件
await
tempZipFile
.
delete
();
// 解压zip文件
String
targetDir
=
'
$httpDirPath
/
$version
'
;
var
result
=
await
ZipUtil
.
extractZipFile
(
saveZipFilePath
,
targetDir
);
if
(!
result
)
{
if
(!
result
)
{
throw
Exception
(
'文件解压失败'
);
throw
Exception
(
'文件解压失败'
);
}
}
var
sharedPreferences
=
await
SharedPreferences
.
getInstance
();
var
sharedPreferences
=
await
SharedPreferences
.
getInstance
();
sharedPreferences
.
setString
(
'h5_version'
,
version
);
await
sharedPreferences
.
setString
(
'h5_version'
,
version
);
}
finally
{
}
finally
{
dio
.
close
(
force:
true
);
dio
.
close
(
force:
true
);
}
}
...
@@ -318,10 +329,6 @@ class WebCubit extends Cubit<WebState> {
...
@@ -318,10 +329,6 @@ class WebCubit extends Cubit<WebState> {
print
(
'onPageFinished--------------------------------->'
);
print
(
'onPageFinished--------------------------------->'
);
print
(
url
);
print
(
url
);
/*if (url == '${Constant.localServerTestFileUrl}/login.html') {
return;
}*/
_controller
.
runJavaScript
(
_controller
.
runJavaScript
(
'document.querySelector("meta[name=viewport]").setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no")'
,
'document.querySelector("meta[name=viewport]").setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no")'
,
);
);
...
@@ -474,12 +481,53 @@ class WebCubit extends Cubit<WebState> {
...
@@ -474,12 +481,53 @@ class WebCubit extends Cubit<WebState> {
_controller
.
reload
();
_controller
.
reload
();
}
}
///
/// 1 清理非 h5_version 的缓存
/// 2 清理文件目录和缓存目录(不包括解压的H5资源目录)
///
Future
<
void
>
clearStorage
()
async
{
Future
<
void
>
clearStorage
()
async
{
await
getIt
.
get
<
SharedPreferences
>().
clear
();
var
sharedPreferences
=
getIt
.
get
<
SharedPreferences
>();
sharedPreferences
.
getKeys
().
forEach
((
key
)
{
if
(!
key
.
startsWith
(
'h5_version'
))
{
sharedPreferences
.
remove
(
key
);
}
});
var
version
=
sharedPreferences
.
getString
(
'h5_version'
)
??
Constant
.
h5Version
;
var
dir
=
await
getApplicationSupportDirectory
();
String
httpDirPath
=
'
${dir.path}
/
${Constant.h5DistDir}
'
;
var
httpDir
=
Directory
(
httpDirPath
);
if
(!
httpDir
.
existsSync
())
{
return
;
}
// 查询目录下的所有文件和目录
List
<
FileSystemEntity
>
entities
=
await
Directory
(
httpDirPath
).
list
().
toList
();
for
(
var
entity
in
entities
)
{
if
(
entity
is
Directory
)
{
// 删除目录
if
(!
entity
.
path
.
endsWith
(
version
))
{
await
entity
.
delete
(
recursive:
true
);
}
}
else
if
(
entity
is
File
)
{
// 删除文件
if
(!
entity
.
path
.
endsWith
(
'
$version
.zip'
))
{
await
entity
.
delete
();
}
}
}
}
}
Future
<
void
>
logout
()
async
{
Future
<
void
>
logout
()
async
{
await
clearStorage
();
// 删除所有auth_开头的key
var
sharedPreferences
=
getIt
.
get
<
SharedPreferences
>();
sharedPreferences
.
getKeys
().
forEach
((
key
)
{
if
(
key
.
startsWith
(
'auth_'
))
{
sharedPreferences
.
remove
(
key
);
}
});
// IM 登出
// IM 登出
await
getIt
.
get
<
ImService
>().
logout
();
await
getIt
.
get
<
ImService
>().
logout
();
...
@@ -513,17 +561,18 @@ class WebCubit extends Cubit<WebState> {
...
@@ -513,17 +561,18 @@ class WebCubit extends Cubit<WebState> {
TextButton
(
TextButton
(
child:
Text
(
'取消'
),
child:
Text
(
'取消'
),
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
).
pop
();
emit
(
state
.
copyWith
(
suggestUpgrade:
false
));
emit
(
state
.
copyWith
(
suggestUpgrade:
false
));
Navigator
.
of
(
context
).
pop
();
},
},
),
),
TextButton
(
TextButton
(
child:
Text
(
'确定'
),
child:
Text
(
'确定'
),
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
).
pop
();
emit
(
state
.
copyWith
(
suggestUpgrade:
false
));
emit
(
state
.
copyWith
(
suggestUpgrade:
false
));
getIt
.
get
<
LocalServerService
>().
resetHttpDirectory
();
getIt
.
get
<
LocalServerService
>().
resetHttpDirectory
();
_loadHtml
();
_controller
.
reload
();
// _loadHtml();
Navigator
.
of
(
context
).
pop
();
},
},
),
),
],
],
...
...
lib/services/local_server_service.dart
View file @
0925b7f
...
@@ -150,14 +150,9 @@ class LocalServerService {
...
@@ -150,14 +150,9 @@ class LocalServerService {
Future
<
void
>
_initHttpDirectory
()
async
{
Future
<
void
>
_initHttpDirectory
()
async
{
var
version
=
getIt
.
get
<
SharedPreferences
>().
getString
(
'h5_version'
)
??
Constant
.
h5Version
;
var
version
=
getIt
.
get
<
SharedPreferences
>().
getString
(
'h5_version'
)
??
Constant
.
h5Version
;
if
(
Platform
.
isAndroid
)
{
var
direct
=
await
getExternalStorageDirectory
();
_httpDirectory
=
'
${direct?.path}
/
${Constant.h5DistDir}
/
$version
'
;
}
else
if
(
Platform
.
isIOS
||
Platform
.
isMacOS
)
{
var
direct
=
await
getApplicationSupportDirectory
();
var
direct
=
await
getApplicationSupportDirectory
();
_httpDirectory
=
'
${direct.path}
/
${Constant.h5DistDir}
/
$version
'
;
_httpDirectory
=
'
${direct.path}
/
${Constant.h5DistDir}
/
$version
'
;
}
}
}
Future
<
void
>
_extractDist
()
async
{
Future
<
void
>
_extractDist
()
async
{
var
outputDirectory
=
await
_getHttpDirectory
();
var
outputDirectory
=
await
_getHttpDirectory
();
...
@@ -167,7 +162,13 @@ class LocalServerService {
...
@@ -167,7 +162,13 @@ class LocalServerService {
// return;
// return;
// }
// }
var
zipFilePath
=
"assets/dist.zip"
;
// 判断H5打包文件是否存在,不存在则从assets中解压
await
ZipUtil
.
extractZipFile
(
zipFilePath
,
outputDirectory
);
var
version
=
getIt
.
get
<
SharedPreferences
>().
getString
(
'h5_version'
)
??
Constant
.
h5Version
;
var
dir
=
await
getApplicationSupportDirectory
();
var
distFilePath
=
'
${dir.path}
/
${Constant.h5DistDir}
/
$version
.zip'
;
if
(!
File
(
distFilePath
).
existsSync
())
{
distFilePath
=
'assets/dist.zip'
;
}
await
ZipUtil
.
extractZipFile
(
distFilePath
,
outputDirectory
);
}
}
}
}
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