feat: add tap to close keyboard on chat detail screen

This commit is contained in:
Joey Boerwinkel 2025-03-11 14:44:14 +01:00 committed by FlutterJoey
parent 3b4b456db2
commit 9b365d573d

View file

@ -497,19 +497,27 @@ class _ChatBody extends HookWidget {
bottomSpinner,
];
var messageList = ListView.builder(
reverse: false,
controller: scrollController,
physics: const AlwaysScrollableScrollPhysics(),
padding: const EdgeInsets.only(top: 24),
itemCount: listViewChildren.length,
itemBuilder: (context, index) => listViewChildren[index],
);
return Column(
children: [
if (chatIsLoading && options.enableLoadingIndicator) ...[
Expanded(child: options.builders.loadingWidgetBuilder.call(context)),
Expanded(
child: _CloseKeyboardOnTap(
child: options.builders.loadingWidgetBuilder.call(context),
),
),
] else ...[
Expanded(
child: ListView.builder(
reverse: false,
controller: scrollController,
physics: const AlwaysScrollableScrollPhysics(),
padding: const EdgeInsets.only(top: 24),
itemCount: listViewChildren.length,
itemBuilder: (context, index) => listViewChildren[index],
child: _CloseKeyboardOnTap(
child: messageList,
),
),
],
@ -519,6 +527,26 @@ class _ChatBody extends HookWidget {
}
}
class _CloseKeyboardOnTap extends StatelessWidget {
const _CloseKeyboardOnTap({
required this.child,
});
final Widget child;
@override
Widget build(BuildContext context) => GestureDetector(
behavior: HitTestBehavior.translucent,
onTapUp: (_) {
var mediaQuery = MediaQuery.of(context);
if (mediaQuery.viewInsets.isNonNegative) {
FocusScope.of(context).unfocus();
}
},
child: child,
);
}
/// Default widget used when displaying an error for chats.
class ErrorLoadingMessages extends StatelessWidget {
/// Create default error displaying widget for error in loading messages