💄 Better post quick reply

This commit is contained in:
2025-10-12 22:26:37 +08:00
parent 1be33916af
commit 67def56ad1
3 changed files with 98 additions and 100 deletions

View File

@@ -490,14 +490,13 @@ class PostDetailScreen extends HookConsumerWidget {
),
if (user.value != null)
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Material(
elevation: 2,
color: Theme.of(context).colorScheme.surfaceContainer,
child: postState
.when(
bottom: 16 + MediaQuery.of(context).padding.bottom,
left: 16,
right: 16,
child:
ConstrainedBox(
constraints: BoxConstraints(maxWidth: 660),
child: postState.when(
data:
(post) => PostQuickReply(
parent: post!,
@@ -509,13 +508,8 @@ class PostDetailScreen extends HookConsumerWidget {
),
loading: () => const SizedBox.shrink(),
error: (_, _) => const SizedBox.shrink(),
)
.padding(
bottom: MediaQuery.of(context).padding.bottom + 8,
top: 8,
horizontal: 16,
),
),
).center(),
),
],
);

View File

@@ -1,6 +1,7 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/post.dart';
@@ -69,8 +70,14 @@ class PostQuickReply extends HookConsumerWidget {
return publishers.when(
data:
(data) => Row(
spacing: 8,
(data) => Material(
elevation: 2,
color: Theme.of(context).colorScheme.surfaceContainerHighest,
borderRadius: BorderRadius.circular(20),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 8),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
child: ProfilePictureWidget(
@@ -83,10 +90,12 @@ class PostQuickReply extends HookConsumerWidget {
context: context,
builder: (context) => PublisherModal(),
).then((value) {
if (value is SnPublisher) currentPublisher.value = value;
if (value is SnPublisher) {
currentPublisher.value = value;
}
});
},
).padding(right: 4),
).padding(right: 12),
Expanded(
child: TextField(
controller: contentController,
@@ -97,7 +106,7 @@ class PostQuickReply extends HookConsumerWidget {
isCollapsed: true,
contentPadding: EdgeInsets.symmetric(
horizontal: 12,
vertical: 8,
vertical: 9,
),
),
style: TextStyle(fontSize: 14),
@@ -106,6 +115,7 @@ class PostQuickReply extends HookConsumerWidget {
(_) => FocusManager.instance.primaryFocus?.unfocus(),
),
),
const Gap(8),
IconButton(
onPressed: () {
onLaunch?.call();
@@ -122,13 +132,9 @@ class PostQuickReply extends HookConsumerWidget {
});
},
icon: const Icon(Symbols.launch, size: 20),
padding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
constraints: const BoxConstraints(),
),
IconButton(
padding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
icon:
submitting.value
? SizedBox(
@@ -139,10 +145,12 @@ class PostQuickReply extends HookConsumerWidget {
: Icon(Symbols.send, size: 20),
color: Theme.of(context).colorScheme.primary,
onPressed: submitting.value ? null : performAction,
constraints: const BoxConstraints(),
visualDensity: VisualDensity.compact,
),
],
),
),
),
loading: () => const SizedBox.shrink(),
error: (e, _) => const SizedBox.shrink(),
);

View File

@@ -36,10 +36,7 @@ class PostRepliesSheet extends HookConsumerWidget {
),
// Quick reply section
if (user.value != null)
Material(
elevation: 2,
color: Theme.of(context).colorScheme.surfaceContainerHigh,
child: PostQuickReply(
PostQuickReply(
parent: post,
onPosted: () {
ref.invalidate(postRepliesNotifierProvider(post.id));
@@ -48,11 +45,10 @@ class PostRepliesSheet extends HookConsumerWidget {
Navigator.of(context).pop();
},
).padding(
bottom: MediaQuery.of(context).padding.bottom + 8,
bottom: MediaQuery.of(context).padding.bottom + 16,
top: 8,
horizontal: 16,
),
),
],
),
);