Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
book-app
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
book-app
Commits
15eff61b
提交
15eff61b
authored
1月 21, 2024
作者:
maodou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1:搜索页面搜索结果显示
2:我的-帮助中心功能及帮助中心内容显示
上级
e87a8a03
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
453 行增加
和
12 行删除
+453
-12
mine.dart
lib/apis/mine.dart
+0
-0
mine.dart
lib/models/mine.dart
+0
-0
controller.dart
lib/pages/help_center/controller.dart
+70
-0
index.dart
lib/pages/help_center/index.dart
+20
-0
view.dart
lib/pages/help_center/view.dart
+62
-0
item.dart
lib/pages/help_center/widgets/item.dart
+47
-0
controller.dart
lib/pages/help_cneter_content/controller.dart
+20
-0
index.dart
lib/pages/help_cneter_content/index.dart
+15
-0
view.dart
lib/pages/help_cneter_content/view.dart
+77
-0
view.dart
lib/pages/mine/view.dart
+6
-0
controller.dart
lib/pages/search/controller.dart
+54
-1
index.dart
lib/pages/search/index.dart
+3
-0
view.dart
lib/pages/search/view.dart
+55
-11
index.dart
lib/routes/index.dart
+2
-0
routes.dart
lib/routes/routes.dart
+22
-0
pubspec.lock
pubspec.lock
+0
-0
没有找到文件。
lib/apis/mine.dart
浏览文件 @
15eff61b
差异被折叠。
点击展开。
lib/models/mine.dart
浏览文件 @
15eff61b
差异被折叠。
点击展开。
lib/pages/help_center/controller.dart
0 → 100644
浏览文件 @
15eff61b
part of
help_center
;
class
HelpCenterController
extends
GetxController
{
final
EasyRefreshController
refreshController
=
EasyRefreshController
(
controlFinishLoad:
true
,
controlFinishRefresh:
true
,
);
final
int
_limit
=
10
;
int
_page
=
1
;
bool
_noMore
=
false
;
List
<
HelpCenterModel
>
helpCenters
=
[];
@override
void
onClose
()
{
refreshController
.
dispose
();
super
.
onClose
();
}
/// 获取课程内图书列表
Future
<
void
>
_gethelpCenters
([
bool
isRefresh
=
false
])
async
{
if
(
isRefresh
)
_page
=
1
;
// 网路请求
final
result
=
await
MineAPI
.
helpCenters
(
page:
_page
,
limit:
_limit
);
// 如果是刷新 清理数据
if
(
isRefresh
)
helpCenters
.
clear
();
helpCenters
.
addAll
(
result
);
_page
++;
_noMore
=
result
.
length
<
_limit
;
update
();
}
void
onRefresh
()
async
{
try
{
await
_gethelpCenters
(
true
);
refreshController
.
finishRefresh
(
IndicatorResult
.
success
);
refreshController
.
resetFooter
();
}
catch
(
error
)
{
refreshController
.
finishRefresh
(
IndicatorResult
.
fail
);
}
}
void
onLoading
()
async
{
if
(
_noMore
)
{
refreshController
.
finishLoad
(
IndicatorResult
.
noMore
);
return
;
}
try
{
await
_gethelpCenters
();
refreshController
.
finishLoad
();
}
catch
(
error
)
{
refreshController
.
finishLoad
(
IndicatorResult
.
fail
);
}
}
List
<
HelpCenterModel
>
test
(){
return
[
HelpCenterModel
(
id:
1
,
helpTitle:
'账号注册'
),
HelpCenterModel
(
id:
2
,
helpTitle:
'如何进行充值'
),
HelpCenterModel
(
id:
3
,
helpTitle:
'如何对内容进行划线'
),
];
}
}
\ No newline at end of file
lib/pages/help_center/index.dart
0 → 100644
浏览文件 @
15eff61b
library
help_center
;
import
'package:easy_refresh/easy_refresh.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_book/apis/index.dart'
;
import
'package:flutter_book/widgets/index.dart'
;
import
'package:flutter_screenutil/flutter_screenutil.dart'
;
import
'package:get/get.dart'
;
import
'package:go_router/go_router.dart'
;
import
'../../models/index.dart'
;
import
'../../routes/index.dart'
;
import
'../../utils/index.dart'
;
part
'view.dart'
;
part
'controller.dart'
;
part
'widgets/item.dart'
;
\ No newline at end of file
lib/pages/help_center/view.dart
0 → 100644
浏览文件 @
15eff61b
part of
help_center
;
class
HelpCenterPage
extends
StatefulWidget
{
const
HelpCenterPage
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
HelpCenterPage
>
createState
()
=>
_HelpCenterPageState
();
}
class
_HelpCenterPageState
extends
State
<
HelpCenterPage
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
GetBuilder
<
HelpCenterController
>(
init:
HelpCenterController
(),
builder:
(
controller
)
=>
Scaffold
(
appBar:
AppBar
(
centerTitle:
true
,
title:
const
Text
(
'帮助中心'
),
),
body:
CustomPullScrollView
(
controller:
controller
.
refreshController
,
onRefresh:
controller
.
onRefresh
,
onLoading:
controller
.
onLoading
,
child:
SingleChildScrollView
(
child:
Container
(
margin:
EdgeInsets
.
all
(
10
.
w
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
.
w
),
color:
Colors
.
white
,
boxShadow:
[
BoxShadow
(
color:
const
Color
(
0xFFC7C7C7
).
withOpacity
(
0.5
),
offset:
Offset
(
3
.
w
,
0
),
blurRadius:
10
.
w
,
spreadRadius:
0
.
w
,
),
],
),
child:
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
8
.
w
),
child:
ListView
.
builder
(
shrinkWrap:
true
,
physics:
const
NeverScrollableScrollPhysics
(),
itemCount:
controller
.
helpCenters
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
){
HelpCenterModel
model
=
controller
.
helpCenters
[
index
];
return
GestureDetector
(
child:
BuildItem
(
model:
model
,),
onTap:
(){
context
.
pushNamed
(
Routes
.
helpCenterContent
,
queryParameters:
{
'id'
:
model
.
id
.
toString
()});
},
);
}),
),
),
),
),
));
}
}
lib/pages/help_center/widgets/item.dart
0 → 100644
浏览文件 @
15eff61b
part of
help_center
;
class
BuildItem
extends
StatelessWidget
{
final
HelpCenterModel
model
;
const
BuildItem
({
Key
?
key
,
required
this
.
model
})
:
super
(
key:
key
);
@override
Widget
build
(
BuildContext
context
)
{
return
Container
(
color:
Colors
.
white
,
padding:
EdgeInsets
.
only
(
top:
10
.
w
,
right:
15
.
w
,
left:
15
.
w
),
child:
Column
(
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Row
(
children:
<
Widget
>[
Text
(
'
${model!.id}
.'
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
.
w
,
color:
Colours
.
c3
),
),
Padding
(
padding:
const
EdgeInsets
.
only
(
left:
10
),
// 设置左部间隔
child:
Text
(
model
.
helpTitle
??
''
,
style:
TextStyle
(
fontSize:
12
.
w
,
height:
1.5
.
w
,
color:
Colours
.
c9
),
),
),
],
),
Image
.
asset
(
'assets/images/right_arrow.png'
)
],
),
Gaps
.
vGaps10
,
Container
(
height:
0.5
.
w
,
color:
Colours
.
cF0
,
)
],
),
);
}
}
lib/pages/help_cneter_content/controller.dart
0 → 100644
浏览文件 @
15eff61b
part of
help_cneter_content
;
class
HelpCenterContentController
extends
GetxController
{
final
String
id
;
HelpCenterContentModel
helpCenterContentModel
=
HelpCenterContentModel
();
HelpCenterContentController
(
this
.
id
);
@override
void
onReady
()
{
_getHelpCenterContent
(
id
);
super
.
onReady
();
}
/// 获取帮助中心内容
void
_getHelpCenterContent
(
String
id
)
async
{
helpCenterContentModel
=
await
MineAPI
.
helpCenterContent
(
id
);
update
();
}
}
lib/pages/help_cneter_content/index.dart
0 → 100644
浏览文件 @
15eff61b
library
help_cneter_content
;
import
'package:flutter/material.dart'
;
import
'package:flutter_screenutil/flutter_screenutil.dart'
;
import
'package:get/get_state_manager/src/simple/get_controllers.dart'
;
import
'package:get/get_state_manager/src/simple/get_state.dart'
;
import
'../../apis/index.dart'
;
import
'../../models/index.dart'
;
import
'../../utils/index.dart'
;
part
'view.dart'
;
part
'controller.dart'
;
\ No newline at end of file
lib/pages/help_cneter_content/view.dart
0 → 100644
浏览文件 @
15eff61b
part of
help_cneter_content
;
/// 帮助中心-常见问题-内容详情
class
HelpCenterContentPage
extends
StatefulWidget
{
final
String
id
;
const
HelpCenterContentPage
({
Key
?
key
,
required
this
.
id
,
})
:
super
(
key:
key
);
@override
State
<
HelpCenterContentPage
>
createState
()
=>
_HelpCenterContentPageState
();
}
class
_HelpCenterContentPageState
extends
State
<
HelpCenterContentPage
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
GetBuilder
<
HelpCenterContentController
>(
init:
HelpCenterContentController
(
widget
.
id
),
builder:
(
controller
)
=>
Scaffold
(
appBar:
AppBar
(
centerTitle:
true
,
title:
const
Text
(
'常见问题'
),
),
body:
Container
(
width:
double
.
infinity
,
margin:
EdgeInsets
.
only
(
left:
15
.
w
,
top:
10
.
w
,
right:
15
.
w
,
bottom:
15
.
w
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
// 下面的Text靠左
children:
[
Align
(
alignment:
Alignment
.
topCenter
,
child:
Text
(
controller
.
helpCenterContentModel
.
helpTitle
??
''
,
style:
TextStyle
(
fontSize:
16
.
w
,
height:
1.5
.
w
,
color:
Colours
.
c3
),
),
),
SizedBox
(
height:
15
.
w
),
// 添加15dp的间隔,
Text
(
controller
.
helpCenterContentModel
.
helpContent
??
''
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
.
w
,
color:
Colours
.
c3
),
),
],
),
),
));
}
}
/*@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('常见问题'),
),
body: Container(
margin: EdgeInsets.all(15.w),
child: Column(
children: [
Text(
model.helpTitle ?? '',
style: TextStyle(fontSize: 16.w, height: 1.5, color: Colours.c3),
),
Text(
model.helpContent ?? '',
style: TextStyle(fontSize: 14.w, height: 1.5, color: Colours.c3),
),
],
),
),
);
}*/
lib/pages/mine/view.dart
浏览文件 @
15eff61b
...
...
@@ -125,6 +125,12 @@ class _MinePageState extends State<MinePage> {
},
child:
_buildItem
(
'意见反馈'
)
),
Container
(
color:
Colours
.
cLine
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
15
.
w
),
height:
1
.
w
,),
GestureDetector
(
onTap:
(){
context
.
pushNamed
(
Routes
.
helpCenter
);
},
child:
_buildItem
(
'帮助中心'
,)
),
Container
(
color:
Colours
.
cLine
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
15
.
w
),
height:
1
.
w
,),
GestureDetector
(
onTap:
(){
context
.
pushNamed
(
Routes
.
about
);
...
...
lib/pages/search/controller.dart
浏览文件 @
15eff61b
part of
search
;
class
SearchController
extends
GetxController
{
final
EasyRefreshController
refreshController
=
EasyRefreshController
(
controlFinishLoad:
true
,
controlFinishRefresh:
true
,
);
late
TextEditingController
searchController
=
TextEditingController
();
// 搜索记录数组
...
...
@@ -9,6 +12,10 @@ class SearchController extends GetxController {
// 书籍数组
List
<
CourseModel
>
books
=
[];
final
int
_limit
=
20
;
int
_page
=
1
;
bool
_noMore
=
false
;
@override
void
onReady
()
{
_getSearchRecords
();
...
...
@@ -43,6 +50,52 @@ class SearchController extends GetxController {
}
/// 收藏 与 取消收藏
void
love
({
required
String
bookId
,
required
num
isCollection
})
async
{
if
(
isCollection
==
0
){
isCollection
=
1
;
}
else
{
isCollection
=
0
;
}
bool
result
=
await
CommonAPI
.
love
(
bookId:
bookId
,
love:
isCollection
.
toString
());
if
(
result
)
{
onRefresh
();
}
}
/// 获取图书列表数据
Future
<
void
>
_getBooks
([
bool
isRefresh
=
false
])
async
{
if
(
isRefresh
)
_page
=
1
;
// 网路请求
final
result
=
await
LibraryAPI
.
books
(
page:
_page
,
limit:
_limit
);
// 如果是刷新 清理数据
if
(
isRefresh
)
books
.
clear
();
books
.
addAll
(
result
);
_page
++;
_noMore
=
result
.
length
<
_limit
;
update
();
}
void
onRefresh
()
async
{
try
{
await
_getBooks
(
true
);
refreshController
.
finishRefresh
(
IndicatorResult
.
success
);
refreshController
.
resetFooter
();
}
catch
(
error
)
{
refreshController
.
finishRefresh
(
IndicatorResult
.
fail
);
}
}
/// 本地搜索历史
/*
///获取搜索关键字数据
...
...
lib/pages/search/index.dart
浏览文件 @
15eff61b
library
search
;
import
'package:easy_refresh/easy_refresh.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_book/widgets/index.dart'
;
import
'package:flutter_screenutil/flutter_screenutil.dart'
;
...
...
@@ -10,9 +11,11 @@ import 'package:go_router/go_router.dart';
import
'../../apis/index.dart'
;
import
'../../models/index.dart'
;
import
'../../routes/index.dart'
;
import
'../../services/index.dart'
;
import
'../../theme.dart'
;
import
'../../utils/index.dart'
;
import
'../library/index.dart'
;
part
'view.dart'
;
part
'widgets/history.dart'
;
...
...
lib/pages/search/view.dart
浏览文件 @
15eff61b
...
...
@@ -8,43 +8,87 @@ class SearchPage extends StatefulWidget {
}
class
_SearchPageState
extends
State
<
SearchPage
>
{
bool
showHistory
=
true
;
// 根据条件设置为true或false
@override
Widget
build
(
BuildContext
context
)
{
return
GetBuilder
<
SearchController
>(
init:
SearchController
(),
builder:
(
controller
)
=>
Scaffold
(
builder:
(
controller
)
=>
Scaffold
(
appBar:
CustomAppBar
(
automaticallyImplyLeading:
false
,
automaticallyImplyLeading:
false
,
titleSpacing:
0
,
title:
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
AppTheme
.
margin
),
title:
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
AppTheme
.
margin
),
child:
CustomInputSearch
(
controller:
controller
.
searchController
,
readOnly:
false
,
readOnly:
false
,
hintText:
'请输入书籍名称'
,
onTap:
()
{
// context.pushNamed(Routes.msgs);
},
onEditingComplete:
(){
onEditingComplete:
()
{
showHistory
=
false
;
controller
.
search
();
// FocusScope.of(context).unfocus();
FocusNode
blankNode
=
FocusNode
();
FocusScope
.
of
(
context
).
requestFocus
(
blankNode
);
//指定为空白焦点
},
),
),
actions:
[
GestureDetector
(
onTap:
(){
onTap:
()
{
context
.
pop
();
},
child:
Container
(
padding:
EdgeInsets
.
only
(
left:
10
.
w
,
top:
10
.
w
,
bottom:
10
.
w
),
child:
Text
(
'取消'
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
,
color:
Colours
.
c3
),),
// color: Colors.red,
padding:
EdgeInsets
.
only
(
left:
10
.
w
,
top:
10
.
w
,
bottom:
10
.
w
),
child:
Text
(
'取消'
,
style:
TextStyle
(
fontSize:
14
.
w
,
height:
1.5
,
color:
Colours
.
c3
),
),
),
)
],
),
body:
BuildHistory
(
controller:
controller
),
body:
buildListView
(
controller
),
),
);
}
Widget
buildListView
(
SearchController
controller
)
{
if
(
showHistory
)
{
// 如果条件为true,显示历史搜索记录
return
BuildHistory
(
controller:
controller
);
}
else
{
// 如果条件为false,显示搜索到的书籍
return
ListView
.
builder
(
// shrinkWrap: true,
// physics: NeverScrollableScrollPhysics(),
scrollDirection:
Axis
.
vertical
,
itemCount:
controller
.
books
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
)
{
CourseModel
model
=
controller
.
books
[
index
];
return
GestureDetector
(
onTap:
()
{
context
.
pushNamed
(
Routes
.
bookDetail
,
queryParameters:
{
'book_id'
:
model
.
bookId
.
toString
()});
},
child:
LibraryCell
(
model:
model
,
onTap:
()
{
controller
.
love
(
bookId:
model
.
bookId
.
toString
(),
isCollection:
model
.
isCollection
!);
},
),
);
});
}
}
hideSoftKeyboard
(
BuildContext
context
)
{
FocusNode
blankNode
=
FocusNode
();
//空白焦点,不赋值给任何输入框的focusNode
FocusScope
.
of
(
context
).
requestFocus
(
blankNode
);
//指定为空白焦点
}
}
lib/routes/index.dart
浏览文件 @
15eff61b
...
...
@@ -11,6 +11,8 @@ import 'package:flutter_book/pages/change_phone/index.dart';
import
'package:flutter_book/pages/change_pwd/index.dart'
;
import
'package:flutter_book/pages/credit_points/index.dart'
;
import
'package:flutter_book/pages/forget_pwd/index.dart'
;
import
'package:flutter_book/pages/help_center/index.dart'
;
import
'package:flutter_book/pages/help_cneter_content/index.dart'
;
import
'package:flutter_book/pages/login/index.dart'
;
import
'package:flutter_book/pages/main/index.dart'
;
import
'package:flutter_book/pages/reset_pwd/index.dart'
;
...
...
lib/routes/routes.dart
浏览文件 @
15eff61b
...
...
@@ -94,6 +94,10 @@ abstract class Routes {
static
const
feedback
=
'feedback'
;
// 订单评价
static
const
orderEvaluate
=
'order_evaluate'
;
// 帮助中心
static
const
helpCenter
=
'help_center'
;
// 帮助中心内容
static
const
helpCenterContent
=
'help_center_content'
;
...
...
@@ -454,6 +458,24 @@ abstract class Routes {
child:
const
OrderEvaluatePage
()
)
),
GoRoute
(
// 帮助中心
path:
'/
$helpCenter
'
,
name:
helpCenter
,
pageBuilder:
(
context
,
state
)
=>
CupertinoPage
(
name:
state
.
uri
.
toString
(),
key:
state
.
pageKey
,
child:
const
HelpCenterPage
()
)
),
GoRoute
(
// 帮助中心内容
path:
'/
$helpCenterContent
'
,
name:
helpCenterContent
,
pageBuilder:
(
context
,
state
)
=>
CupertinoPage
(
name:
state
.
uri
.
toString
(),
key:
state
.
pageKey
,
child:
HelpCenterContentPage
(
id:
state
.
uri
.
queryParameters
[
'id'
].
toString
())
)
),
]
);
...
...
pubspec.lock
浏览文件 @
15eff61b
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论