Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
book-app
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
book-app
Commits
08fd23b2
提交
08fd23b2
authored
3月 15, 2024
作者:
岳维路
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'test' 到 'sim'
Test 查看合并请求 kiwitap/zijing-app!12
上级
1c2024f2
3231ec75
显示空白字符变更
内嵌
并排
正在显示
35 个修改的文件
包含
293 行增加
和
69 行删除
+293
-69
library.dart
lib/apis/library.dart
+2
-2
mine.dart
lib/apis/mine.dart
+1
-0
library.dart
lib/models/library.dart
+13
-1
view.dart
lib/pages/answer/view.dart
+1
-1
item.dart
lib/pages/book_category/widgets/item.dart
+5
-4
controller.dart
lib/pages/book_detail/controller.dart
+22
-0
view.dart
lib/pages/book_detail/view.dart
+16
-8
item.dart
lib/pages/help_center/widgets/item.dart
+1
-1
index.dart
lib/pages/image_view/index.dart
+1
-0
view.dart
lib/pages/image_view/view.dart
+7
-4
controller.dart
lib/pages/library/controller.dart
+17
-4
view.dart
lib/pages/library/view.dart
+4
-3
filter.dart
lib/pages/library/widgets/filter.dart
+14
-9
view.dart
lib/pages/main/view.dart
+14
-1
index.dart
lib/pages/read_info/index.dart
+11
-0
view.dart
lib/pages/read_info/view.dart
+37
-0
controller.dart
lib/pages/read_web/controller.dart
+7
-2
discuss_controller.dart
lib/pages/read_web/discuss_controller.dart
+3
-0
note_controller.dart
lib/pages/read_web/note_controller.dart
+3
-0
view.dart
lib/pages/read_web/view.dart
+29
-2
category.dart
lib/pages/read_web/widgets/category.dart
+6
-1
discuss.dart
lib/pages/read_web/widgets/discuss.dart
+11
-1
item.dart
lib/pages/read_web/widgets/item.dart
+3
-3
note.dart
lib/pages/read_web/widgets/note.dart
+18
-3
search_all.dart
lib/pages/read_web/widgets/search_all.dart
+3
-0
history.dart
lib/pages/search/widgets/history.dart
+1
-1
item.dart
lib/pages/study_history/widgets/item.dart
+8
-3
view.dart
lib/pages/study_report/view.dart
+1
-1
card.dart
lib/pages/study_report/widgets/card.dart
+10
-4
note.dart
lib/pages/user_notes_des/widgets/note.dart
+1
-1
index.dart
lib/routes/index.dart
+1
-0
routes.dart
lib/routes/routes.dart
+14
-2
http.dart
lib/services/http.dart
+3
-2
constants.dart
lib/utils/constants.dart
+3
-3
input.dart
lib/widgets/input.dart
+2
-2
没有找到文件。
lib/apis/library.dart
浏览文件 @
08fd23b2
...
...
@@ -156,7 +156,7 @@ abstract class LibraryAPI {
'book_id'
:
bookId
,
'chapter_id'
:
chapterId
},
showLoading:
true
//
showLoading: true
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
...
...
@@ -179,7 +179,7 @@ abstract class LibraryAPI {
'book_id'
:
bookId
,
'chapter_id'
:
chapterId
},
showLoading:
true
,
//
showLoading: true,
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
...
...
lib/apis/mine.dart
浏览文件 @
08fd23b2
...
...
@@ -379,6 +379,7 @@ abstract class MineAPI {
'type'
:
type
,
'identifying'
:
identifying
,
},
showLoading:
true
);
if
(
result
.
data
is
!
Map
)
return
PayOrderModel
();
return
PayOrderModel
.
fromJson
(
result
.
data
);
...
...
lib/models/library.dart
浏览文件 @
08fd23b2
...
...
@@ -132,7 +132,8 @@ class ChapterModel {
this
.
sort
,
this
.
seen
,
this
.
children
,
this
.
selected
=
false
this
.
selected
=
false
,
this
.
currentRead
=
false
});
ChapterModel
.
fromJson
(
dynamic
json
)
{
...
...
@@ -150,6 +151,7 @@ class ChapterModel {
});
}
selected
=
false
;
currentRead
=
false
;
}
num
?
id
;
String
?
name
;
...
...
@@ -159,6 +161,7 @@ class ChapterModel {
num
?
sort
;
num
?
seen
;
late
bool
selected
;
late
bool
currentRead
;
List
<
ChapterModel
>?
children
;
ChapterModel
copyWith
({
num
?
id
,
String
?
name
,
...
...
@@ -589,3 +592,12 @@ class SearchAllModel {
}
class
PopBackModel
{
PopBackModel
({
required
this
.
chapterId
,
required
this
.
back
});
String
chapterId
;
bool
back
;
}
lib/pages/answer/view.dart
浏览文件 @
08fd23b2
...
...
@@ -17,7 +17,7 @@ class _AnswerPageState extends State<AnswerPage> {
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
title:
const
Text
(
'知识测评
'
),
title:
Text
(
'
${widget.params['title']}
'
),
),
body:
InAppWebView
(
initialUrlRequest:
URLRequest
(
...
...
lib/pages/book_category/widgets/item.dart
浏览文件 @
08fd23b2
...
...
@@ -114,6 +114,7 @@ class _BuildItemState extends State<BuildItem> {
onTap:
(){
if
(
chapterModel
.
children
!.
isEmpty
){
widget
.
onTap
(
chapterModel
);
chapterModel
.
currentRead
=
true
;
}
else
{
setState
(()
{
...
...
@@ -134,7 +135,7 @@ class _BuildItemState extends State<BuildItem> {
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
.
w
),
height:
3
0
.
w
,
height:
4
0
.
w
,
color:
Colors
.
white
,
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
...
...
@@ -158,7 +159,7 @@ class _BuildItemState extends State<BuildItem> {
):
const
SizedBox
(),
],
),
Transform
.
rotate
(
chapterModel
.
children
!.
isEmpty
?
const
SizedBox
():
Transform
.
rotate
(
angle:
chapterModel
.
selected
?
0
:-
90
*
(
3.141592653589793
/
180
),
child:
GestureDetector
(
onTap:
(){
...
...
@@ -167,8 +168,8 @@ class _BuildItemState extends State<BuildItem> {
});
},
child:
SizedBox
(
width:
20
.
w
,
height:
20
.
w
,
width:
12
.
w
,
height:
6
.
w
,
// color: Colors.red,
child:
Image
.
asset
(
'assets/images/down.png'
)
),
...
...
lib/pages/book_detail/controller.dart
浏览文件 @
08fd23b2
...
...
@@ -14,6 +14,8 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
const
Tab
(
text:
'本书信息'
,),
];
num
currentChapterId
=
0
;
// 目录
List
<
ChapterModel
>
chapters
=
[];
// 图书
...
...
@@ -48,6 +50,25 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
}
}
/// 设置当前读的章节id
void
setCurrentReadChapterId
(){
for
(
ChapterModel
chapterModel
in
chapters
){
writeCurrentReadChapterIdToData
(
chapterModel
);
}
}
void
writeCurrentReadChapterIdToData
(
ChapterModel
chapterModel
){
for
(
ChapterModel
cModel
in
chapterModel
.
children
!){
cModel
.
currentRead
=
false
;
if
(
cModel
.
id
==
currentChapterId
){
cModel
.
currentRead
=
true
;
cModel
.
selected
=
true
;
chapterModel
.
selected
=
true
;
}
writeCurrentReadChapterIdToData
(
chapterModel
);
}
}
/// 写入特定数据
...
...
@@ -68,6 +89,7 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
writeData
(
chapters
,
result
);
chapters
=
result
;
setCurrentReadChapterId
();
update
();
}
...
...
lib/pages/book_detail/view.dart
浏览文件 @
08fd23b2
...
...
@@ -113,9 +113,11 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
controller
.
getBookDetails
();
}
}
else
{
final
result
=
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
(
result
==
true
){
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
);
}
}
},
...
...
@@ -211,9 +213,11 @@ 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
result
=
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
(
result
==
true
){
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.setCurrentReadChapterId(backModel!.chapterId);
}
}
else
{
...
...
@@ -242,9 +246,11 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
else
{
final
String
chapterId
=
await
controller
.
getCurrentChapterId
();
final
String
chapterName
=
await
controller
.
getCurrentChapterName
();
final
result
=
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
(
result
==
true
){
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.setCurrentReadChapterId(backModel!.chapterId);
}
}
}
...
...
@@ -253,9 +259,11 @@ class _BookDetailPageState extends State<BookDetailPage> with SingleTickerProvid
final
String
chapterId
=
await
controller
.
getCurrentChapterId
();
final
String
chapterName
=
await
controller
.
getCurrentChapterName
();
final
result
=
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
(
result
==
true
){
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.setCurrentReadChapterId(backModel!.chapterId);
}
}
...
...
lib/pages/help_center/widgets/item.dart
浏览文件 @
08fd23b2
...
...
@@ -27,7 +27,7 @@ class BuildItem extends StatelessWidget {
child:
Text
(
model
.
helpTitle
??
''
,
style:
TextStyle
(
fontSize:
12
.
w
,
height:
1.5
.
w
,
color:
Colours
.
c
9
),
fontSize:
12
.
w
,
height:
1.5
.
w
,
color:
Colours
.
c
3
),
),
),
],
...
...
lib/pages/image_view/index.dart
浏览文件 @
08fd23b2
...
...
@@ -3,6 +3,7 @@ library image_view;
import
'package:extended_image/extended_image.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_book/utils/index.dart'
;
import
'package:go_router/go_router.dart'
;
...
...
lib/pages/image_view/view.dart
浏览文件 @
08fd23b2
...
...
@@ -2,9 +2,11 @@ part of image_view;
class
ImageViewPage
extends
StatefulWidget
{
final
List
<
String
>
images
;
final
int
currentIndex
;
const
ImageViewPage
({
Key
?
key
,
required
this
.
images
required
this
.
images
,
required
this
.
currentIndex
})
:
super
(
key:
key
);
@override
...
...
@@ -36,15 +38,16 @@ class _ImageViewPageState extends State<ImageViewPage> {
color:
Colors
.
black
,
child:
ExtendedImageGesturePageView
.
builder
(
controller:
ExtendedPageController
(
initialPage:
0
,
initialPage:
widget
.
currentIndex
,
pageSpacing:
50
,
),
onPageChanged:
(
int
page
)
{
//
_preloadImage(page - 1);
//
_preloadImage(page + 1);
_preloadImage
(
page
-
1
);
_preloadImage
(
page
+
1
);
},
itemCount:
widget
.
images
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
)
{
Console
.
log
(
'-index---------------------------
$index
----'
);
return
GestureDetector
(
onTap:
(){
context
.
pop
();
...
...
lib/pages/library/controller.dart
浏览文件 @
08fd23b2
...
...
@@ -121,12 +121,18 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
for
(
FilterModel
model
in
filterCategories
){
model
.
selected
=
false
;
}
filterCategories
.
first
.
selected
=
true
;
if
(
filterCategories
.
isNotEmpty
){
selectedCategory
=
filterCategories
.
first
;
selectedCategory
.
selected
=
true
;
}
for
(
FilterModel
model
in
filterLabels
){
model
.
selected
=
false
;
}
filterLabels
.
first
.
selected
=
true
;
if
(
filterLabels
.
isNotEmpty
){
selectedLabel
=
filterLabels
.
first
;
selectedLabel
.
selected
=
true
;
}
for
(
FilterModel
model
in
filterFree
){
model
.
selected
=
false
;
...
...
@@ -135,8 +141,9 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
for
(
FilterModel
model
in
filterDown
){
model
.
selected
=
false
;
}
update
();
// onRefresh();
update
();
}
/// 确定
...
...
@@ -202,10 +209,14 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
categories
=
await
LibraryAPI
.
categories
();
tabController
.
dispose
();
tabController
=
TabController
(
length:
categories
.
length
,
vsync:
this
);
categories
.
first
.
selected
=
true
;
filterCategories
=
categories
.
map
((
model
)
{
return
FilterModel
(
id:
model
.
categoryId
.
toString
(),
name:
model
.
name
??
''
,
selected:
model
.
selected
);
}).
toList
();
if
(
filterCategories
.
isNotEmpty
){
selectedCategory
=
filterCategories
.
first
;
selectedCategory
.
selected
=
true
;
}
update
();
}
...
...
@@ -216,8 +227,10 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
filterLabels
=
labels
.
map
((
model
)
{
return
FilterModel
(
id:
model
.
labelId
.
toString
(),
name:
model
.
name
??
''
,
selected:
model
.
selected
);
}).
toList
();
if
(
filterLabels
.
isNotEmpty
){
selectedLabel
=
filterLabels
.
first
;
selectedLabel
.
selected
=
true
;
}
update
([
'label'
]);
...
...
lib/pages/library/view.dart
浏览文件 @
08fd23b2
...
...
@@ -41,8 +41,8 @@ class _LibraryPageState extends State<LibraryPage> {
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
Expanded
(
child:
_buildCategory
()),
GestureDetector
(
controller
.
filterCategories
.
isEmpty
?
const
SizedBox
():
Expanded
(
child:
_buildCategory
()),
controller
.
filterCategories
.
isEmpty
?
const
SizedBox
():
GestureDetector
(
onTap:
(){
controller
.
setShow
(
controller
.
show
);
},
...
...
@@ -115,7 +115,8 @@ class _LibraryPageState extends State<LibraryPage> {
controller
.
sureFilter
();
},
resetTap:
(){
// controller.setShow(controller.show);
controller
.
resetFilter
();
},),
),
],
...
...
lib/pages/library/widgets/filter.dart
浏览文件 @
08fd23b2
...
...
@@ -26,12 +26,18 @@ class _FilterPageState extends State<FilterPage> {
// return FilterModel(id: model.labelId.toString(), name: model.name??'');
// }).toList();
return
Container
(
return
GestureDetector
(
onTap:
(){
widget
.
controller
.
setShow
(
widget
.
controller
.
show
);
},
child:
Container
(
color:
const
Color
(
0xFF000000
).
withOpacity
(
0.5
),
child:
SingleChildScrollView
(
child:
Column
(
children:
[
Container
(
GestureDetector
(
behavior:
HitTestBehavior
.
opaque
,
onTap:
(){},
child:
Container
(
color:
Colors
.
white
,
width:
double
.
infinity
,
padding:
EdgeInsets
.
only
(
bottom:
10
.
w
),
...
...
@@ -41,8 +47,8 @@ class _FilterPageState extends State<FilterPage> {
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
_buildWrapWidget
(
'分类'
,
widget
.
controller
.
filterCategories
),
_buildWrapWidget
(
'标签'
,
widget
.
controller
.
filterLabels
),
widget
.
controller
.
filterCategories
.
isEmpty
?
const
SizedBox
():
_buildWrapWidget
(
'分类'
,
widget
.
controller
.
filterCategories
),
widget
.
controller
.
filterLabels
.
isEmpty
?
const
SizedBox
():
_buildWrapWidget
(
'标签'
,
widget
.
controller
.
filterLabels
),
_buildWrapWidget
(
'是否收费'
,
widget
.
controller
.
filterFree
),
_buildWrapWidget
(
'排序'
,
widget
.
controller
.
filterDown
),
],
...
...
@@ -51,6 +57,7 @@ class _FilterPageState extends State<FilterPage> {
),
),
),
Container
(
padding:
EdgeInsets
.
only
(
left:
10
.
w
,
right:
10
.
w
,
top:
30
.
w
,
bottom:
10
.
w
),
color:
Colors
.
white
,
...
...
@@ -60,9 +67,7 @@ class _FilterPageState extends State<FilterPage> {
children:
[
Expanded
(
child:
GestureDetector
(
onTap:
(){
widget
.
controller
.
resetFilter
();
},
onTap:
widget
.
resetTap
,
child:
Container
(
alignment:
Alignment
.
center
,
height:
35
.
w
,
...
...
@@ -109,7 +114,7 @@ class _FilterPageState extends State<FilterPage> {
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Container
(
margin:
EdgeInsets
.
only
(
left:
10
.
w
,
bottom:
1
0
.
w
,
top:
10
.
w
),
margin:
EdgeInsets
.
only
(
left:
10
.
w
,
bottom:
1
5
.
w
,
top:
15
.
w
),
child:
Text
(
title
,
style:
TextStyle
(
fontSize:
15
.
w
,
height:
1.6
,
color:
Colours
.
c3
,
fontWeight:
Fonts
.
boldSemi
),)
),
Container
(
...
...
lib/pages/main/view.dart
浏览文件 @
08fd23b2
...
...
@@ -47,7 +47,19 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver{
),
bottomNavigationBar:
GetBuilder
<
MainController
>(
id:
'navigation'
,
builder:
(
controller
)
=>
BottomNavigationBar
(
builder:
(
controller
)
=>
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
boxShadow:
[
BoxShadow
(
color:
const
Color
(
0xFFE0E0E0
).
withOpacity
(
0.5
),
spreadRadius:
0
,
blurRadius:
4.5
,
offset:
const
Offset
(
0
,
0
),
),
],
),
child:
BottomNavigationBar
(
currentIndex:
controller
.
currentPage
,
onTap:
(
page
){
if
(
page
!=
1
&&
!
UserStore
.
to
.
isLogin
)
{
...
...
@@ -121,6 +133,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver{
]
),
),
),
)
);
}
...
...
lib/pages/read_info/index.dart
0 → 100644
浏览文件 @
08fd23b2
library
read_info
;
import
'dart:convert'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_inappwebview/flutter_inappwebview.dart'
;
import
'package:go_router/go_router.dart'
;
import
'../../utils/index.dart'
;
part
'view.dart'
;
\ No newline at end of file
lib/pages/read_info/view.dart
0 → 100644
浏览文件 @
08fd23b2
part of
read_info
;
class
ReadInfoPage
extends
StatefulWidget
{
final
Map
<
String
,
String
>
params
;
const
ReadInfoPage
({
Key
?
key
,
required
this
.
params
})
:
super
(
key:
key
);
@override
State
<
ReadInfoPage
>
createState
()
=>
_ReadInfoPageState
();
}
class
_ReadInfoPageState
extends
State
<
ReadInfoPage
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
title:
Text
(
'
${widget.params['title']}
'
),
),
body:
InAppWebView
(
initialUrlRequest:
URLRequest
(
url:
WebUri
.
uri
(
Uri
.
parse
(
kReadInfo
))
),
onLoadStop:
(
controller
,
url
)
{
String
jsonStr
=
jsonEncode
(
widget
.
params
);
controller
.
evaluateJavascript
(
source
:
'callbackInFlutterComponent(
$jsonStr
)'
);
},
onConsoleMessage:
(
controller
,
consoleMessage
)
{
// 接收从 WebView 发送的消息
Console
.
log
(
"画廊扩展阅读-------Received message from WebView-----------------------------:
${consoleMessage.message}
"
);
},
)
);
}
}
lib/pages/read_web/controller.dart
浏览文件 @
08fd23b2
...
...
@@ -96,7 +96,8 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
initTts
();
netStatus
=
await
Tools
.
checkCurrentNetStatus
();
discussTitleFocusNode
.
addListener
(
_onCommentFocusChanged
);
await
ScreenProtector
.
preventScreenshotOn
();
// 开启防截屏
// await ScreenProtector.preventScreenshotOn();
super
.
onInit
();
}
...
...
@@ -135,7 +136,8 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
contentInput
.
dispose
();
flutterTts
.
stop
();
searchInput
.
dispose
();
await
ScreenProtector
.
preventScreenshotOff
();
// 关闭防截屏
// await ScreenProtector.preventScreenshotOff();
super
.
onClose
();
}
///------------------------------------------ 页面 生命周期--------------------------------------------------------
...
...
@@ -167,6 +169,9 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
}
void
setShowSearch
(
bool
show
){
if
(
show
==
false
){
searchInput
.
text
=
''
;
}
showSearch
=
show
;
update
();
}
...
...
lib/pages/read_web/discuss_controller.dart
浏览文件 @
08fd23b2
...
...
@@ -62,6 +62,9 @@ class DiscussController extends GetxController {
}
void
setShowSearch
(
bool
show
){
if
(
show
==
false
){
searchInput
.
text
=
''
;
}
showSearch
=
show
;
update
();
}
...
...
lib/pages/read_web/note_controller.dart
浏览文件 @
08fd23b2
...
...
@@ -46,6 +46,9 @@ class NoteController extends GetxController {
}
void
setShowSearch
(
bool
show
){
if
(
show
==
false
){
searchInput
.
text
=
''
;
}
showSearch
=
show
;
update
();
}
...
...
lib/pages/read_web/view.dart
浏览文件 @
08fd23b2
...
...
@@ -27,9 +27,10 @@ class _ReadPageState extends State<ReadPage> {
}
@override
Widget
build
(
BuildContext
context
)
{
PopBackModel
backModel
=
PopBackModel
(
chapterId:
widget
.
chapterId
,
back:
true
);
return
WillPopScope
(
onWillPop:
()
async
{
context
.
pop
(
true
);
context
.
pop
(
backModel
);
CustomToast
.
dismiss
();
return
false
;
},
...
...
@@ -168,7 +169,10 @@ class _ReadPageState extends State<ReadPage> {
String
chapterId
=
args
.
first
[
0
].
toString
();
String
position
=
args
.
first
[
1
].
toString
();
// 0:未答题 1:答题结果
String
type
=
args
.
first
[
2
].
toString
();
// 测评标题
String
title
=
args
.
first
[
3
].
toString
();
String
url
=
''
;
// 未答题
if
(
type
==
'0'
){
...
...
@@ -182,7 +186,8 @@ class _ReadPageState extends State<ReadPage> {
'position'
:
position
,
'url'
:
url
,
'book_id'
:
readController
.
bookId
,
'token'
:
UserStore
.
to
.
token
'token'
:
UserStore
.
to
.
token
,
'title'
:
title
};
Console
.
log
(
'监听答题回调---------------给页面传参---------------------------------
$params
'
);
context
.
pushNamed
(
Routes
.
answer
,
queryParameters:
params
);
...
...
@@ -210,6 +215,24 @@ class _ReadPageState extends State<ReadPage> {
context
.
pushNamed
(
Routes
.
link
,
queryParameters:
{
'url'
:
args
.
first
.
toString
()});
});
// 画廊 扩展于都
controller
.
addJavaScriptHandler
(
handlerName:
'readInfoCallback'
,
callback:
(
args
){
String
position
=
args
.
first
[
0
].
toString
();
String
type
=
args
.
first
[
1
].
toString
();
String
title
=
args
.
first
[
2
].
toString
();
Map
<
String
,
String
>
params
=
{
'chapter_id'
:
readController
.
chapterId
,
'position'
:
position
,
'book_id'
:
readController
.
bookId
,
'token'
:
UserStore
.
to
.
token
,
'title'
:
title
,
'base_url'
:
kServerUrl
,
'type'
:
type
};
Console
.
log
(
'监听画廊 扩展于都---------------给页面传参---------------------------------
$params
'
);
context
.
pushNamed
(
Routes
.
readInfo
,
queryParameters:
params
);
});
/// 离线需要参数
// //
...
...
@@ -403,6 +426,10 @@ class _ReadPageState extends State<ReadPage> {
controller
.
selectChapter
(
ChapterModel
(
id:
sModel
.
chapterId
,
name:
sModel
.
chapterName
));
controller
.
webViewController
.
reload
();
},
// 删除笔记后 重新刷新web页
delTapCallBack:
(){
controller
.
webViewController
.
reload
();
},
bookDetailModel:
controller
.
bookDetailModel
,
chapterId:
controller
.
chapterId
,
);
...
...
lib/pages/read_web/widgets/category.dart
浏览文件 @
08fd23b2
...
...
@@ -87,6 +87,10 @@ class _ReadCategoryPageState extends State<ReadCategoryPage> {
],
),
widget
.
controller
.
showSearch
?
Expanded
(
child:
CustomPullScrollView
(
controller:
widget
.
controller
.
refreshController
,
onRefresh:
widget
.
controller
.
onRefreshSearch
,
onLoading:
widget
.
controller
.
onLoadingSearch
,
child:
BuildSearchAll
(
onTap:
(
SearchAllModel
sModel
){
if
(
widget
.
onTapSearchItem
!=
null
)
{
...
...
@@ -94,7 +98,8 @@ class _ReadCategoryPageState extends State<ReadCategoryPage> {
}
},
searchALlResults:
widget
.
controller
.
searchALlResults
,)):
,),
)):
widget
.
controller
.
showSearch
?
const
SizedBox
():
BuildBook
(
bookDetailModel:
widget
.
controller
.
bookDetailModel
,),
widget
.
controller
.
showSearch
?
const
SizedBox
():
Expanded
(
child:
ListView
.
builder
(
...
...
lib/pages/read_web/widgets/discuss.dart
浏览文件 @
08fd23b2
...
...
@@ -88,6 +88,10 @@ class _ReadDiscussPageState extends State<ReadDiscussPage> {
],
),
controller
.
showSearch
?
Expanded
(
child:
CustomPullScrollView
(
controller:
controller
.
refreshController
,
onRefresh:
controller
.
onRefreshSearch
,
onLoading:
controller
.
onLoadingSearch
,
child:
BuildSearchAll
(
onTap:
(
SearchAllModel
sModel
){
if
(
widget
.
onTapSearchItem
!=
null
)
{
...
...
@@ -95,12 +99,17 @@ class _ReadDiscussPageState extends State<ReadDiscussPage> {
}
},
searchALlResults:
controller
.
searchALlResults
,
),
)):
controller
.
showSearch
?
const
SizedBox
():
BuildBook
(
bookDetailModel:
widget
.
bookDetailModel
,),
controller
.
showSearch
?
const
SizedBox
():
Expanded
(
child:
Stack
(
children:
[
ListView
.
builder
(
CustomPullScrollView
(
controller:
controller
.
refreshController
,
onRefresh:
controller
.
onRefresh
,
onLoading:
controller
.
onLoading
,
child:
ListView
.
builder
(
itemBuilder:
(
BuildContext
context
,
int
index
){
DiscussModel
model
=
controller
.
discuss
[
index
];
return
BuildDiscuss
(
...
...
@@ -114,6 +123,7 @@ class _ReadDiscussPageState extends State<ReadDiscussPage> {
},
itemCount:
controller
.
discuss
.
length
,
),
),
Visibility
(
visible:
controller
.
showReply
,
child:
Positioned
(
...
...
lib/pages/read_web/widgets/item.dart
浏览文件 @
08fd23b2
...
...
@@ -121,7 +121,7 @@ class _BuildItemState extends State<BuildItem> {
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
.
w
),
height:
3
0
.
w
,
height:
4
0
.
w
,
color:
Colors
.
white
,
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
...
...
@@ -154,8 +154,8 @@ class _BuildItemState extends State<BuildItem> {
});
},
child:
Container
(
width:
20
.
w
,
height:
20
.
w
,
width:
12
.
w
,
height:
6
.
w
,
// color: Colors.red,
child:
Image
.
asset
(
'assets/images/down.png'
)
),
...
...
lib/pages/read_web/widgets/note.dart
浏览文件 @
08fd23b2
...
...
@@ -7,12 +7,14 @@ class ReadNotePage extends StatefulWidget {
// 当前的章节id
final
String
chapterId
;
final
void
Function
()?
onTap
;
final
void
Function
()
delTapCallBack
;
const
ReadNotePage
({
Key
?
key
,
required
this
.
onTap
,
required
this
.
bookDetailModel
,
required
this
.
chapterId
,
this
.
onTapSearchItem
this
.
onTapSearchItem
,
required
this
.
delTapCallBack
})
:
super
(
key:
key
);
@override
...
...
@@ -85,20 +87,30 @@ class _ReadNotePageState extends State<ReadNotePage> {
):
const
SizedBox
(),
],
),
controller
.
showSearch
?
Expanded
(
child:
BuildSearchAll
(
controller
.
showSearch
?
Expanded
(
child:
CustomPullScrollView
(
controller:
controller
.
refreshController
,
onRefresh:
controller
.
onRefreshSearch
,
onLoading:
controller
.
onLoadingSearch
,
child:
BuildSearchAll
(
onTap:
(
SearchAllModel
sModel
){
if
(
widget
.
onTapSearchItem
!=
null
)
{
widget
.
onTapSearchItem
!(
sModel
);
}
},
searchALlResults:
controller
.
searchALlResults
),
)):
controller
.
showSearch
?
const
SizedBox
():
BuildBook
(
bookDetailModel:
widget
.
bookDetailModel
,),
controller
.
showSearch
?
const
SizedBox
():
Expanded
(
child:
MediaQuery
.
removePadding
(
context:
context
,
removeTop:
true
,
child:
ListView
.
builder
(
child:
CustomPullScrollView
(
controller:
controller
.
refreshController
,
onRefresh:
controller
.
onRefresh
,
onLoading:
controller
.
onLoading
,
child:
ListView
.
builder
(
itemBuilder:
(
BuildContext
context
,
int
index
){
NoteModel
model
=
controller
.
notes
[
index
];
// 划线
...
...
@@ -107,6 +119,7 @@ class _ReadNotePageState extends State<ReadNotePage> {
model:
model
,
onTapDel:
(){
controller
.
delNotes
(
noteModel:
model
,
bookId:
widget
.
bookDetailModel
.
bookId
.
toString
());
widget
.
delTapCallBack
();
},
);
}
...
...
@@ -116,6 +129,7 @@ class _ReadNotePageState extends State<ReadNotePage> {
model:
model
,
onTapDel:
(){
controller
.
delNotes
(
noteModel:
model
,
bookId:
widget
.
bookDetailModel
.
bookId
.
toString
());
widget
.
delTapCallBack
();
},
);
}
...
...
@@ -139,6 +153,7 @@ class _ReadNotePageState extends State<ReadNotePage> {
),
),
),
),
],
),
);
...
...
lib/pages/read_web/widgets/search_all.dart
浏览文件 @
08fd23b2
...
...
@@ -26,6 +26,8 @@ class _BuildSearchAllState extends State<BuildSearchAll> {
widget
.
onTap
!(
model
);
}
},
child:
Container
(
color:
Colors
.
white
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
...
...
@@ -45,6 +47,7 @@ class _BuildSearchAllState extends State<BuildSearchAll> {
Gaps
.
vGaps10
,
Container
(
height:
0.5
.
w
,
color:
Colours
.
cF2
,)
],
),
)
);
},
...
...
lib/pages/search/widgets/history.dart
浏览文件 @
08fd23b2
...
...
@@ -79,7 +79,7 @@ class _BuildHistoryState extends State<BuildHistory> {
),
child:
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
3
),
child:
Text
(
e
,
style:
const
TextStyle
(
fontSize:
13
,
height:
1.
4
,
color:
Colours
.
c3
),
textAlign:
TextAlign
.
center
,),
child:
Text
(
e
,
style:
const
TextStyle
(
fontSize:
13
,
height:
1.
5
,
color:
Colours
.
c3
),
textAlign:
TextAlign
.
center
,),
),
),
);
...
...
lib/pages/study_history/widgets/item.dart
浏览文件 @
08fd23b2
...
...
@@ -82,10 +82,11 @@ class BuildDayItem extends StatelessWidget {
Expanded
(
child:
Container
(
// color: Colors.green,
height:
86
.
w
,
padding:
EdgeInsets
.
only
(
top:
2.5
.
w
,
left:
13
.
w
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
//
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -95,7 +96,7 @@ class BuildDayItem extends StatelessWidget {
Text
(
courseModel
.
authors
??
''
,
style:
TextStyle
(
fontSize:
12
.
w
,
height:
1.4
,
color:
Colours
.
c6
),),
],
),
Gaps
.
vGaps25
,
//
Gaps.vGaps25,
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
...
...
@@ -105,7 +106,11 @@ class BuildDayItem extends StatelessWidget {
child:
Text
(
courseModel
.
typeName
,
style:
TextStyle
(
fontSize:
11
.
w
,
height:
1.3
,
color:
AppTheme
.
primary
),),
),
// Spacer(),
Text
(
'上次读到:
${courseModel.lastChapter}
'
,
style:
TextStyle
(
fontSize:
11
.
w
,
height:
1.3
,
color:
Colours
.
c6
),)
Container
(
width:
120
,
alignment:
Alignment
.
centerLeft
,
child:
Text
(
'上次读到:
${courseModel.lastChapter}
'
,
style:
TextStyle
(
fontSize:
11
.
w
,
height:
1.3
,
color:
Colours
.
c6
),
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,),
)
],
)
],
...
...
lib/pages/study_report/view.dart
浏览文件 @
08fd23b2
...
...
@@ -167,7 +167,7 @@ class _StudyReportPageState extends State<StudyReportPage> {
children:
[
RichText
(
text:
TextSpan
(
children:
[
TextSpan
(
text:
'
总回顾
'
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
,
color:
Colours
.
c9
),),
TextSpan
(
text:
'
测评总数
'
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
,
color:
Colours
.
c9
),),
WidgetSpan
(
child:
SizedBox
(
width:
36
.
w
),),
TextSpan
(
text:
controller
.
model
.
questionAllNums
!=
null
?
controller
.
model
.
questionAllNums
.
toString
():
''
,
style:
TextStyle
(
fontSize:
21
.
w
,
height:
1.5
,
color:
Colours
.
c3
,
fontWeight:
Fonts
.
medium
)),
TextSpan
(
text:
'/条'
,
style:
TextStyle
(
fontSize:
13
.
w
,
height:
1.5
,
color:
Colours
.
c3
)),
...
...
lib/pages/study_report/widgets/card.dart
浏览文件 @
08fd23b2
...
...
@@ -24,7 +24,11 @@ class BuildCard extends StatelessWidget {
right:
0
,
child:
Container
(
padding:
EdgeInsets
.
only
(
left:
17.5
.
w
,
top:
25
.
w
,
right:
20
.
w
,
bottom:
20
.
w
),
child:
Row
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
model
.
bookName
??
''
,
style:
TextStyle
(
fontSize:
18
.
w
,
height:
1.4
,
color:
Colors
.
white
,
fontWeight:
Fonts
.
boldSemi
),),
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
crossAxisAlignment:
CrossAxisAlignment
.
end
,
children:
[
...
...
@@ -33,7 +37,7 @@ class BuildCard extends StatelessWidget {
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
model
.
bookName
??
''
,
style:
TextStyle
(
fontSize:
18
.
w
,
height:
1.4
,
color:
Colors
.
white
,
fontWeight:
Fonts
.
boldSemi
),),
//
Text(model.bookName??'',style: TextStyle(fontSize: 18.w,height: 1.4,color: Colors.white,fontWeight: Fonts.boldSemi),),
Gaps
.
vGaps15
,
Row
(
children:
[
...
...
@@ -57,13 +61,15 @@ class BuildCard extends StatelessWidget {
]
),
),
Container
(
CustomCard
(
url:
model
.
img
??
''
,
height:
120
.
w
,
width:
100
.
w
,
child:
CustomImage
.
network
(
url:
model
.
img
??
''
),
)
],
),
],
),
)
)
],
...
...
lib/pages/user_notes_des/widgets/note.dart
浏览文件 @
08fd23b2
...
...
@@ -165,7 +165,7 @@ class BuildNote extends StatelessWidget {
List
<
String
>
images
=
model
.
noteContent
?.
image
?.
map
((
MediaModel
model
)
=>
model
.
content
??
''
).
toList
()??[];
return
GestureDetector
(
onTap:
(){
context
.
pushNamed
(
Routes
.
imageView
,
extra:
images
);
context
.
pushNamed
(
Routes
.
imageView
,
extra:
images
,
queryParameters:
{
'index'
:
index
.
toString
()}
);
},
child:
Stack
(
children:
[
...
...
lib/routes/index.dart
浏览文件 @
08fd23b2
...
...
@@ -18,6 +18,7 @@ import 'package:flutter_book/pages/help_cneter_content/index.dart';
import
'package:flutter_book/pages/link/index.dart'
;
import
'package:flutter_book/pages/login/index.dart'
;
import
'package:flutter_book/pages/main/index.dart'
;
import
'package:flutter_book/pages/read_info/index.dart'
;
import
'package:flutter_book/pages/reset_pwd/index.dart'
;
import
'package:flutter_book/pages/search/index.dart'
;
import
'package:flutter_book/pages/splash/index.dart'
;
...
...
lib/routes/routes.dart
浏览文件 @
08fd23b2
...
...
@@ -12,7 +12,7 @@ abstract class Routes {
static
const
web
=
'read_web'
;
static
const
answer
=
'answer'
;
static
const
readInfo
=
'read_info'
;
// 支付界面
static
const
bookPay
=
'book_pay'
;
...
...
@@ -703,7 +703,18 @@ abstract class Routes {
)
)
),
GoRoute
(
// 知识测评
GoRoute
(
// 画廊 扩展阅读
path:
'/
$readInfo
'
,
name:
readInfo
,
pageBuilder:
(
context
,
state
)
=>
CupertinoPage
(
name:
state
.
uri
.
toString
(),
key:
state
.
pageKey
,
child:
ReadInfoPage
(
params:
state
.
uri
.
queryParameters
,
)
)
),
GoRoute
(
// 图片预览
path:
'/
$imageView
'
,
name:
imageView
,
pageBuilder:
(
context
,
state
)
=>
BottomToTopTransitionPage
(
...
...
@@ -711,6 +722,7 @@ abstract class Routes {
key:
state
.
pageKey
,
child:
ImageViewPage
(
images:
state
.
extra
as
List
<
String
>,
currentIndex:
int
.
parse
(
state
.
uri
.
queryParameters
[
'index'
].
toString
()),
)
)
...
...
lib/services/http.dart
浏览文件 @
08fd23b2
...
...
@@ -99,6 +99,7 @@ class HttpService extends GetxService {
try
{
final
requestOptions
=
options
??
Options
();
requestOptions
.
headers
=
_getHeaders
(
excludeToken:
excludeToken
,
params:
params
,
url:
url
);
Console
.
log
(
'----headers------
${requestOptions.headers}
\n
----params------
$params
-----'
);
// 如果启用缓存,将cacheEnabled参数添加到请求选项中
if
(
cacheEnabled
){
requestOptions
.
extra
??=
{};
...
...
@@ -111,7 +112,6 @@ class HttpService extends GetxService {
cancelToken:
cancelToken
,
);
if
(
showLoading
)
CustomToast
.
dismiss
();
Console
.
log
(
'----headers------
${requestOptions.headers}
\n
----params------
$params
-----'
);
Console
.
log
(
response
.
data
);
return
ResponseModel
.
fromJson
(
response
.
data
);
}
catch
(
error
){
...
...
@@ -245,7 +245,8 @@ class _RequestInterceptor extends Interceptor {
Console
.
log
(
'----------403---------access_token-------------------------
${UserStore.to.accessToken}
--------------------'
);
msg
=
'
$statusCode
- Unauthorized'
;
final
newToken
=
await
refreshToken
();
if
(
newToken
!=
null
)
{
Console
.
log
(
'newToken----------
$newToken
'
);
if
(
newToken
!=
null
&&
newToken
.
isNotEmpty
)
{
final
RequestOptions
requestOptions
=
err
.
requestOptions
;
final
headers
=
requestOptions
.
headers
;
headers
[
'Authorization'
]
=
newToken
;
...
...
lib/utils/constants.dart
浏览文件 @
08fd23b2
...
...
@@ -25,9 +25,9 @@ const String kReadBook = '$kServerUrl/html/app/read.html';
// 答题页
const
String
kAnswer
=
'
$kServerUrl
/html/app/evaluating.html'
;
// 答题结果页
const
String
kAnswerResult
=
'
$kServerUrl
/html/app
/evaluating_result.html'
;
const
String
kAnswerResult
=
'
http://150.158.138.40:9200
/evaluating_result.html'
;
// 画廊 扩展阅读
const
String
kReadInfo
=
'http://150.158.138.40:9200/read_info.html'
;
...
...
lib/widgets/input.dart
浏览文件 @
08fd23b2
...
...
@@ -378,8 +378,8 @@ class CustomInputSearch extends StatelessWidget {
onTap:
onTap
,
style:
TextStyle
(
// fontFamily: 'Sans',
fontSize:
1
6
.
w
,
height:
1.
2
,
fontSize:
1
2
.
w
,
height:
1.
5
,
),
decoration:
InputDecoration
(
border:
OutlineInputBorder
(
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论