Files
PiliPlus/lib/pages/common/common_controller.dart
My-Responsitories 218e829fd4 opt: bar set (#862)
* opt: bar set

* opt: navbar

* fix: type
2025-05-20 18:14:08 +00:00

67 lines
1.4 KiB
Dart

import 'dart:async';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
mixin ScrollOrRefreshMixin {
ScrollController get scrollController;
void animateToTop() => scrollController.animToTop();
Future<void> onRefresh();
void toTopOrRefresh() {
if (scrollController.hasClients) {
if (scrollController.position.pixels == 0) {
EasyThrottle.throttle(
'topOrRefresh', const Duration(milliseconds: 500), onRefresh);
} else {
animateToTop();
}
}
}
}
abstract class CommonController<R, T> extends GetxController
with ScrollOrRefreshMixin {
@override
final ScrollController scrollController = ScrollController();
bool isLoading = false;
Rx<LoadingState> get loadingState;
Future<LoadingState<R>> customGetData();
Future<void> queryData([bool isRefresh = true]);
bool customHandleResponse(bool isRefresh, Success<R> response) {
return false;
}
bool handleError(String? errMsg) {
return false;
}
@override
Future<void> onRefresh() {
return queryData();
}
Future<void> onLoadMore() {
return queryData(false);
}
Future<void> onReload() {
return onRefresh();
}
@override
void onClose() {
scrollController.dispose();
super.onClose();
}
}