Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
book-app
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
book-app
Commits
09c92a44
提交
09c92a44
authored
3月 25, 2024
作者:
岳维路
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'test' 到 'sim'
Test 查看合并请求 kiwitap/zijing-app!18
上级
10f6be1a
34109609
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
258 行增加
和
84 行删除
+258
-84
view.dart
lib/pages/book_detail/view.dart
+17
-29
view.dart
lib/pages/book_info/view.dart
+11
-6
controller.dart
lib/pages/library/controller.dart
+186
-15
index.dart
lib/pages/library/index.dart
+4
-0
view.dart
lib/pages/library/view.dart
+4
-3
controller.dart
lib/pages/login/controller.dart
+2
-1
controller.dart
lib/pages/read_web/controller.dart
+26
-28
index.dart
lib/pages/read_web/index.dart
+2
-0
view_offline.dart
lib/pages/read_web/view_offline.dart
+0
-0
controller.dart
lib/pages/user_edit_note/controller.dart
+1
-1
routes.dart
lib/routes/routes.dart
+2
-1
http.dart
lib/services/http.dart
+1
-0
index.dart
lib/services/index.dart
+2
-0
没有找到文件。
lib/pages/book_detail/view.dart
浏览文件 @
09c92a44
...
...
@@ -108,13 +108,7 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
});
}
else
{
final
PopBackModel
?
backModel
=
await
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
chapterModel
.
id
.
toString
(),
'chapter_name'
:
chapterModel
.
name
.
toString
(),
'note_id'
:
'0'
},
extra:
controller
.
bookDetails
);
if
(
backModel
!.
back
==
true
){
controller
.
getChapters
();
// controller.setCurrentReadChapterId(backModel!.chapterId);
controller
.
currentChapterId
=
int
.
parse
(
backModel
!.
chapterId
);
controller
.
getBookDetails
();
}
pushToReadPage
(
controller:
controller
,
chapterName:
chapterModel
.
name
.
toString
(),
chapterId:
chapterModel
.
id
.
toString
());
}
},
),
...
...
@@ -209,13 +203,7 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
if
(
controller
.
bookDetails
.
isFree
==
1
){
final
String
chapterId
=
await
controller
.
getCurrentChapterId
();
final
String
chapterName
=
await
controller
.
getCurrentChapterName
();
final
PopBackModel
?
backModel
=
await
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
chapterId
,
'chapter_name'
:
chapterName
,
'note_id'
:
'0'
},
extra:
controller
.
bookDetails
);
if
(
backModel
!.
back
==
true
){
controller
.
getChapters
();
controller
.
currentChapterId
=
int
.
parse
(
backModel
!.
chapterId
);
controller
.
getBookDetails
();
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
pushToReadPage
(
controller:
controller
,
chapterName:
chapterName
,
chapterId:
chapterId
);
}
else
{
// 没有购买
...
...
@@ -243,27 +231,14 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
else
{
final
String
chapterId
=
await
controller
.
getCurrentChapterId
();
final
String
chapterName
=
await
controller
.
getCurrentChapterName
();
final
PopBackModel
?
backModel
=
await
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
chapterId
,
'chapter_name'
:
chapterName
,
'note_id'
:
'0'
},
extra:
controller
.
bookDetails
);
if
(
backModel
!.
back
==
true
){
controller
.
getChapters
();
controller
.
getBookDetails
();
controller
.
currentChapterId
=
int
.
parse
(
backModel
!.
chapterId
);
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
pushToReadPage
(
controller:
controller
,
chapterName:
chapterName
,
chapterId:
chapterId
);
}
}
else
{
final
String
chapterId
=
await
controller
.
getCurrentChapterId
();
final
String
chapterName
=
await
controller
.
getCurrentChapterName
();
final
PopBackModel
?
backModel
=
await
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
chapterId
,
'chapter_name'
:
chapterName
,
'note_id'
:
'0'
},
extra:
controller
.
bookDetails
);
if
(
backModel
!.
back
==
true
){
controller
.
getChapters
();
controller
.
currentChapterId
=
int
.
parse
(
backModel
!.
chapterId
);
controller
.
getBookDetails
();
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
pushToReadPage
(
controller:
controller
,
chapterName:
chapterName
,
chapterId:
chapterId
);
}
}
...
...
@@ -289,5 +264,18 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
}
void
pushToReadPage
({
required
BookDetailController
controller
,
required
String
chapterName
,
required
String
chapterId
,
})
async
{
final
PopBackModel
?
backModel
=
await
context
.
pushNamed
(
Routes
.
web
,
queryParameters:
{
'book_id'
:
controller
.
bookDetails
.
bookId
.
toString
(),
'chapter_id'
:
chapterId
,
'chapter_name'
:
chapterName
,
'note_id'
:
'0'
},
extra:
controller
.
bookDetails
);
if
(
backModel
!.
back
==
true
){
controller
.
getChapters
();
controller
.
currentChapterId
=
int
.
parse
(
backModel
!.
chapterId
);
controller
.
getBookDetails
();
// controller.setCurrentReadChapterId(backModel!.chapterId);
}
}
}
lib/pages/book_info/view.dart
浏览文件 @
09c92a44
...
...
@@ -108,14 +108,19 @@ class BookInfoPage extends StatelessWidget {
{
'name'
:
'上架时间'
,
'value'
:
Tools
.
dateFromMS
(
model
.
onsaleTime
!.
toInt
(),
pattern:
'yyyy年MM月dd日'
)},
].
map
((
item
){
return
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Container
(
// color: Colors.cyan,
alignment:
Alignment
.
centerRight
,
width:
60
.
w
,
child:
Text
(
item
[
'name'
].
toString
(),
style:
const
TextStyle
(
fontSize:
15
,
height:
2.1
,
color:
Colours
.
c3
),),
Row
(
children:
[
Container
(
// color: Colors.cyan,
alignment:
Alignment
.
centerRight
,
width:
80
.
w
,
child:
Text
(
item
[
'name'
].
toString
(),
style:
const
TextStyle
(
fontSize:
15
,
height:
2.1
,
color:
Colours
.
c3
),),
),
Gaps
.
hGaps20
,
],
),
Gaps
.
hGaps20
,
Expanded
(
child:
Container
(
// color: Colors.red,
...
...
lib/pages/library/controller.dart
浏览文件 @
09c92a44
part of
library
;
class
LibraryController
extends
GetxController
with
GetTickerProviderStateMixin
{
final
BuildContext
context
;
LibraryController
(
this
.
context
);
// 分类数据
List
<
CategoryModel
>
categories
=
[];
// 标签数据
...
...
@@ -49,6 +51,8 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
late
AnimationController
_controller
;
bool
_show
=
false
;
late
UModel
_getModel
;
bool
get
show
=>
_show
;
void
setShow
(
bool
value
)
{
_show
=
!
value
;
...
...
@@ -85,21 +89,13 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
_getTabs
();
// 获取广告数据
_getAds
();
// 检测版本
// if(Platform.isAndroid){
// _checkUpdates();
// }
// 测试添加数据库数据
// testInsertData();
// Map<String, dynamic> data = {
// 'types': 1,
// 'book_id': 175,
// 'chapter_id': 334,
// 'is_open': 1,
// 'color': 'blue',
// 'content': 'This is a note content',
// 'upload': 0,
// 'positioning': 'top',
// 'note_content': 'This is a note',
// 'node_id': 0,
// };
//
// await SqlManager.insertData(data);
final
result
=
await
Tools
.
checkCurrentNetStatus
();
// 有网络 并且是登录状态 的时候上传 笔记
...
...
@@ -378,6 +374,180 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
}
}
void
testInsertData
()
async
{
Map
<
String
,
dynamic
>
data
=
{
'types'
:
1
,
'book_id'
:
175
,
'chapter_id'
:
334
,
'is_open'
:
1
,
'color'
:
'blue'
,
'content'
:
'This is a note content'
,
'upload'
:
0
,
'positioning'
:
'top'
,
'note_content'
:
'This is a note'
,
'node_id'
:
0
,
};
await
SqlManager
.
insertData
(
data
);
}
void
_checkUpdates
()
async
{
UModel
model
=
await
MineAPI
.
update
();
_getModel
=
model
;
final
packageInfo
=
await
PackageInfo
.
fromPlatform
();
int
update
=
verifyVersion
(
model
.
version
!,
packageInfo
.
version
);
if
(
update
==
1
)
{
_showUpdateDialog
(
false
);
}
}
int
verifyVersion
(
String
newVersion
,
String
oldVersion
)
{
List
<
String
>
newVersionArr
=
newVersion
.
split
(
'.'
);
List
<
String
>
oldVersionArr
=
oldVersion
.
split
(
'.'
);
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
int
newVersionNumber
=
int
.
parse
(
newVersionArr
[
i
]);
int
oldVersionNumber
=
int
.
parse
(
oldVersionArr
[
i
]);
if
(
newVersionNumber
<
oldVersionNumber
)
{
return
-
1
;
// 新版本小于旧版本
}
else
if
(
newVersionNumber
>
oldVersionNumber
)
{
return
1
;
// 新版本大于旧版本
}
}
return
0
;
// 两个版本号相等
}
_showUpdateDialog
(
bool
forcedUpgrade
)
{
showDialog
(
context:
context
,
barrierDismissible:
!
forcedUpgrade
,
builder:
(
BuildContext
context
)
{
return
WillPopScope
(
onWillPop:
()
=>
Future
.
value
(!
forcedUpgrade
),
child:
AlertDialog
(
insetPadding:
EdgeInsets
.
zero
,
// 设置水平边距
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
8.0
.
w
),
),
// 去除操作按钮区域的内边距
actionsPadding:
EdgeInsets
.
zero
,
actions:
<
Widget
>[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Column
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
SizedBox
(
height:
25.5
.
w
,
),
SizedBox
(
height:
92
.
w
,
width:
92
.
w
,
child:
Image
.
asset
(
'assets/images/app_update.png'
),
),
SizedBox
(
height:
13
.
w
,
),
Text
(
"版本更新"
,
style:
TextStyle
(
fontSize:
14
.
w
,
color:
Colours
.
c3
,
fontWeight:
Fonts
.
medium
),
),
Padding
(
padding:
EdgeInsets
.
only
(
top:
5.5
.
w
),
child:
Text
(
'发现新版本V
${_getModel.version}
'
,
style:
TextStyle
(
fontSize:
10
.
w
,
color:
Colours
.
c9
,
fontWeight:
Fonts
.
medium
),
),
),
SizedBox
(
height:
22
.
w
,
),
Container
(
height:
1
,
// 设置分割线的高度
width:
216.5
.
w
,
// 设置分割线的宽度
color:
Colours
.
cLine
,
// 设置分割线的颜色
),
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
if
(!
forcedUpgrade
)
Padding
(
padding:
EdgeInsets
.
only
(
right:
28
.
w
),
child:
GestureDetector
(
child:
Container
(
width:
85
.
w
,
color:
Colours
.
cFF
,
alignment:
Alignment
.
center
,
child:
const
Text
(
'稍后再说'
,
style:
TextStyle
(
color:
Colours
.
c6
,
fontSize:
15
,
fontWeight:
Fonts
.
medium
),
),
),
onTap:
()
=>
Navigator
.
of
(
context
).
pop
(),
),),
Container
(
height:
39.5
.
w
,
// 设置分割线的高度
width:
1
,
// 设置分割线的宽度
color:
Colours
.
cLine
,
// 设置分割线的颜色
),
Padding
(
padding:
EdgeInsets
.
only
(
left:
28
.
w
),
child:
GestureDetector
(
child:
Container
(
width:
85
.
w
,
color:
Colours
.
cFF
,
alignment:
Alignment
.
center
,
child:
const
Text
(
'立即更新'
,
style:
TextStyle
(
color:
Colours
.
cAB1941
,
fontSize:
15
,
fontWeight:
Fonts
.
boldSemi
),
),
),
onTap:
()
{
_appUpdate
();
if
(!
forcedUpgrade
)
{
Navigator
.
of
(
context
).
pop
();
}
},
),
),
],
),
],
),
],
),
],
),
);
},
);
}
/// TODO: 苹果市场app地址
_appUpdate
()
{
UpdateModel
model
=
UpdateModel
(
_getModel
.
url
!,
"zijing.apk"
,
"ic_launcher"
,
'https://itunes.apple.com/cn/app/抖音/id1142110895'
,
);
AzhonAppUpdate
.
update
(
model
).
then
((
value
)
=>
debugPrint
(
'
$value
'
));
}
}
\ No newline at end of file
lib/pages/library/index.dart
浏览文件 @
09c92a44
library
library
;
import
'dart:convert'
;
import
'dart:io'
;
import
'package:azlistview/azlistview.dart'
;
import
'package:easy_refresh/easy_refresh.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_app_update/azhon_app_update.dart'
;
import
'package:flutter_app_update/update_model.dart'
;
import
'package:flutter_book/apis/index.dart'
;
import
'package:flutter_book/theme.dart'
;
import
'package:flutter_book/utils/index.dart'
;
...
...
@@ -12,6 +15,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import
'package:get/get.dart'
;
import
'package:go_router/go_router.dart'
;
import
'package:ionicons/ionicons.dart'
;
import
'package:package_info_plus/package_info_plus.dart'
;
import
'../../models/index.dart'
;
import
'../../routes/index.dart'
;
...
...
lib/pages/library/view.dart
浏览文件 @
09c92a44
...
...
@@ -9,10 +9,11 @@ class LibraryPage extends StatefulWidget {
class
_LibraryPageState
extends
State
<
LibraryPage
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
GetBuilder
<
LibraryController
>(
init:
LibraryController
(),
init:
LibraryController
(
context
),
builder:
(
controller
)
=>
Scaffold
(
appBar:
AppBar
(
title:
const
Text
(
'图书馆'
),
...
...
@@ -131,7 +132,7 @@ class _LibraryPageState extends State<LibraryPage> {
height:
43
.
w
,
color:
Colours
.
cF9
,
child:
GetBuilder
<
LibraryController
>(
init:
LibraryController
(),
init:
LibraryController
(
context
),
// id: 'label',
builder:
(
controller
)
=>
ListView
.
builder
(
scrollDirection:
Axis
.
horizontal
,
...
...
@@ -153,7 +154,7 @@ class _LibraryPageState extends State<LibraryPage> {
return
Container
(
height:
38
.
w
,
child:
GetBuilder
<
LibraryController
>(
init:
LibraryController
(),
init:
LibraryController
(
context
),
builder:
(
controller
)
=>
ListView
.
builder
(
scrollDirection:
Axis
.
horizontal
,
itemBuilder:
(
BuildContext
context
,
int
index
){
...
...
lib/pages/login/controller.dart
浏览文件 @
09c92a44
...
...
@@ -153,7 +153,8 @@ class LoginController extends GetxController {
// ]);
if
(
context
.
mounted
){
context
.
goNamed
(
Routes
.
main
);
// context.goNamed(Routes.main);
context
.
pop
();
}
else
{
context
.
goNamed
(
Routes
.
main
);
}
...
...
lib/pages/read_web/controller.dart
浏览文件 @
09c92a44
...
...
@@ -282,36 +282,35 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// 初始化录音组件
Future
<
void
>
openTheRecorder
()
async
{
// 获取权限
if
(
await
Access
.
microphone
()){
await
_mRecorder
.
openRecorder
();
final
session
=
await
AudioSession
.
instance
;
await
session
.
configure
(
AudioSessionConfiguration
(
avAudioSessionCategory:
AVAudioSessionCategory
.
playAndRecord
,
avAudioSessionCategoryOptions:
AVAudioSessionCategoryOptions
.
allowBluetooth
|
AVAudioSessionCategoryOptions
.
defaultToSpeaker
,
avAudioSessionMode:
AVAudioSessionMode
.
spokenAudio
,
avAudioSessionRouteSharingPolicy:
AVAudioSessionRouteSharingPolicy
.
defaultPolicy
,
avAudioSessionSetActiveOptions:
AVAudioSessionSetActiveOptions
.
none
,
androidAudioAttributes:
const
AndroidAudioAttributes
(
contentType:
AndroidAudioContentType
.
speech
,
flags:
AndroidAudioFlags
.
none
,
usage:
AndroidAudioUsage
.
voiceCommunication
,
),
androidAudioFocusGainType:
AndroidAudioFocusGainType
.
gain
,
androidWillPauseWhenDucked:
true
,
));
}
// 没有权限
else
{
}
var
status
=
await
Access
.
microphone
();
if
(
status
==
false
)
{
Toast
.
show
(
'录音权限没有开启无法使用该功能'
);
return
;
}
await
_mRecorder
.
openRecorder
();
final
session
=
await
AudioSession
.
instance
;
await
session
.
configure
(
AudioSessionConfiguration
(
avAudioSessionCategory:
AVAudioSessionCategory
.
playAndRecord
,
avAudioSessionCategoryOptions:
AVAudioSessionCategoryOptions
.
allowBluetooth
|
AVAudioSessionCategoryOptions
.
defaultToSpeaker
,
avAudioSessionMode:
AVAudioSessionMode
.
spokenAudio
,
avAudioSessionRouteSharingPolicy:
AVAudioSessionRouteSharingPolicy
.
defaultPolicy
,
avAudioSessionSetActiveOptions:
AVAudioSessionSetActiveOptions
.
none
,
androidAudioAttributes:
const
AndroidAudioAttributes
(
contentType:
AndroidAudioContentType
.
speech
,
flags:
AndroidAudioFlags
.
none
,
usage:
AndroidAudioUsage
.
voiceCommunication
,
),
androidAudioFocusGainType:
AndroidAudioFocusGainType
.
gain
,
androidWillPauseWhenDucked:
true
,
));
}
// 开启录音
void
record
()
async
{
openTheRecorder
();
await
openTheRecorder
();
startRecording
=
true
;
String
filePath
=
await
Tools
.
getDirectory
();
String
fileName
=
Tools
.
generateVoiceFileName
();
...
...
@@ -323,7 +322,6 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
codec:
Codec
.
aacMP4
,
);
// _mRecorder?.setSubscriptionDuration(Duration(milliseconds: 100));
// _mRecorder?.onProgress?.listen((e)
// {
...
...
lib/pages/read_web/index.dart
浏览文件 @
09c92a44
...
...
@@ -51,3 +51,4 @@ part 'discuss_controller.dart';
part
'widgets/input_discuss.dart'
;
part
'widgets/item.dart'
;
part
'widgets/search_all.dart'
;
part
'view_offline.dart'
;
\ No newline at end of file
lib/pages/read_web/view_offline.dart
0 → 100644
浏览文件 @
09c92a44
差异被折叠。
点击展开。
lib/pages/user_edit_note/controller.dart
浏览文件 @
09c92a44
...
...
@@ -116,7 +116,7 @@ class UserEditNoteController extends GetxController {
// 开启录音
void
record
()
async
{
openTheRecorder
();
await
openTheRecorder
();
update
();
startRecording
=
true
;
String
filePath
=
await
Tools
.
getDirectory
();
...
...
lib/routes/routes.dart
浏览文件 @
09c92a44
...
...
@@ -134,10 +134,11 @@ abstract class Routes {
// 图片预览
static
const
imageView
=
'image_view'
;
static
final
GlobalKey
<
NavigatorState
>
navigatorKey
=
GlobalKey
<
NavigatorState
>();
static
final
GoRouter
config
=
GoRouter
(
navigatorKey:
navigatorKey
,
initialLocation:
'/
$splash
'
,
// initialLocation: '/',
observers:
[
observer
],
...
...
lib/services/http.dart
浏览文件 @
09c92a44
...
...
@@ -326,6 +326,7 @@ class _RequestInterceptor extends Interceptor {
final
String
accessToken
=
result
.
data
[
'access_token'
];
if
(
token
.
isEmpty
&&
accessToken
.
isEmpty
){
UserStore
.
to
.
logout
();
// Routes.config.goNamed(Routes.login);
return
null
;
}
await
Future
.
wait
([
...
...
lib/services/index.dart
浏览文件 @
09c92a44
...
...
@@ -12,7 +12,9 @@ import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import
'package:get/get.dart'
hide
Response
,
FormData
,
MultipartFile
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'../main.dart'
;
import
'../models/index.dart'
;
import
'../routes/index.dart'
;
export
'package:dio/dio.dart'
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论