import 'package:get/get.dart'; import 'package:news_getx/data/model/news.dart'; import 'package:news_getx/data/repository/news_repository.dart'; import 'package:news_getx/modules/main/main_state.dart'; class MainController extends GetxController { NewsRepository newsRepository; MainController({required this.newsRepository}); /// 响应式成员变量 /// 在Getx中,当一个对象被注册为可观察对象(Observable), /// Getx会自动将其所有属性都转换为可观察属性(Observable)。 /// 这意味着,无论是直接在GetxController中定义的属性, /// 还是在其内部嵌套的对象中定义的属性, /// 只要它们被定义为可观察属性,GetxController都会监听它们的变化。 final state = MainState(); /// 方法 // 拉取数据 asyncLoadAllData() async { // todo 因为缓存导致这两项无法刷新 得找个地方刷新或者调整逻辑 例如缓存加超时 state.categories = await newsRepository.categories(cacheDisk: true); state.channels = await newsRepository.channels(cacheDisk: true); // 分类对应的数据(推荐、新闻) state.newsRecommend = await newsRepository.newsRecommend(cacheDisk: true); state.newsPageList = await newsRepository.newsPageList(cacheDisk: true); // 所选分类 state.selCategoryCode = state.categories?.first.code; } // 拉取推荐、新闻 asyncLoadNewsData( categoryCode, { bool refresh = false, }) async { state.selCategoryCode = categoryCode; state.newsRecommend = await newsRepository.newsRecommend( params: NewsRecommendRequest(categoryCode: categoryCode), refresh: refresh, cacheDisk: true, ); state.newsPageList = await newsRepository.newsPageList( params: NewsPageListRequest(categoryCode: categoryCode), refresh: refresh, cacheDisk: true, ); } /// 生命周期 @override void onReady() { super.onReady(); // 异步拉取数据 asyncLoadAllData(); } }