🐛 Fix poll feedback, close #224

This commit is contained in:
2026-01-01 02:02:12 +08:00
parent ec71125fa9
commit 788165ac5b

View File

@@ -56,8 +56,7 @@ class PollFeedbackSheet extends HookConsumerWidget {
return SheetScaffold( return SheetScaffold(
titleText: title ?? 'Poll feedback', titleText: title ?? 'Poll feedback',
child: poll.when( child: poll.when(
data: data: (data) => CustomScrollView(
(data) => CustomScrollView(
slivers: [ slivers: [
SliverToBoxAdapter(child: _PollHeader(poll: data)), SliverToBoxAdapter(child: _PollHeader(poll: data)),
SliverToBoxAdapter(child: const Divider(height: 1)), SliverToBoxAdapter(child: const Divider(height: 1)),
@@ -66,6 +65,7 @@ class PollFeedbackSheet extends HookConsumerWidget {
provider: provider, provider: provider,
notifier: provider.notifier, notifier: provider.notifier,
isSliver: true, isSliver: true,
isRefreshable: false,
itemBuilder: (context, index, answer) { itemBuilder: (context, index, answer) {
return Column( return Column(
children: [ children: [
@@ -79,8 +79,7 @@ class PollFeedbackSheet extends HookConsumerWidget {
SliverGap(4 + MediaQuery.of(context).padding.bottom), SliverGap(4 + MediaQuery.of(context).padding.bottom),
], ],
), ),
error: error: (err, _) => ResponseErrorWidget(
(err, _) => ResponseErrorWidget(
error: err, error: err,
onRetry: () => ref.invalidate(pollWithStatsProvider(pollId)), onRetry: () => ref.invalidate(pollWithStatsProvider(pollId)),
), ),
@@ -120,8 +119,7 @@ class _PollHeader extends StatelessWidget {
ExpansionTile( ExpansionTile(
title: Text('pollQuestions').tr().fontSize(17).bold(), title: Text('pollQuestions').tr().fontSize(17).bold(),
tilePadding: EdgeInsets.symmetric(horizontal: 20), tilePadding: EdgeInsets.symmetric(horizontal: 20),
children: children: poll.questions
poll.questions
.map( .map(
(q) => Column( (q) => Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
@@ -165,8 +163,7 @@ class _PollAnswerTile extends StatelessWidget {
if (val is List) { if (val is List) {
final ids = val.whereType<String>().toList(); final ids = val.whereType<String>().toList();
if (ids.isEmpty) return ''; if (ids.isEmpty) return '';
final labels = final labels = ids.map((id) {
ids.map((id) {
final opt = q.options?.firstWhere( final opt = q.options?.firstWhere(
(o) => o.id == id, (o) => o.id == id,
orElse: () => SnPollOption(id: id, label: '#$id', order: 0), orElse: () => SnPollOption(id: id, label: '#$id', order: 0),
@@ -197,8 +194,7 @@ class _PollAnswerTile extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// Submit date/time (title) // Submit date/time (title)
final submitText = final submitText = answer.account == null
answer.account == null
? answer.createdAt.formatSystem() ? answer.createdAt.formatSystem()
: '${answer.account!.nick} · ${answer.createdAt.formatSystem()}'; : '${answer.account!.nick} · ${answer.createdAt.formatSystem()}';
@@ -237,8 +233,7 @@ class _PollAnswerTile extends StatelessWidget {
return ListTile( return ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 20), contentPadding: const EdgeInsets.symmetric(horizontal: 20),
isThreeLine: true, isThreeLine: true,
leading: leading: answer.account == null
answer.account == null
? const CircleAvatar( ? const CircleAvatar(
radius: 16, radius: 16,
child: Icon(Icons.how_to_vote, size: 16), child: Icon(Icons.how_to_vote, size: 16),