💫 Animated command pattle

This commit is contained in:
2025-12-20 22:58:53 +08:00
parent 2ee6b3514c
commit 6010c17900

View File

@@ -316,15 +316,15 @@ class CommandPattleWidget extends HookConsumerWidget {
onTap: onDismiss, onTap: onDismiss,
child: BackdropFilter( child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
child: AnimatedBuilder( child: Container(
animation: animationController, color: Colors.black.withOpacity(0.5),
builder: (context, child) => Opacity( child: Center(
opacity: opacityAnimation, child: AnimatedBuilder(
child: Transform.scale(scale: scaleAnimation, child: child), animation: animationController,
), builder: (context, child) => Opacity(
child: Container( opacity: opacityAnimation,
color: Colors.black.withOpacity(0.5), child: Transform.scale(scale: scaleAnimation, child: child),
child: Center( ),
child: GestureDetector( child: GestureDetector(
onTap: onTap:
() {}, // Prevent tap from dismissing when tapping inside () {}, // Prevent tap from dismissing when tapping inside
@@ -355,8 +355,8 @@ class CommandPattleWidget extends HookConsumerWidget {
controller: textController, controller: textController,
focusNode: focusNode, focusNode: focusNode,
hintText: 'Search chats and pages...', hintText: 'Search chats and pages...',
leading: const Icon( leading: CircleAvatar(
Symbols.keyboard_command_key, child: const Icon(Symbols.keyboard_command_key),
).padding(horizontal: 8), ).padding(horizontal: 8),
onSubmitted: (_) { onSubmitted: (_) {
if (allResults.isNotEmpty) { if (allResults.isNotEmpty) {
@@ -369,32 +369,48 @@ class CommandPattleWidget extends HookConsumerWidget {
} }
}, },
), ),
if (allResults.isNotEmpty) AnimatedSize(
Flexible( duration: const Duration(milliseconds: 200),
child: ListView.builder( curve: Curves.easeOut,
shrinkWrap: true, child: allResults.isNotEmpty
itemCount: allResults.length, ? ConstrainedBox(
itemBuilder: (context, index) { constraints: const BoxConstraints(
final item = allResults[index]; maxHeight: 300,
if (item is SnChatRoom) { ),
return _ChatRoomSearchResult( child: ListView.builder(
room: item, shrinkWrap: true,
isFocused: index == focusedIndex.value, itemCount: allResults.length,
onTap: () => itemBuilder: (context, index) {
_navigateToChat(context, ref, item), final item = allResults[index];
); if (item is SnChatRoom) {
} else if (item is RouteItem) { return _ChatRoomSearchResult(
return _RouteSearchResult( room: item,
route: item, isFocused:
isFocused: index == focusedIndex.value, index == focusedIndex.value,
onTap: () => onTap: () => _navigateToChat(
_navigateToRoute(context, ref, item), context,
); ref,
} item,
return const SizedBox.shrink(); ),
}, );
), } else if (item is RouteItem) {
), return _RouteSearchResult(
route: item,
isFocused:
index == focusedIndex.value,
onTap: () => _navigateToRoute(
context,
ref,
item,
),
);
}
return const SizedBox.shrink();
},
),
)
: const SizedBox.shrink(),
),
], ],
), ),
), ),