opt: 搜索结果为空

This commit is contained in:
guozhigq
2024-06-16 19:09:05 +08:00
parent 568642ad2f
commit 3b75b0ce7d
5 changed files with 72 additions and 43 deletions

View File

@ -2,12 +2,18 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
class HttpError extends StatelessWidget {
const HttpError(
{required this.errMsg, required this.fn, this.btnText, super.key});
const HttpError({
required this.errMsg,
required this.fn,
this.btnText,
this.isShowBtn = true,
super.key,
});
final String? errMsg;
final Function()? fn;
final String? btnText;
final bool isShowBtn;
@override
Widget build(BuildContext context) {
@ -29,20 +35,22 @@ class HttpError extends StatelessWidget {
style: Theme.of(context).textTheme.titleSmall,
),
const SizedBox(height: 20),
FilledButton.tonal(
onPressed: () {
fn!();
},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith((states) {
return Theme.of(context).colorScheme.primary.withAlpha(20);
}),
if (isShowBtn)
FilledButton.tonal(
onPressed: () {
fn!();
},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith((states) {
return Theme.of(context).colorScheme.primary.withAlpha(20);
}),
),
child: Text(
btnText ?? '点击重试',
style:
TextStyle(color: Theme.of(context).colorScheme.primary),
),
),
child: Text(
btnText ?? '点击重试',
style: TextStyle(color: Theme.of(context).colorScheme.primary),
),
),
],
),
),

View File

@ -88,7 +88,11 @@ class SearchHttp {
if (tids != null && tids != -1) 'tids': tids,
};
var res = await Request().get(Api.searchByType, data: reqData);
if (res.data['code'] == 0 && res.data['data']['numPages'] > 0) {
if (res.data['code'] == 0) {
if (res.data['data']['numPages'] == 0) {
// 我想返回数据使得可以通过data.list 取值,结果为[]
return {'status': true, 'data': Data()};
}
Object data;
try {
switch (searchType) {
@ -125,9 +129,7 @@ class SearchHttp {
return {
'status': false,
'data': [],
'msg': res.data['data'] != null && res.data['data']['numPages'] == 0
? '没有相关数据'
: res.data['message'],
'msg': res.data['message'],
};
}
}
@ -206,3 +208,9 @@ class SearchHttp {
}
}
}
class Data {
List<dynamic> list;
Data({this.list = const []});
}

View File

@ -5,10 +5,12 @@ class SearchVideoModel {
SearchVideoModel({this.list});
List<SearchVideoItemModel>? list;
SearchVideoModel.fromJson(Map<String, dynamic> json) {
list = json['result']
.where((e) => e['available'] == true)
.map<SearchVideoItemModel>((e) => SearchVideoItemModel.fromJson(e))
.toList();
list = json['result'] == null
? []
: json['result']
.where((e) => e['available'] == true)
.map<SearchVideoItemModel>((e) => SearchVideoItemModel.fromJson(e))
.toList();
}
}

View File

@ -30,9 +30,9 @@ class SearchPanelController extends GetxController {
);
if (result['status']) {
if (type == 'onRefresh') {
resultList.value = result['data'].list;
resultList.value = result['data'].list ?? [];
} else {
resultList.addAll(result['data'].list);
resultList.addAll(result['data'].list ?? []);
}
page.value++;
onPushDetail(keyword, resultList);

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:pilipala/common/widgets/http_error.dart';
import 'package:pilipala/common/widgets/video_card_h.dart';
import 'package:pilipala/models/common/search_type.dart';
import 'package:pilipala/pages/search/widgets/search_text.dart';
@ -25,25 +26,35 @@ class SearchVideoPanel extends StatelessWidget {
children: [
Padding(
padding: const EdgeInsets.only(top: 36),
child: ListView.builder(
controller: ctr!.scrollController,
addAutomaticKeepAlives: false,
addRepaintBoundaries: false,
itemCount: list!.length,
itemBuilder: (context, index) {
var i = list![index];
return Padding(
padding: index == 0
? const EdgeInsets.only(top: 2)
: EdgeInsets.zero,
child: VideoCardH(
videoItem: i,
showPubdate: true,
source: 'search',
child: list!.isNotEmpty
? ListView.builder(
controller: ctr!.scrollController,
addAutomaticKeepAlives: false,
addRepaintBoundaries: false,
itemCount: list!.length,
itemBuilder: (context, index) {
var i = list![index];
return Padding(
padding: index == 0
? const EdgeInsets.only(top: 2)
: EdgeInsets.zero,
child: VideoCardH(
videoItem: i,
showPubdate: true,
source: 'search',
),
);
},
)
: CustomScrollView(
slivers: [
HttpError(
errMsg: '没有数据',
isShowBtn: false,
fn: () => {},
)
],
),
);
},
),
),
// 分类筛选
Container(