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 个修改的文件
包含
526 行增加
和
81 行删除
+526
-81
mine.dart
lib/apis/mine.dart
+75
-71
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
+53
-9
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
part of
apis
;
abstract
class
MineAPI
{
/// 1、个人信息以及8个数据
///
static
Future
<
UserInfoModel
>
userInfo
()
async
{
static
Future
<
UserInfoModel
>
userInfo
()
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/getMyStatistics'
,
params:
{},
);
if
(
result
.
data
is
!
Map
)
return
UserInfoModel
();
if
(
result
.
data
is
!
Map
)
return
UserInfoModel
();
return
UserInfoModel
.
fromJson
(
result
.
data
);
}
/// 2、我的收藏
static
Future
<
List
<
CourseModel
>>
love
({
static
Future
<
List
<
CourseModel
>>
love
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
...
...
@@ -26,14 +25,14 @@ abstract class MineAPI {
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
CourseModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 3、笔记
///
static
Future
<
List
<
CourseModel
>>
note
({
static
Future
<
List
<
CourseModel
>>
note
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
...
...
@@ -45,14 +44,14 @@ abstract class MineAPI {
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
CourseModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 4、错题
///
static
Future
<
List
<
CourseModel
>>
wrong
({
static
Future
<
List
<
CourseModel
>>
wrong
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
...
...
@@ -64,14 +63,14 @@ abstract class MineAPI {
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
CourseModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 5、紫金币记录
///
static
Future
<
List
<
RecordModel
>>
coin
({
static
Future
<
List
<
RecordModel
>>
coin
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
...
...
@@ -83,14 +82,14 @@ abstract class MineAPI {
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
RecordModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 6、积分记录
///
static
Future
<
List
<
RecordModel
>>
point
({
static
Future
<
List
<
RecordModel
>>
point
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
...
...
@@ -102,14 +101,14 @@ abstract class MineAPI {
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
RecordModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 7、讨论
///
static
Future
<
List
<
CourseModel
>>
discuss
({
static
Future
<
List
<
CourseModel
>>
discuss
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
...
...
@@ -121,36 +120,31 @@ abstract class MineAPI {
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
CourseModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 8、优惠券列表
///
static
Future
<
List
<
CouponModel
>>
coupon
({
static
Future
<
List
<
CouponModel
>>
coupon
({
int
page
=
1
,
int
limit
=
10
,
required
int
type
,
})
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/coupon/Coupon/getCouponRecordListSAll'
,
params:
{
'page'
:
page
,
'page_size'
:
limit
,
'type'
:
type
},
params:
{
'page'
:
page
,
'page_size'
:
limit
,
'type'
:
type
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
CouponModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 9、获取最新版本
///
static
Future
<
UModel
>
update
()
async
{
static
Future
<
UModel
>
update
()
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/getVersion'
,
params:
{},
...
...
@@ -160,7 +154,7 @@ abstract class MineAPI {
}
/// 10、版本介绍
static
Future
<
List
<
VersionModel
>>
versions
({
static
Future
<
List
<
VersionModel
>>
versions
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
...
...
@@ -172,33 +166,28 @@ abstract class MineAPI {
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
VersionModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 11、修改用户信息
///
static
Future
<
bool
>
changeInfo
({
String
?
name
,
num
?
sex
,
String
?
headImg
})
async
{
Map
<
String
,
dynamic
>
params
=
{};
if
(
name
!=
null
){
static
Future
<
bool
>
changeInfo
(
{
String
?
name
,
num
?
sex
,
String
?
headImg
})
async
{
Map
<
String
,
dynamic
>
params
=
{};
if
(
name
!=
null
)
{
params
[
'name'
]
=
name
;
}
if
(
sex
!=
null
){
if
(
sex
!=
null
)
{
params
[
'sex'
]
=
sex
;
}
if
(
headImg
!=
null
){
if
(
headImg
!=
null
)
{
params
[
'head_img'
]
=
headImg
;
}
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/editInformation'
,
params:
params
);
if
(
result
.
data
is
Map
&&
result
.
data
[
'is_success'
]
==
1
){
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/editInformation'
,
params:
params
);
if
(
result
.
data
is
Map
&&
result
.
data
[
'is_success'
]
==
1
)
{
return
true
;
}
return
false
;
...
...
@@ -206,87 +195,102 @@ abstract class MineAPI {
/// 12、笔记详情列表
///
static
Future
<
List
<
NoteModel
>>
noteList
({
int
page
=
1
,
static
Future
<
List
<
NoteModel
>>
noteList
(
{
int
page
=
1
,
int
limit
=
10
,
required
String
bookId
,
required
String
types
})
async
{
required
String
types
})
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/myBookNotes'
,
params:
{
'page'
:
page
,
'page_size'
:
limit
,
'book_id'
:
bookId
,
'book_id'
:
bookId
,
'types'
:
types
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
NoteModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 13、笔记详情列表
///
static
Future
<
List
<
DiscussModel
>>
discussList
({
int
page
=
1
,
static
Future
<
List
<
DiscussModel
>>
discussList
(
{
int
page
=
1
,
int
limit
=
10
,
required
String
bookId
,
required
String
types
})
async
{
required
String
types
})
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/myBookComment'
,
params:
{
'page'
:
page
,
'page_size'
:
limit
,
'book_id'
:
bookId
,
'book_id'
:
bookId
,
'types'
:
types
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
){
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
DiscussModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 14、修改密码
///
static
Future
<
bool
>
changePwd
({
required
String
password
,
required
String
rePassword
})
async
{
static
Future
<
bool
>
changePwd
(
{
required
String
password
,
required
String
rePassword
})
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/changePasswd'
,
params:
{
'password'
:
password
,
'repassword'
:
rePassword
},
params:
{
'password'
:
password
,
'repassword'
:
rePassword
},
);
if
(
result
.
data
is
Map
&&
result
.
data
[
'is_success'
]
==
1
){
if
(
result
.
data
is
Map
&&
result
.
data
[
'is_success'
]
==
1
)
{
return
true
;
}
return
false
;
}
/// 15、修改手机号
static
Future
<
bool
>
changePhone
({
required
String
phone
,
required
String
code
})
async
{
static
Future
<
bool
>
changePhone
(
{
required
String
phone
,
required
String
code
})
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/members/Information/editPhone'
,
params:
{
'phone'
:
phone
,
'code'
:
code
},
params:
{
'phone'
:
phone
,
'code'
:
code
},
);
if
(
result
.
data
is
Map
&&
result
.
data
[
'is_success'
]
==
1
){
if
(
result
.
data
is
Map
&&
result
.
data
[
'is_success'
]
==
1
)
{
return
true
;
}
return
false
;
}
/// 16、帮助中心
static
Future
<
List
<
HelpCenterModel
>>
helpCenters
({
int
page
=
1
,
int
limit
=
10
,
})
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/common/Help/getList'
,
params:
{
'page'
:
page
,
'page_size'
:
limit
,
},
);
if
(
result
.
data
is
!
Map
&&
result
.
data
[
'list'
]
is
!
List
)
return
[];
return
List
.
generate
(
result
.
data
[
'list'
].
length
,
(
index
)
{
return
HelpCenterModel
.
fromJson
(
result
.
data
[
'list'
][
index
]);
});
}
/// 17、帮助中心内容
static
Future
<
HelpCenterContentModel
>
helpCenterContent
(
String
id
)
async
{
final
result
=
await
HttpService
.
to
.
post
(
'/v1/common/Help/getInfoById'
,
params:
{
'id'
:
id
,
},
);
if
(
result
.
data
is
!
Map
)
return
HelpCenterContentModel
();
return
HelpCenterContentModel
.
fromJson
(
result
.
data
);
}
}
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
),
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论