| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import 'package:connectivity_plus/connectivity_plus.dart';
- import 'package:flutter_riverpod/flutter_riverpod.dart';
- import 'package:news_app/http/http_util.dart';
- import 'package:news_app/http/model_parser.dart';
- import 'package:news_app/ui/news/main_news_page.dart';
- import 'package:news_app/util/log.util.dart';
- import '../constant/api_const.dart';
- import '../model/activity_banner_model.dart';
- import '../model/news_data_model.dart';
- import 'network_provider.dart';
- class NewsNotifier extends FamilyNotifier<NewsState, int> {
- int tabIndex = 0;
- bool _hasConnectedOnce = false;
- @override
- NewsState build(int index) {
- tabIndex = index;
- // 监听网络变化,在首次联网时触发加载
- ref.listen<AsyncValue<List<ConnectivityResult>>>(connectivityProvider, (
- previous,
- next,
- ) {
- final results = next.asData?.value ?? [];
- final hasNetwork =
- results.isNotEmpty && !results.contains(ConnectivityResult.none);
- if (hasNetwork && !_hasConnectedOnce) {
- _hasConnectedOnce = true;
- fetchBannerList();
- fetchNewsItemList(1);
- }
- });
- return NewsState(bannerList: [], newsDataModel: NewsDataModel());
- }
- Future<void> fetchBannerList() async {
- final model = ref.read(newsCategoryProvider)[tabIndex];
- consoleLog(model.name);
- final jsonData = await HttpUtil().get(
- apiBannerList,
- queryParameters: {"type": "", "categoryId": model.catalogId},
- );
- final bannerData = ModelParser.parseList(
- jsonData,
- ActivityBannerModel.fromJson,
- );
- state = state.copyWith(bannerList: bannerData);
- }
- Future<void> fetchNewsItemList(int pageNum) async {
- final model = ref.read(newsCategoryProvider)[tabIndex];
- consoleLog(model.name);
- final jsonData = await HttpUtil().get(
- apiNewsList,
- queryParameters: {
- "cid": model.catalogId,
- "sid": model.siteId,
- "pp": "",
- "text": "true",
- "pageNum": pageNum.toString(),
- "pageSize": 10,
- },
- );
- final response = ModelParser.parseObject(jsonData, NewsDataModel.fromJson);
- final oldRecords = state.newsDataModel.records ?? [];
- state = state.copyWith(
- newsDataModel: response.copyWith(
- total: response.total,
- size: response.size,
- current: response.current,
- pages: response.pages,
- records:
- pageNum == 1
- ? response.records
- : [...oldRecords, ...?response.records],
- ),
- );
- }
- }
- class NewsState {
- final List<ActivityBannerModel> bannerList;
- final NewsDataModel newsDataModel;
- NewsState({required this.bannerList, required this.newsDataModel});
- NewsState copyWith({
- List<ActivityBannerModel>? bannerList,
- NewsDataModel? newsDataModel,
- }) {
- return NewsState(
- bannerList: bannerList ?? this.bannerList,
- newsDataModel: newsDataModel ?? this.newsDataModel,
- );
- }
- }
|