Proper pagination

This commit is contained in:
2026-02-25 18:25:00 +08:00
parent 8e8269d12b
commit eaabc0114c
6 changed files with 153 additions and 30 deletions
+5
View File
@@ -109,6 +109,11 @@ class _OfficesScreenState extends ConsumerState<OfficesScreen> {
ref.read(officesQueryProvider.notifier).state =
const OfficeQuery(offset: 0, limit: 50);
},
onPageChanged: (firstRow) {
ref
.read(officesQueryProvider.notifier)
.update((q) => q.copyWith(offset: firstRow));
},
isLoading: false,
);
@@ -251,6 +251,11 @@ class _UserManagementScreenState extends ConsumerState<UserManagementScreen> {
limit: 50,
);
},
onPageChanged: (firstRow) {
ref
.read(adminUserQueryProvider.notifier)
.update((q) => q.copyWith(offset: firstRow));
},
isLoading: false,
);
+29 -19
View File
@@ -43,19 +43,28 @@ class TasksListScreen extends ConsumerStatefulWidget {
ConsumerState<TasksListScreen> createState() => _TasksListScreenState();
}
class _TasksListScreenState extends ConsumerState<TasksListScreen> {
class _TasksListScreenState extends ConsumerState<TasksListScreen>
with SingleTickerProviderStateMixin {
final TextEditingController _subjectController = TextEditingController();
String? _selectedOfficeId;
String? _selectedStatus;
String? _selectedAssigneeId;
DateTimeRange? _selectedDateRange;
late final TabController _tabController;
@override
void dispose() {
_subjectController.dispose();
_tabController.dispose();
super.dispose();
}
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
}
bool get _hasTaskFilters {
return _subjectController.text.trim().isNotEmpty ||
_selectedOfficeId != null ||
@@ -67,6 +76,7 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
@override
Widget build(BuildContext context) {
final tasksAsync = ref.watch(tasksProvider);
final taskQuery = ref.watch(tasksQueryProvider);
final ticketsAsync = ref.watch(ticketsProvider);
final officesAsync = ref.watch(officesProvider);
final profileAsync = ref.watch(currentProfileProvider);
@@ -255,6 +265,7 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
ref.read(tasksQueryProvider.notifier).state =
const TaskQuery(offset: 0, limit: 50);
},
onPageChanged: null,
isLoading: false,
columns: [
TasQColumn<Task>(
@@ -433,26 +444,25 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
),
),
Expanded(
child: DefaultTabController(
length: 2,
child: Column(
children: [
const TabBar(
tabs: [
Tab(text: 'My Tasks'),
Tab(text: 'All Tasks'),
child: Column(
children: [
TabBar(
controller: _tabController,
tabs: const [
Tab(text: 'My Tasks'),
Tab(text: 'All Tasks'),
],
),
Expanded(
child: TabBarView(
controller: _tabController,
children: [
makeList(myTasks),
makeList(filteredTasks),
],
),
Expanded(
child: TabBarView(
children: [
makeList(myTasks),
makeList(filteredTasks),
],
),
),
],
),
),
],
),
),
],
@@ -181,6 +181,11 @@ class _TicketsListScreenState extends ConsumerState<TicketsListScreen> {
ref.read(ticketsQueryProvider.notifier).state =
const TicketQuery(offset: 0, limit: 50);
},
onPageChanged: (firstRow) {
ref
.read(ticketsQueryProvider.notifier)
.update((q) => q.copyWith(offset: firstRow));
},
isLoading: false,
columns: [
TasQColumn<Ticket>(