58 lines
2.0 KiB
Dart
58 lines
2.0 KiB
Dart
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();
|
||
}
|
||
}
|