💄 Optimize of account profile card
This commit is contained in:
@@ -4,6 +4,7 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/pods/userinfo.dart';
|
import 'package:island/pods/userinfo.dart';
|
||||||
|
import 'package:island/widgets/account/account_pfc.dart';
|
||||||
import 'package:island/widgets/account/account_picker.dart';
|
import 'package:island/widgets/account/account_picker.dart';
|
||||||
import 'package:island/widgets/alert.dart';
|
import 'package:island/widgets/alert.dart';
|
||||||
import 'package:island/widgets/app_scaffold.dart';
|
import 'package:island/widgets/app_scaffold.dart';
|
||||||
@@ -99,7 +100,10 @@ class RelationshipListTile extends StatelessWidget {
|
|||||||
|
|
||||||
return ListTile(
|
return ListTile(
|
||||||
contentPadding: const EdgeInsets.only(left: 16, right: 12),
|
contentPadding: const EdgeInsets.only(left: 16, right: 12),
|
||||||
leading: ProfilePictureWidget(fileId: account.profile.picture?.id),
|
leading: AccountPfcGestureDetector(
|
||||||
|
uname: account.name,
|
||||||
|
child: ProfilePictureWidget(fileId: account.profile.picture?.id),
|
||||||
|
),
|
||||||
title: Row(
|
title: Row(
|
||||||
spacing: 6,
|
spacing: 6,
|
||||||
children: [
|
children: [
|
||||||
|
@@ -153,7 +153,9 @@ class ChatDetailScreen extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('chatBreak5m').tr(),
|
title: const Text('chatBreak5m').tr(),
|
||||||
subtitle: const Text('chatBreakHour').tr(args: ['chatBreak5m'.tr()]),
|
subtitle: const Text(
|
||||||
|
'chatBreakHour',
|
||||||
|
).tr(args: ['chatBreak5m'.tr()]),
|
||||||
leading: const Icon(Symbols.circle),
|
leading: const Icon(Symbols.circle),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
setChatBreak(now.add(const Duration(minutes: 5)));
|
setChatBreak(now.add(const Duration(minutes: 5)));
|
||||||
@@ -165,7 +167,9 @@ class ChatDetailScreen extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('chatBreak10m').tr(),
|
title: const Text('chatBreak10m').tr(),
|
||||||
subtitle: const Text('chatBreakHour').tr(args: ['chatBreak10m'.tr()]),
|
subtitle: const Text(
|
||||||
|
'chatBreakHour',
|
||||||
|
).tr(args: ['chatBreak10m'.tr()]),
|
||||||
leading: const Icon(Symbols.circle),
|
leading: const Icon(Symbols.circle),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
setChatBreak(now.add(const Duration(minutes: 10)));
|
setChatBreak(now.add(const Duration(minutes: 10)));
|
||||||
@@ -177,7 +181,9 @@ class ChatDetailScreen extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('chatBreak15m').tr(),
|
title: const Text('chatBreak15m').tr(),
|
||||||
subtitle: const Text('chatBreakHour').tr(args: ['chatBreak15m'.tr()]),
|
subtitle: const Text(
|
||||||
|
'chatBreakHour',
|
||||||
|
).tr(args: ['chatBreak15m'.tr()]),
|
||||||
leading: const Icon(Symbols.timer_3),
|
leading: const Icon(Symbols.timer_3),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
setChatBreak(now.add(const Duration(minutes: 15)));
|
setChatBreak(now.add(const Duration(minutes: 15)));
|
||||||
@@ -189,7 +195,9 @@ class ChatDetailScreen extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: const Text('chatBreak30m').tr(),
|
title: const Text('chatBreak30m').tr(),
|
||||||
subtitle: const Text('chatBreakHour').tr(args: ['chatBreak30m'.tr()]),
|
subtitle: const Text(
|
||||||
|
'chatBreakHour',
|
||||||
|
).tr(args: ['chatBreak30m'.tr()]),
|
||||||
leading: const Icon(Symbols.timer),
|
leading: const Icon(Symbols.timer),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
setChatBreak(now.add(const Duration(minutes: 30)));
|
setChatBreak(now.add(const Duration(minutes: 30)));
|
||||||
@@ -247,7 +255,10 @@ class ChatDetailScreen extends HookConsumerWidget {
|
|||||||
return AppScaffold(
|
return AppScaffold(
|
||||||
body: roomState.when(
|
body: roomState.when(
|
||||||
loading: () => const Center(child: CircularProgressIndicator()),
|
loading: () => const Center(child: CircularProgressIndicator()),
|
||||||
error: (error, _) => Center(child: Text('errorGeneric'.tr(args: [error.toString()]))),
|
error:
|
||||||
|
(error, _) => Center(
|
||||||
|
child: Text('errorGeneric'.tr(args: [error.toString()])),
|
||||||
|
),
|
||||||
data:
|
data:
|
||||||
(currentRoom) => CustomScrollView(
|
(currentRoom) => CustomScrollView(
|
||||||
slivers: [
|
slivers: [
|
||||||
@@ -375,12 +386,26 @@ class ChatDetailScreen extends HookConsumerWidget {
|
|||||||
trailing: const Icon(Symbols.chevron_right),
|
trailing: const Icon(Symbols.chevron_right),
|
||||||
title: const Text('searchMessages').tr(),
|
title: const Text('searchMessages').tr(),
|
||||||
subtitle: totalMessages.when(
|
subtitle: totalMessages.when(
|
||||||
data: (count) => Text('messagesCount'.tr(args: [count.toString()])),
|
data:
|
||||||
loading: () => const CircularProgressIndicator(),
|
(count) => Text(
|
||||||
error: (err, stack) => Text('errorGeneric'.tr(args: [err.toString()])),
|
'messagesCount'.tr(
|
||||||
|
args: [count.toString()],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
loading:
|
||||||
|
() => const CircularProgressIndicator(),
|
||||||
|
error:
|
||||||
|
(err, stack) => Text(
|
||||||
|
'errorGeneric'.tr(
|
||||||
|
args: [err.toString()],
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
context.pushNamed('searchMessages', pathParameters: {'id': id});
|
context.pushNamed(
|
||||||
|
'searchMessages',
|
||||||
|
pathParameters: {'id': id},
|
||||||
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -716,7 +741,7 @@ class _ChatMemberListSheet extends HookConsumerWidget {
|
|||||||
? 'permissionModerator'
|
? 'permissionModerator'
|
||||||
: 'permissionMember',
|
: 'permissionMember',
|
||||||
).tr(),
|
).tr(),
|
||||||
Text('dotSeparator').bold().padding(horizontal: 6),
|
Text('·').bold().padding(horizontal: 6),
|
||||||
Expanded(child: Text("@${member.account.name}")),
|
Expanded(child: Text("@${member.account.name}")),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@@ -162,7 +162,7 @@ class VerificationStatusCard extends StatelessWidget {
|
|||||||
size: 32,
|
size: 32,
|
||||||
color: kVerificationMarkColors[mark.type],
|
color: kVerificationMarkColors[mark.type],
|
||||||
fill: 1,
|
fill: 1,
|
||||||
),
|
).alignment(Alignment.centerLeft),
|
||||||
const Gap(8),
|
const Gap(8),
|
||||||
Text(mark.title ?? 'No title').bold(),
|
Text(mark.title ?? 'No title').bold(),
|
||||||
Text(mark.description ?? 'descriptionNone'.tr()),
|
Text(mark.description ?? 'descriptionNone'.tr()),
|
||||||
|
@@ -111,7 +111,10 @@ class AccountProfileCard extends HookConsumerWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
if (data.profile.timeZone.isNotEmpty && !kIsWeb)
|
if (data.profile.timeZone.isNotEmpty && !kIsWeb)
|
||||||
Row(
|
() {
|
||||||
|
try {
|
||||||
|
final tzInfo = getTzInfo(data.profile.timeZone);
|
||||||
|
return Row(
|
||||||
spacing: 6,
|
spacing: 6,
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -120,17 +123,27 @@ class AccountProfileCard extends HookConsumerWidget {
|
|||||||
fill: 1,
|
fill: 1,
|
||||||
).padding(right: 2),
|
).padding(right: 2),
|
||||||
Text(
|
Text(
|
||||||
getTzInfo(
|
tzInfo.$2.formatCustomGlobal('HH:mm'),
|
||||||
data.profile.timeZone,
|
|
||||||
).$2.formatCustomGlobal('HH:mm'),
|
|
||||||
).fontSize(12),
|
).fontSize(12),
|
||||||
Text(
|
Text(
|
||||||
getTzInfo(
|
tzInfo.$1.formatOffsetLocal(),
|
||||||
data.profile.timeZone,
|
|
||||||
).$1.formatOffsetLocal(),
|
|
||||||
).fontSize(12),
|
).fontSize(12),
|
||||||
],
|
],
|
||||||
).padding(top: 2),
|
).padding(top: 2);
|
||||||
|
} catch (e) {
|
||||||
|
return Row(
|
||||||
|
spacing: 6,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Symbols.alarm,
|
||||||
|
size: 17,
|
||||||
|
fill: 1,
|
||||||
|
).padding(right: 2),
|
||||||
|
Text('timezoneNotFound'.tr()).fontSize(12),
|
||||||
|
],
|
||||||
|
).padding(top: 2);
|
||||||
|
}
|
||||||
|
}(),
|
||||||
if (data.badges.isNotEmpty)
|
if (data.badges.isNotEmpty)
|
||||||
BadgeList(badges: data.badges).padding(top: 12),
|
BadgeList(badges: data.badges).padding(top: 12),
|
||||||
LevelingProgressCard(
|
LevelingProgressCard(
|
||||||
|
Reference in New Issue
Block a user