import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:news_app/extension/base.dart'; import 'package:news_app/model/hot_word_model.dart'; import '../constant/api_const.dart'; import '../http/http_util.dart'; import '../http/model_parser.dart'; import '../model/news_data_model.dart'; class SearchProvider extends Notifier { @override SearchData build() { return SearchData(); } FuturefetchArticleHotWord(String type) async{ var jsonData = await HttpUtil().get( apiHotWord, queryParameters: {"q": type}, ); final newList = ModelParser.parseList( jsonData, HotWordModel.fromJson, ); state = state.copyWith(hotWords: newList); } Future fetchSearch(String keyword, int pageNum) async { final jsonData = await HttpUtil().get( apiSearch, queryParameters: { "q": keyword, "pageSize": 10.toString(), "pageNum": pageNum.toString(), }, ); final response = ModelParser.parseObject( jsonData, SearchModel.fromJson, ); if (pageNum == 0) { state = state.copyWith(searchModel: response); } else { //把新的列表添加到旧的列表中 state = state.copyWith(searchModel: SearchModel( total: response.total, rows: [...state.searchModel?.rows ?? [], ...response.rows ?? []], )); } } } class SearchData{ final SearchModel? searchModel; final List hotWords; SearchData({ this.searchModel, this.hotWords = const [], }); SearchData copyWith({ SearchModel? searchModel, List? hotWords, }){ return SearchData( searchModel:searchModel ?? this.searchModel, hotWords:hotWords ?? this.hotWords, ); } } class SearchModel { List? rows; int? total; SearchModel({this.rows, this.total}); SearchModel.fromJson(Map json) { if (json['rows'] != null) { final v = json['rows']; final arr0 = []; v.forEach((v) { arr0.add(NewsRecord.fromJson(v)); }); rows = arr0; } total = json['total']?.toString().convertInt; } Map toJson() { final data = {}; if (rows != null) { final v = rows; final arr0 = []; for (var v in v!) { arr0.add(v!.toJson()); } data['rows'] = arr0; } data['total'] = total; return data; } }