feat(apps): update UI screens and shared components

- Update home screen with new composer and interactions
- Update settings screens with new profile flow
- Update calendar share dialog
- Update contacts screen
- Add new shared widgets: confirm_sheet, phone_prefix_selector
- Add new formatters: phone_display_formatter
- Update tests for modified components
This commit is contained in:
qzl
2026-03-19 18:43:08 +08:00
parent f0af44d840
commit 8d4a14150b
24 changed files with 868 additions and 989 deletions
@@ -24,8 +24,8 @@ class HomeComposerStack extends StatelessWidget {
required this.onHoldToSpeakEnd,
required this.onHoldToSpeakMoveUpdate,
required this.onHoldToSpeakCancel,
required this.onTextFieldTap,
required this.onSubmit,
required this.keyboardInset,
});
final List<XFile> selectedImages;
@@ -43,8 +43,8 @@ class HomeComposerStack extends StatelessWidget {
final VoidCallback onHoldToSpeakEnd;
final ValueChanged<LongPressMoveUpdateDetails> onHoldToSpeakMoveUpdate;
final VoidCallback onHoldToSpeakCancel;
final VoidCallback onTextFieldTap;
final VoidCallback onSubmit;
final double keyboardInset;
@override
Widget build(BuildContext context) {
@@ -57,7 +57,12 @@ class HomeComposerStack extends StatelessWidget {
return Align(
alignment: Alignment.bottomCenter,
child: Padding(
padding: const EdgeInsets.all(AppSpacing.lg),
padding: EdgeInsets.fromLTRB(
AppSpacing.lg,
AppSpacing.lg,
AppSpacing.lg,
AppSpacing.lg + keyboardInset,
),
child: KeyedSubtree(
key: const ValueKey('home_bottom_input_stack'),
child: Column(
@@ -141,7 +146,6 @@ class HomeComposerStack extends StatelessWidget {
contentPadding: EdgeInsets.zero,
filled: false,
),
onTap: onTextFieldTap,
onSubmitted: (_) => onSubmit(),
),
),