提交 15eff61b authored 作者: maodou's avatar maodou

1:搜索页面搜索结果显示

2:我的-帮助中心功能及帮助中心内容显示
上级 e87a8a03
part of apis; part of apis;
abstract class MineAPI { abstract class MineAPI {
/// 1、个人信息以及8个数据 /// 1、个人信息以及8个数据
/// ///
static Future <UserInfoModel> userInfo() async { static Future<UserInfoModel> userInfo() async {
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/members/Information/getMyStatistics', '/v1/members/Information/getMyStatistics',
params: {}, params: {},
); );
if (result.data is! Map ) return UserInfoModel(); if (result.data is! Map) return UserInfoModel();
return UserInfoModel.fromJson(result.data); return UserInfoModel.fromJson(result.data);
} }
/// 2、我的收藏 /// 2、我的收藏
static Future <List<CourseModel>> love({ static Future<List<CourseModel>> love({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
}) async { }) async {
...@@ -26,14 +25,14 @@ abstract class MineAPI { ...@@ -26,14 +25,14 @@ abstract class MineAPI {
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return CourseModel.fromJson(result.data['list'][index]);
}); });
} }
/// 3、笔记 /// 3、笔记
/// ///
static Future <List<CourseModel>> note({ static Future<List<CourseModel>> note({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
}) async { }) async {
...@@ -45,14 +44,14 @@ abstract class MineAPI { ...@@ -45,14 +44,14 @@ abstract class MineAPI {
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return CourseModel.fromJson(result.data['list'][index]);
}); });
} }
/// 4、错题 /// 4、错题
/// ///
static Future <List<CourseModel>> wrong({ static Future<List<CourseModel>> wrong({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
}) async { }) async {
...@@ -64,14 +63,14 @@ abstract class MineAPI { ...@@ -64,14 +63,14 @@ abstract class MineAPI {
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return CourseModel.fromJson(result.data['list'][index]);
}); });
} }
/// 5、紫金币记录 /// 5、紫金币记录
/// ///
static Future <List<RecordModel>> coin({ static Future<List<RecordModel>> coin({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
}) async { }) async {
...@@ -83,14 +82,14 @@ abstract class MineAPI { ...@@ -83,14 +82,14 @@ abstract class MineAPI {
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return RecordModel.fromJson(result.data['list'][index]);
}); });
} }
/// 6、积分记录 /// 6、积分记录
/// ///
static Future <List<RecordModel>> point({ static Future<List<RecordModel>> point({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
}) async { }) async {
...@@ -102,14 +101,14 @@ abstract class MineAPI { ...@@ -102,14 +101,14 @@ abstract class MineAPI {
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return RecordModel.fromJson(result.data['list'][index]);
}); });
} }
/// 7、讨论 /// 7、讨论
/// ///
static Future <List<CourseModel>> discuss({ static Future<List<CourseModel>> discuss({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
}) async { }) async {
...@@ -121,36 +120,31 @@ abstract class MineAPI { ...@@ -121,36 +120,31 @@ abstract class MineAPI {
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return CourseModel.fromJson(result.data['list'][index]);
}); });
} }
/// 8、优惠券列表 /// 8、优惠券列表
/// ///
static Future <List<CouponModel>> coupon({ static Future<List<CouponModel>> coupon({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
required int type, required int type,
}) async { }) async {
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/coupon/Coupon/getCouponRecordListSAll', '/v1/coupon/Coupon/getCouponRecordListSAll',
params: { params: {'page': page, 'page_size': limit, 'type': type},
'page': page,
'page_size': limit,
'type': type
},
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return CouponModel.fromJson(result.data['list'][index]);
}); });
} }
/// 9、获取最新版本 /// 9、获取最新版本
/// ///
static Future <UModel> update() async { static Future<UModel> update() async {
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/members/Information/getVersion', '/v1/members/Information/getVersion',
params: {}, params: {},
...@@ -160,7 +154,7 @@ abstract class MineAPI { ...@@ -160,7 +154,7 @@ abstract class MineAPI {
} }
/// 10、版本介绍 /// 10、版本介绍
static Future <List<VersionModel>> versions({ static Future<List<VersionModel>> versions({
int page = 1, int page = 1,
int limit = 10, int limit = 10,
}) async { }) async {
...@@ -172,33 +166,28 @@ abstract class MineAPI { ...@@ -172,33 +166,28 @@ abstract class MineAPI {
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return VersionModel.fromJson(result.data['list'][index]);
}); });
} }
/// 11、修改用户信息 /// 11、修改用户信息
/// ///
static Future <bool> changeInfo({ static Future<bool> changeInfo(
String? name, {String? name, num? sex, String? headImg}) async {
num? sex, Map<String, dynamic> params = {};
String? headImg if (name != null) {
}) async {
Map<String,dynamic> params = {};
if (name != null){
params['name'] = name; params['name'] = name;
} }
if (sex != null){ if (sex != null) {
params['sex'] = sex; params['sex'] = sex;
} }
if (headImg != null){ if (headImg != null) {
params['head_img'] = headImg; params['head_img'] = headImg;
} }
final result = await HttpService.to.post( final result = await HttpService.to
'/v1/members/Information/editInformation', .post('/v1/members/Information/editInformation', params: params);
params: params if (result.data is Map && result.data['is_success'] == 1) {
);
if (result.data is Map && result.data['is_success'] == 1){
return true; return true;
} }
return false; return false;
...@@ -206,87 +195,102 @@ abstract class MineAPI { ...@@ -206,87 +195,102 @@ abstract class MineAPI {
/// 12、笔记详情列表 /// 12、笔记详情列表
/// ///
static Future <List<NoteModel>> noteList({ static Future<List<NoteModel>> noteList(
int page = 1, {int page = 1,
int limit = 10, int limit = 10,
required String bookId, required String bookId,
required String types required String types}) async {
}) async {
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/members/Information/myBookNotes', '/v1/members/Information/myBookNotes',
params: { params: {
'page': page, 'page': page,
'page_size': limit, 'page_size': limit,
'book_id':bookId, 'book_id': bookId,
'types': types 'types': types
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return NoteModel.fromJson(result.data['list'][index]);
}); });
} }
/// 13、笔记详情列表 /// 13、笔记详情列表
/// ///
static Future <List<DiscussModel>> discussList({ static Future<List<DiscussModel>> discussList(
int page = 1, {int page = 1,
int limit = 10, int limit = 10,
required String bookId, required String bookId,
required String types required String types}) async {
}) async {
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/members/Information/myBookComment', '/v1/members/Information/myBookComment',
params: { params: {
'page': page, 'page': page,
'page_size': limit, 'page_size': limit,
'book_id':bookId, 'book_id': bookId,
'types': types 'types': types
}, },
); );
if (result.data is! Map && result.data['list'] is! List) return []; 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]); return DiscussModel.fromJson(result.data['list'][index]);
}); });
} }
/// 14、修改密码 /// 14、修改密码
/// ///
static Future <bool> changePwd({ static Future<bool> changePwd(
required String password, {required String password, required String rePassword}) async {
required String rePassword
}) async {
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/members/Information/changePasswd', '/v1/members/Information/changePasswd',
params: { params: {'password': password, 'repassword': rePassword},
'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 true;
} }
return false; return false;
} }
/// 15、修改手机号 /// 15、修改手机号
static Future <bool> changePhone({ static Future<bool> changePhone(
required String phone, {required String phone, required String code}) async {
required String code
}) async {
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/members/Information/editPhone', '/v1/members/Information/editPhone',
params: { params: {'phone': phone, 'code': code},
'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 true;
} }
return false; 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);
}
} }
差异被折叠。
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
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
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()});
},
);
}),
),
),
),
),
));
}
}
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,
)
],
),
);
}
}
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();
}
}
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
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),
),
],
),
),
);
}*/
...@@ -125,6 +125,12 @@ class _MinePageState extends State<MinePage> { ...@@ -125,6 +125,12 @@ class _MinePageState extends State<MinePage> {
}, child: _buildItem('意见反馈') }, child: _buildItem('意见反馈')
), ),
Container(color: Colours.cLine,margin: EdgeInsets.symmetric(horizontal: 15.w),height: 1.w,), 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( GestureDetector(
onTap: (){ onTap: (){
context.pushNamed(Routes.about); context.pushNamed(Routes.about);
......
part of search; part of search;
class SearchController extends GetxController { class SearchController extends GetxController {
final EasyRefreshController refreshController = EasyRefreshController(
controlFinishLoad: true,
controlFinishRefresh: true,
);
late TextEditingController searchController = TextEditingController(); late TextEditingController searchController = TextEditingController();
// 搜索记录数组 // 搜索记录数组
...@@ -9,6 +12,10 @@ class SearchController extends GetxController { ...@@ -9,6 +12,10 @@ class SearchController extends GetxController {
// 书籍数组 // 书籍数组
List<CourseModel> books = []; List<CourseModel> books = [];
final int _limit = 20;
int _page = 1;
bool _noMore = false;
@override @override
void onReady() { void onReady() {
_getSearchRecords(); _getSearchRecords();
...@@ -43,6 +50,52 @@ class SearchController extends GetxController { ...@@ -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);
}
}
/// 本地搜索历史 /// 本地搜索历史
/* /*
///获取搜索关键字数据 ///获取搜索关键字数据
......
library search; library search;
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_book/widgets/index.dart'; import 'package:flutter_book/widgets/index.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
...@@ -10,9 +11,11 @@ import 'package:go_router/go_router.dart'; ...@@ -10,9 +11,11 @@ import 'package:go_router/go_router.dart';
import '../../apis/index.dart'; import '../../apis/index.dart';
import '../../models/index.dart'; import '../../models/index.dart';
import '../../routes/index.dart';
import '../../services/index.dart'; import '../../services/index.dart';
import '../../theme.dart'; import '../../theme.dart';
import '../../utils/index.dart'; import '../../utils/index.dart';
import '../library/index.dart';
part 'view.dart'; part 'view.dart';
part 'widgets/history.dart'; part 'widgets/history.dart';
......
...@@ -8,43 +8,87 @@ class SearchPage extends StatefulWidget { ...@@ -8,43 +8,87 @@ class SearchPage extends StatefulWidget {
} }
class _SearchPageState extends State<SearchPage> { class _SearchPageState extends State<SearchPage> {
bool showHistory = true; // 根据条件设置为true或false
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GetBuilder<SearchController>( return GetBuilder<SearchController>(
init: SearchController(), init: SearchController(),
builder:(controller)=> Scaffold( builder: (controller) => Scaffold(
appBar: CustomAppBar( appBar: CustomAppBar(
automaticallyImplyLeading:false, automaticallyImplyLeading: false,
titleSpacing: 0, titleSpacing: 0,
title: Padding( title: Padding(
padding: EdgeInsets.symmetric(horizontal: AppTheme.margin), padding: EdgeInsets.symmetric(horizontal: AppTheme.margin),
child: CustomInputSearch( child: CustomInputSearch(
controller: controller.searchController, controller: controller.searchController,
readOnly:false, readOnly: false,
hintText: '请输入书籍名称', hintText: '请输入书籍名称',
onTap: () { onTap: () {
// context.pushNamed(Routes.msgs); // context.pushNamed(Routes.msgs);
}, },
onEditingComplete: (){ onEditingComplete: () {
showHistory = false;
controller.search(); controller.search();
// FocusScope.of(context).unfocus();
FocusNode blankNode = FocusNode();
FocusScope.of(context).requestFocus(blankNode); //指定为空白焦点
}, },
), ),
), ),
actions: [ actions: [
GestureDetector( GestureDetector(
onTap: (){ onTap: () {
context.pop(); context.pop();
}, },
child: Container( child: Container(
padding: EdgeInsets.only(left: 10.w,top: 10.w,bottom: 10.w), 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),), child: Text(
// color: Colors.red, '取消',
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); //指定为空白焦点
}
} }
...@@ -11,6 +11,8 @@ import 'package:flutter_book/pages/change_phone/index.dart'; ...@@ -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/change_pwd/index.dart';
import 'package:flutter_book/pages/credit_points/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/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/login/index.dart';
import 'package:flutter_book/pages/main/index.dart'; import 'package:flutter_book/pages/main/index.dart';
import 'package:flutter_book/pages/reset_pwd/index.dart'; import 'package:flutter_book/pages/reset_pwd/index.dart';
......
...@@ -94,6 +94,10 @@ abstract class Routes { ...@@ -94,6 +94,10 @@ abstract class Routes {
static const feedback = 'feedback'; static const feedback = 'feedback';
// 订单评价 // 订单评价
static const orderEvaluate= 'order_evaluate'; static const orderEvaluate= 'order_evaluate';
// 帮助中心
static const helpCenter= 'help_center';
// 帮助中心内容
static const helpCenterContent = 'help_center_content';
...@@ -454,6 +458,24 @@ abstract class Routes { ...@@ -454,6 +458,24 @@ abstract class Routes {
child: const OrderEvaluatePage() 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())
)
),
] ]
); );
......
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论