| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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/model/news_category_model.dart';
- import '../constant/api_const.dart';
- import 'network_provider.dart';
- class NewsCategoryProvider extends Notifier<List<NewsCategoryModel>> {
- bool _hasConnectedOnce = false;
- @override
- List<NewsCategoryModel> build() {
- // 监听网络变化,在首次联网时触发加载
- 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;
- fetchNewsCategoryList();
- }
- });
- return List<NewsCategoryModel>.empty();
- }
- Future<void> fetchNewsCategoryList() async {
- final jsonData = await HttpUtil().get(apiNewsCategory);
- final newsItemList = ModelParser.parseList(
- jsonData,
- NewsCategoryModel.fromJson,
- );
- state = newsItemList;
- }
- }
|