news_getx/lib/modules/main/main_controller.dart

58 lines
2.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}