TF-2089 Fix pull-to-refresh in mailbox view

(cherry picked from commit cd53c87be8fc986072f1610f7b37d839d3552f3f)
This commit is contained in:
dab246
2023-08-14 12:24:46 +07:00
committed by Dat Vu
parent d8d205aed9
commit 8d70aa7067
3 changed files with 220 additions and 219 deletions
@@ -205,10 +205,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
}); });
} }
void handleScrollEnable() {
isMailboxListScrollable.value = mailboxListScrollController.hasClients && mailboxListScrollController.position.maxScrollExtent > 0;
}
void _registerObxStreamListener() { void _registerObxStreamListener() {
ever(mailboxDashBoardController.accountId, (accountId) { ever(mailboxDashBoardController.accountId, (accountId) {
if (accountId != null && mailboxDashBoardController.sessionCurrent != null) { if (accountId != null && mailboxDashBoardController.sessionCurrent != null) {
@@ -299,7 +295,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
} }
void refreshAllMailbox() { Future<void> refreshAllMailbox() async {
final session = mailboxDashBoardController.sessionCurrent; final session = mailboxDashBoardController.sessionCurrent;
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
if (session != null && accountId != null) { if (session != null && accountId != null) {
@@ -45,7 +45,7 @@ class MailboxView extends BaseMailboxView {
color: Colors.white, color: Colors.white,
child: RefreshIndicator( child: RefreshIndicator(
color: AppColor.primaryColor, color: AppColor.primaryColor,
onRefresh: () async => controller.refreshAllMailbox(), onRefresh: controller.refreshAllMailbox,
child: SafeArea( child: SafeArea(
top: false, top: false,
right: false, right: false,
@@ -154,15 +154,10 @@ class MailboxView extends BaseMailboxView {
} }
Widget _buildListMailbox(BuildContext context) { Widget _buildListMailbox(BuildContext context) {
return NotificationListener( return SingleChildScrollView(
onNotification: (_) {
controller.handleScrollEnable();
return true;
},
child: SingleChildScrollView(
controller: controller.mailboxListScrollController, controller: controller.mailboxListScrollController,
key: const PageStorageKey('mailbox_list'), key: const PageStorageKey('mailbox_list'),
physics: const ClampingScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
padding: const EdgeInsets.only(bottom: 16), padding: const EdgeInsets.only(bottom: 16),
child: Column(children: [ child: Column(children: [
Obx(() { Obx(() {
@@ -212,7 +207,7 @@ class MailboxView extends BaseMailboxView {
children: [ children: [
Expanded( Expanded(
child: Text( child: Text(
AppLocalizations.of(context).folders, AppLocalizations.of(context).mailBoxes,
style: const TextStyle( style: const TextStyle(
fontSize: 20, fontSize: 20,
color: Colors.black, color: Colors.black,
@@ -271,7 +266,6 @@ class MailboxView extends BaseMailboxView {
} }
}), }),
]) ])
),
); );
} }
@@ -1,4 +1,5 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -40,11 +41,7 @@ class MailboxView extends BaseMailboxView {
color: responsiveUtils.isDesktop(context) color: responsiveUtils.isDesktop(context)
? AppColor.colorBgDesktop ? AppColor.colorBgDesktop
: Colors.white, : Colors.white,
child: RefreshIndicator( child: _buildListMailbox(context),
color: AppColor.primaryColor,
onRefresh: () async => controller.refreshAllMailbox(),
child: _buildListMailbox(context)
),
), ),
)), )),
const QuotasView(), const QuotasView(),
@@ -83,10 +80,22 @@ class MailboxView extends BaseMailboxView {
Widget _buildListMailbox(BuildContext context) { Widget _buildListMailbox(BuildContext context) {
return Stack( return Stack(
children: [ children: [
SingleChildScrollView( ScrollConfiguration(
behavior: ScrollConfiguration.of(context).copyWith(
physics: const BouncingScrollPhysics(),
dragDevices: {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
PointerDeviceKind.trackpad
},
),
child: RefreshIndicator(
color: AppColor.primaryColor,
onRefresh: controller.refreshAllMailbox,
child: SingleChildScrollView(
controller: controller.mailboxListScrollController, controller: controller.mailboxListScrollController,
key: const PageStorageKey('mailbox_list'), key: const PageStorageKey('mailbox_list'),
physics: const ClampingScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
padding: EdgeInsetsDirectional.only(end: responsiveUtils.isDesktop(context) ? 16 : 0), padding: EdgeInsetsDirectional.only(end: responsiveUtils.isDesktop(context) ? 16 : 0),
child: Column(children: [ child: Column(children: [
if (!responsiveUtils.isDesktop(context)) if (!responsiveUtils.isDesktop(context))
@@ -179,6 +188,8 @@ class MailboxView extends BaseMailboxView {
}) })
]) ])
), ),
),
),
Obx(() => controller.mailboxDashBoardController.isDraggingMailbox && controller.activeScrollTop Obx(() => controller.mailboxDashBoardController.isDraggingMailbox && controller.activeScrollTop
? Align( ? Align(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,