This commit is contained in:
2026-03-07 17:24:59 +08:00
parent 4418ebecac
commit b0ec8ab4bd
417 changed files with 42546 additions and 2 deletions

View File

@@ -0,0 +1,148 @@
import 'dart:async';
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_dmzj/app/log.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
class BaseController extends GetxController {
/// 加载中,更新页面
var pageLoadding = false.obs;
/// 加载中,不会更新页面
var loadding = false;
/// 空白页面
var pageEmpty = false.obs;
/// 页面错误
var pageError = false.obs;
/// 未登录
var notLogin = false.obs;
/// 错误信息
var errorMsg = "".obs;
Error? error;
/// 显示错误
/// * [msg] 错误信息
/// * [showPageError] 显示页面错误
/// * 只在第一页加载错误时showPageError=true后续页加载错误时使用Toast弹出通知
void handleError(Object exception, {bool showPageError = false}) {
Log.logPrint(exception);
var msg = exceptionToString(exception);
if (exception is Error) {
error = exception;
}
if (showPageError) {
pageError.value = true;
errorMsg.value = msg;
} else {
SmartDialog.showToast(exceptionToString(msg));
}
}
String exceptionToString(Object exception) {
return exception.toString().replaceAll("Exception:", "");
}
void onLogin() {}
void onLogout() {}
}
class BaseDataController<T> extends BaseController {
T? data;
Future loadData() async {
try {
if (loadding) return;
loadding = true;
pageError.value = false;
pageLoadding.value = true;
error = null;
var result = await getData();
data = result;
} catch (e) {
handleError(exceptionToString(e), showPageError: true);
} finally {
loadding = false;
pageLoadding.value = false;
}
}
Future<T?> getData() async {
return null;
}
}
class BasePageController<T> extends BaseController {
final ScrollController scrollController = ScrollController();
final EasyRefreshController easyRefreshController = EasyRefreshController();
int currentPage = 1;
int count = 0;
int maxPage = 0;
int pageSize = 24;
var canLoadMore = false.obs;
var list = <T>[].obs;
Future refreshData() async {
currentPage = 1;
list.clear();
await loadData();
}
Future loadData() async {
try {
if (loadding) return;
loadding = true;
pageError.value = false;
pageEmpty.value = false;
notLogin.value = false;
error = null;
pageLoadding.value = currentPage == 1;
var result = await getData(currentPage, pageSize);
//是否可以加载更多
if (result.isNotEmpty) {
currentPage++;
canLoadMore.value = true;
pageEmpty.value = false;
} else {
canLoadMore.value = false;
if (currentPage == 1) {
pageEmpty.value = true;
}
}
// 赋值数据
if (currentPage == 1) {
list.value = result;
} else {
list.addAll(result);
}
} catch (e) {
handleError(e, showPageError: currentPage == 1);
} finally {
loadding = false;
pageLoadding.value = false;
}
}
Future<List<T>> getData(int page, int pageSize) async {
return [];
}
void scrollToTopOrRefresh() {
if (scrollController.offset > 0) {
scrollController.animateTo(
0,
duration: const Duration(milliseconds: 200),
curve: Curves.linear,
);
} else {
easyRefreshController.callRefresh();
}
}
}