news_category_provider.dart 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import 'package:connectivity_plus/connectivity_plus.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import 'package:news_app/http/http_util.dart';
  4. import 'package:news_app/http/model_parser.dart';
  5. import 'package:news_app/model/news_category_model.dart';
  6. import '../constant/api_const.dart';
  7. import 'network_provider.dart';
  8. class NewsCategoryProvider extends Notifier<List<NewsCategoryModel>> {
  9. bool _hasConnectedOnce = false;
  10. @override
  11. List<NewsCategoryModel> build() {
  12. // 监听网络变化,在首次联网时触发加载
  13. ref.listen<AsyncValue<List<ConnectivityResult>>>(connectivityProvider, (
  14. previous,
  15. next,
  16. ) {
  17. final results = next.asData?.value ?? [];
  18. final hasNetwork =
  19. results.isNotEmpty && !results.contains(ConnectivityResult.none);
  20. if (hasNetwork && !_hasConnectedOnce) {
  21. _hasConnectedOnce = true;
  22. fetchNewsCategoryList();
  23. }
  24. });
  25. return List<NewsCategoryModel>.empty();
  26. }
  27. Future<void> fetchNewsCategoryList() async {
  28. final jsonData = await HttpUtil().get(apiNewsCategory);
  29. final newsItemList = ModelParser.parseList(
  30. jsonData,
  31. NewsCategoryModel.fromJson,
  32. );
  33. state = newsItemList;
  34. }
  35. }