Skip to content

Commit

Permalink
fix: [#2729] universal back button when in archived list
Browse files Browse the repository at this point in the history
  • Loading branch information
zlshames committed May 2, 2024
1 parent 3c3862e commit 3afe968
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 98 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ class _MaterialConversationListState extends OptimizedState<MaterialConversation
if (controller.selectedChats.isNotEmpty) {
controller.clearSelectedChats();
return;
} else if (controller.showArchivedChats || controller.showUnknownSenders) {
// Pop the current page
Navigator.of(context).pop();
}
},
child: Container(
Expand All @@ -60,14 +63,11 @@ class _MaterialConversationListState extends OptimizedState<MaterialConversation
backgroundColor: backgroundColor,
extendBodyBehindAppBar: true,
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
floatingActionButton: Obx(() => !ss.settings.moveChatCreatorToHeader.value
&& !showArchived && !showUnknown
floatingActionButton: Obx(() => !ss.settings.moveChatCreatorToHeader.value && !showArchived && !showUnknown
? ConversationListFAB(parentController: controller)
: const SizedBox.shrink()),
body: Obx(() {
final _chats = chats.chats
.archivedHelper(showArchived)
.unknownSendersHelper(showUnknown);
final _chats = chats.chats.archivedHelper(showArchived).unknownSendersHelper(showUnknown);

if (!chats.loadedChatBatch.value || _chats.isEmpty) {
return Center(
Expand All @@ -81,16 +81,15 @@ class _MaterialConversationListState extends OptimizedState<MaterialConversation
!chats.loadedChatBatch.value
? "Loading chats..."
: showArchived
? "You have no archived chats"
: showUnknown
? "You have no messages from unknown senders :)"
: "You have no chats :(",
? "You have no archived chats"
: showUnknown
? "You have no messages from unknown senders :)"
: "You have no chats :(",
style: context.theme.textTheme.labelLarge,
textAlign: TextAlign.center,
),
),
if (!chats.loadedChatBatch.value)
buildProgressIndicator(context, size: 15),
if (!chats.loadedChatBatch.value) buildProgressIndicator(context, size: 15),
],
),
),
Expand All @@ -108,16 +107,19 @@ class _MaterialConversationListState extends OptimizedState<MaterialConversation
showScrollbar: true,
controller: controller.materialScrollController,
child: Obx(() => ListView.builder(
controller: controller.materialScrollController,
physics: ThemeSwitcher.getScrollPhysics(),
itemBuilder: (context, index) {
final chat = _chats[index];
return ListItem(chat: chat, controller: controller, update: () {
setState(() {});
});
},
itemCount: _chats.length,
)),
controller: controller.materialScrollController,
physics: ThemeSwitcher.getScrollPhysics(),
itemBuilder: (context, index) {
final chat = _chats[index];
return ListItem(
chat: chat,
controller: controller,
update: () {
setState(() {});
});
},
itemCount: _chats.length,
)),
),
);
}),
Expand Down
156 changes: 79 additions & 77 deletions lib/app/layouts/conversation_list/pages/samsung_conversation_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,9 @@ class SamsungConversationList extends StatefulWidget {
class _SamsungConversationListState extends OptimizedState<SamsungConversationList> {
bool get showArchived => widget.parentController.showArchivedChats;
bool get showUnknown => widget.parentController.showUnknownSenders;
Color get backgroundColor => ss.settings.windowEffect.value == WindowEffect.disabled
? headerColor
: Colors.transparent;
Color get _tileColor => ss.settings.windowEffect.value == WindowEffect.disabled
? tileColor
: Colors.transparent;
Color get backgroundColor =>
ss.settings.windowEffect.value == WindowEffect.disabled ? headerColor : Colors.transparent;
Color get _tileColor => ss.settings.windowEffect.value == WindowEffect.disabled ? tileColor : Colors.transparent;
ConversationListController get controller => widget.parentController;

@override
Expand All @@ -53,112 +50,117 @@ class _SamsungConversationListState extends OptimizedState<SamsungConversationLi
if (controller.selectedChats.isNotEmpty) {
controller.clearSelectedChats();
return;
} else if (controller.showArchivedChats || controller.showUnknownSenders) {
// Pop the current page
Navigator.of(context).pop();
}
},
child: Scaffold(
backgroundColor: backgroundColor,
floatingActionButton: Obx(() => !ss.settings.moveChatCreatorToHeader.value
&& !showArchived && !showUnknown
floatingActionButton: Obx(() => !ss.settings.moveChatCreatorToHeader.value && !showArchived && !showUnknown
? ConversationListFAB(parentController: controller)
: const SizedBox.shrink()),
body: SafeArea(
child: NotificationListener<ScrollEndNotification>(
onNotification: (_) {
if (kIsWeb || kIsDesktop) return false;
final scrollDistance = context.height / 3 - 57;
if (controller.samsungScrollController.offset > 0
&& controller.samsungScrollController.offset < scrollDistance
&& controller.samsungScrollController.offset != controller.samsungScrollController.position.maxScrollExtent) {
final double snapOffset = controller.samsungScrollController.offset / scrollDistance > 0.5 ? scrollDistance : 0;
if (controller.samsungScrollController.offset > 0 &&
controller.samsungScrollController.offset < scrollDistance &&
controller.samsungScrollController.offset !=
controller.samsungScrollController.position.maxScrollExtent) {
final double snapOffset =
controller.samsungScrollController.offset / scrollDistance > 0.5 ? scrollDistance : 0;

Future.microtask(
() => controller.samsungScrollController.animateTo(snapOffset, duration: const Duration(milliseconds: 200), curve: Curves.linear));
Future.microtask(() => controller.samsungScrollController
.animateTo(snapOffset, duration: const Duration(milliseconds: 200), curve: Curves.linear));
}
return false;
},
child: ScrollbarWrapper(
showScrollbar: true,
controller: controller.samsungScrollController,
child: Obx(() {
final _chats = chats.chats
.archivedHelper(controller.showArchivedChats)
.unknownSendersHelper(controller.showUnknownSenders);
child: Obx(() {
final _chats = chats.chats
.archivedHelper(controller.showArchivedChats)
.unknownSendersHelper(controller.showUnknownSenders);

return CustomScrollView(
physics: ThemeSwitcher.getScrollPhysics(),
controller: controller.samsungScrollController,
slivers: [
SamsungHeader(parentController: controller),

if (!chats.loadedChatBatch.value || _chats.bigPinHelper(false).isEmpty)
SliverToBoxAdapter(
child: Center(
child: Padding(
padding: const EdgeInsets.only(top: 50),
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
!chats.loadedChatBatch.value
? "Loading chats..."
: showArchived
? "You have no archived chats"
: showUnknown
? "You have no messages from unknown senders :)"
: "You have no chats :(",
style: context.theme.textTheme.labelLarge,
textAlign: TextAlign.center,
),
return CustomScrollView(
physics: ThemeSwitcher.getScrollPhysics(),
controller: controller.samsungScrollController,
slivers: [
SamsungHeader(parentController: controller),
if (!chats.loadedChatBatch.value || _chats.bigPinHelper(false).isEmpty)
SliverToBoxAdapter(
child: Center(
child: Padding(
padding: const EdgeInsets.only(top: 50),
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
!chats.loadedChatBatch.value
? "Loading chats..."
: showArchived
? "You have no archived chats"
: showUnknown
? "You have no messages from unknown senders :)"
: "You have no chats :(",
style: context.theme.textTheme.labelLarge,
textAlign: TextAlign.center,
),
if (!chats.loadedChatBatch.value)
buildProgressIndicator(context, size: 15),
],
),
),
),
),

if (_chats.bigPinHelper(true).isNotEmpty)
SliverPadding(
padding: const EdgeInsets.only(bottom: 15),
sliver: SliverDecoration(
color: _tileColor,
borderRadius: BorderRadius.circular(25),
sliver: SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
final chat = _chats.bigPinHelper(true)[index];
return ListItem(chat: chat, controller: controller, update: () {
setState(() {});
});
},
childCount: _chats.bigPinHelper(true).length,
)
),
if (!chats.loadedChatBatch.value) buildProgressIndicator(context, size: 15),
],
),
),
),

),
if (_chats.bigPinHelper(true).isNotEmpty)
SliverPadding(
padding: const EdgeInsets.only(bottom: 15),
sliver: SliverDecoration(
color: _tileColor,
borderRadius: BorderRadius.circular(25),
sliver: SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
final chat = _chats.bigPinHelper(false)[index];
return ListItem(chat: chat, controller: controller, update: () {
(context, index) {
final chat = _chats.bigPinHelper(true)[index];
return ListItem(
chat: chat,
controller: controller,
update: () {
setState(() {});
});
},
childCount: _chats.bigPinHelper(true).length,
)),
),
),
SliverPadding(
padding: const EdgeInsets.only(bottom: 15),
sliver: SliverDecoration(
color: _tileColor,
borderRadius: BorderRadius.circular(25),
sliver: SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
final chat = _chats.bigPinHelper(false)[index];
return ListItem(
chat: chat,
controller: controller,
update: () {
setState(() {});
});
},
childCount: _chats.bigPinHelper(false).length,
),
},
childCount: _chats.bigPinHelper(false).length,
),
),
),
],
);
),
],
);
}),
),
),
Expand Down

0 comments on commit 3afe968

Please sign in to comment.