v1.0.1
This commit is contained in:
148
lib/app/controller/base_controller.dart
Normal file
148
lib/app/controller/base_controller.dart
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user