import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:news_app/extension/base.dart'; import '../constant/api_const.dart'; import '../http/http_util.dart'; import '../http/model_parser.dart'; import '../model/activity_model.dart'; import '../model/hot_word_model.dart'; class ActivitySearchProvider extends Notifier { @override ActivitySearchData build() { return ActivitySearchData(); } FuturefetchActivityHotWord(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( apiActivitySearch, queryParameters: { "q": keyword, "pageSize": 10.toString(), "pageNum": pageNum.toString(), }, ); final response = ModelParser.parseObject( jsonData, ActivitySearchModel.fromJson, ); if (pageNum == 0) { state = state.copyWith(searchModel: response); } else { //把新的列表添加到旧的列表中 state = state.copyWith(searchModel: ActivitySearchModel( total: response.total, rows: [...state.searchModel?.rows ?? [], ...response.rows ?? []], )); } } } class ActivitySearchModel { List? rows; int? total; ActivitySearchModel({this.rows, this.total}); ActivitySearchModel.fromJson(Map json) { if (json['rows'] != null) { final v = json['rows']; final arr0 = []; v.forEach((v) { arr0.add(ActivityModelRecord.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; } } class ActivitySearchData{ final ActivitySearchModel? searchModel; final List hotWords; ActivitySearchData({ this.searchModel, this.hotWords = const [], }); ActivitySearchData copyWith({ ActivitySearchModel? searchModel, List? hotWords, }){ return ActivitySearchData( searchModel: searchModel ?? this.searchModel, hotWords:hotWords ?? this.hotWords, ); } }