♻️ Refactored markdown content

This commit is contained in:
LittleSheep 2025-05-18 19:46:57 +08:00
parent 1d54f947f6
commit 9c0221ab20
16 changed files with 484 additions and 517 deletions

View File

@ -18,7 +18,7 @@
"loginResetPasswordHint": "Provide your username to receive a password reset link.", "loginResetPasswordHint": "Provide your username to receive a password reset link.",
"password": "Password", "password": "Password",
"next": "Next", "next": "Next",
"createAccount": "Create an Account", "createAccount": "Create an Account",
"nickname": "Nickname", "nickname": "Nickname",
"email": "Email", "email": "Email",
"bio": "Bio", "bio": "Bio",
@ -244,5 +244,9 @@
"removeRealmMemberHint": "Are you sure to remove this member from the realm?", "removeRealmMemberHint": "Are you sure to remove this member from the realm?",
"memberRole": "Member Role", "memberRole": "Member Role",
"memberRoleHint": "Greater number has higher permission.", "memberRoleHint": "Greater number has higher permission.",
"memberRoleEdit": "Edit role for @{}" "memberRoleEdit": "Edit role for @{}",
"openLinkConfirm": "Leaving the Solar Network",
"openLinkConfirmDescription": "You're going to leave the Solar Network and open the link ({}) in your browser. It is not related to Solar Network. Beware of phishing and scams.",
"brokenLink": "Unable open link {}... It might be broken or missing uri parts...",
"copyToClipboard": "Copy to clipboard"
} }

View File

@ -30,7 +30,7 @@ abstract class SnStickerPack with _$SnStickerPack {
required String name, required String name,
required String description, required String description,
required String prefix, required String prefix,
required int publisherId, required String publisherId,
required SnPublisher? publisher, required SnPublisher? publisher,
required DateTime createdAt, required DateTime createdAt,
required DateTime updatedAt, required DateTime updatedAt,

View File

@ -215,7 +215,7 @@ $SnStickerPackCopyWith<$Res>? get pack {
/// @nodoc /// @nodoc
mixin _$SnStickerPack { mixin _$SnStickerPack {
String get id; String get name; String get description; String get prefix; int get publisherId; SnPublisher? get publisher; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; String get id; String get name; String get description; String get prefix; String get publisherId; SnPublisher? get publisher; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
/// Create a copy of SnStickerPack /// Create a copy of SnStickerPack
/// with the given fields replaced by the non-null parameter values. /// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false) @JsonKey(includeFromJson: false, includeToJson: false)
@ -248,7 +248,7 @@ abstract mixin class $SnStickerPackCopyWith<$Res> {
factory $SnStickerPackCopyWith(SnStickerPack value, $Res Function(SnStickerPack) _then) = _$SnStickerPackCopyWithImpl; factory $SnStickerPackCopyWith(SnStickerPack value, $Res Function(SnStickerPack) _then) = _$SnStickerPackCopyWithImpl;
@useResult @useResult
$Res call({ $Res call({
String id, String name, String description, String prefix, int publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
}); });
@ -272,7 +272,7 @@ as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non
as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
as int,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
@ -306,7 +306,7 @@ class _SnStickerPack implements SnStickerPack {
@override final String name; @override final String name;
@override final String description; @override final String description;
@override final String prefix; @override final String prefix;
@override final int publisherId; @override final String publisherId;
@override final SnPublisher? publisher; @override final SnPublisher? publisher;
@override final DateTime createdAt; @override final DateTime createdAt;
@override final DateTime updatedAt; @override final DateTime updatedAt;
@ -345,7 +345,7 @@ abstract mixin class _$SnStickerPackCopyWith<$Res> implements $SnStickerPackCopy
factory _$SnStickerPackCopyWith(_SnStickerPack value, $Res Function(_SnStickerPack) _then) = __$SnStickerPackCopyWithImpl; factory _$SnStickerPackCopyWith(_SnStickerPack value, $Res Function(_SnStickerPack) _then) = __$SnStickerPackCopyWithImpl;
@override @useResult @override @useResult
$Res call({ $Res call({
String id, String name, String description, String prefix, int publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
}); });
@ -369,7 +369,7 @@ as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non
as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
as int,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable

View File

@ -43,7 +43,7 @@ _SnStickerPack _$SnStickerPackFromJson(Map<String, dynamic> json) =>
name: json['name'] as String, name: json['name'] as String,
description: json['description'] as String, description: json['description'] as String,
prefix: json['prefix'] as String, prefix: json['prefix'] as String,
publisherId: (json['publisher_id'] as num).toInt(), publisherId: json['publisher_id'] as String,
publisher: publisher:
json['publisher'] == null json['publisher'] == null
? null ? null

View File

@ -24,7 +24,6 @@ class AppRouter extends RootStackRouter {
AutoRoute(page: SettingsRoute.page, path: '/settings'), AutoRoute(page: SettingsRoute.page, path: '/settings'),
AutoRoute(page: LoginRoute.page, path: '/auth/login'), AutoRoute(page: LoginRoute.page, path: '/auth/login'),
AutoRoute(page: CreateAccountRoute.page, path: '/auth/create-account'), AutoRoute(page: CreateAccountRoute.page, path: '/auth/create-account'),
AutoRoute(page: MyselfProfileRoute.page, path: '/account/me'),
AutoRoute(page: AccountSettingsRoute.page, path: '/account/settings'), AutoRoute(page: AccountSettingsRoute.page, path: '/account/settings'),
AutoRoute( AutoRoute(
page: MyselfEventCalendarRoute.page, page: MyselfEventCalendarRoute.page,

View File

@ -9,20 +9,19 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: no_leading_underscores_for_library_prefixes // ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:auto_route/auto_route.dart' as _i26; import 'package:auto_route/auto_route.dart' as _i25;
import 'package:flutter/material.dart' as _i27; import 'package:flutter/material.dart' as _i26;
import 'package:island/models/post.dart' as _i28; import 'package:island/models/post.dart' as _i27;
import 'package:island/screens/account.dart' as _i2; import 'package:island/screens/account.dart' as _i2;
import 'package:island/screens/account/me.dart' as _i16;
import 'package:island/screens/account/me/event_calendar.dart' as _i15; import 'package:island/screens/account/me/event_calendar.dart' as _i15;
import 'package:island/screens/account/me/publishers.dart' as _i9; import 'package:island/screens/account/me/publishers.dart' as _i9;
import 'package:island/screens/account/me/settings.dart' as _i3; import 'package:island/screens/account/me/settings.dart' as _i3;
import 'package:island/screens/account/me/update.dart' as _i24; import 'package:island/screens/account/me/update.dart' as _i23;
import 'package:island/screens/account/profile.dart' as _i1; import 'package:island/screens/account/profile.dart' as _i1;
import 'package:island/screens/account/relationship.dart' as _i21; import 'package:island/screens/account/relationship.dart' as _i20;
import 'package:island/screens/auth/create_account.dart' as _i7; import 'package:island/screens/auth/create_account.dart' as _i7;
import 'package:island/screens/auth/login.dart' as _i14; import 'package:island/screens/auth/login.dart' as _i14;
import 'package:island/screens/auth/tabs.dart' as _i23; import 'package:island/screens/auth/tabs.dart' as _i22;
import 'package:island/screens/chat/chat.dart' as _i5; import 'package:island/screens/chat/chat.dart' as _i5;
import 'package:island/screens/chat/room.dart' as _i6; import 'package:island/screens/chat/room.dart' as _i6;
import 'package:island/screens/chat/room_detail.dart' as _i4; import 'package:island/screens/chat/room_detail.dart' as _i4;
@ -30,21 +29,21 @@ import 'package:island/screens/creators/hub.dart' as _i8;
import 'package:island/screens/creators/stickers/pack_detail.dart' as _i12; import 'package:island/screens/creators/stickers/pack_detail.dart' as _i12;
import 'package:island/screens/creators/stickers/stickers.dart' as _i11; import 'package:island/screens/creators/stickers/stickers.dart' as _i11;
import 'package:island/screens/explore.dart' as _i13; import 'package:island/screens/explore.dart' as _i13;
import 'package:island/screens/posts/compose.dart' as _i17; import 'package:island/screens/posts/compose.dart' as _i16;
import 'package:island/screens/posts/detail.dart' as _i18; import 'package:island/screens/posts/detail.dart' as _i17;
import 'package:island/screens/posts/pub_profile.dart' as _i19; import 'package:island/screens/posts/pub_profile.dart' as _i18;
import 'package:island/screens/realm/detail.dart' as _i20; import 'package:island/screens/realm/detail.dart' as _i19;
import 'package:island/screens/realm/realms.dart' as _i10; import 'package:island/screens/realm/realms.dart' as _i10;
import 'package:island/screens/settings.dart' as _i22; import 'package:island/screens/settings.dart' as _i21;
import 'package:island/screens/wallet.dart' as _i25; import 'package:island/screens/wallet.dart' as _i24;
/// generated route for /// generated route for
/// [_i1.AccountProfileScreen] /// [_i1.AccountProfileScreen]
class AccountProfileRoute extends _i26.PageRouteInfo<AccountProfileRouteArgs> { class AccountProfileRoute extends _i25.PageRouteInfo<AccountProfileRouteArgs> {
AccountProfileRoute({ AccountProfileRoute({
_i27.Key? key, _i26.Key? key,
required String name, required String name,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
AccountProfileRoute.name, AccountProfileRoute.name,
args: AccountProfileRouteArgs(key: key, name: name), args: AccountProfileRouteArgs(key: key, name: name),
@ -54,7 +53,7 @@ class AccountProfileRoute extends _i26.PageRouteInfo<AccountProfileRouteArgs> {
static const String name = 'AccountProfileRoute'; static const String name = 'AccountProfileRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -70,7 +69,7 @@ class AccountProfileRoute extends _i26.PageRouteInfo<AccountProfileRouteArgs> {
class AccountProfileRouteArgs { class AccountProfileRouteArgs {
const AccountProfileRouteArgs({this.key, required this.name}); const AccountProfileRouteArgs({this.key, required this.name});
final _i27.Key? key; final _i26.Key? key;
final String name; final String name;
@ -82,13 +81,13 @@ class AccountProfileRouteArgs {
/// generated route for /// generated route for
/// [_i2.AccountScreen] /// [_i2.AccountScreen]
class AccountRoute extends _i26.PageRouteInfo<void> { class AccountRoute extends _i25.PageRouteInfo<void> {
const AccountRoute({List<_i26.PageRouteInfo>? children}) const AccountRoute({List<_i25.PageRouteInfo>? children})
: super(AccountRoute.name, initialChildren: children); : super(AccountRoute.name, initialChildren: children);
static const String name = 'AccountRoute'; static const String name = 'AccountRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i2.AccountScreen(); return const _i2.AccountScreen();
@ -98,13 +97,13 @@ class AccountRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i3.AccountSettingsScreen] /// [_i3.AccountSettingsScreen]
class AccountSettingsRoute extends _i26.PageRouteInfo<void> { class AccountSettingsRoute extends _i25.PageRouteInfo<void> {
const AccountSettingsRoute({List<_i26.PageRouteInfo>? children}) const AccountSettingsRoute({List<_i25.PageRouteInfo>? children})
: super(AccountSettingsRoute.name, initialChildren: children); : super(AccountSettingsRoute.name, initialChildren: children);
static const String name = 'AccountSettingsRoute'; static const String name = 'AccountSettingsRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i3.AccountSettingsScreen(); return const _i3.AccountSettingsScreen();
@ -114,11 +113,11 @@ class AccountSettingsRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i4.ChatDetailScreen] /// [_i4.ChatDetailScreen]
class ChatDetailRoute extends _i26.PageRouteInfo<ChatDetailRouteArgs> { class ChatDetailRoute extends _i25.PageRouteInfo<ChatDetailRouteArgs> {
ChatDetailRoute({ ChatDetailRoute({
_i27.Key? key, _i26.Key? key,
required String id, required String id,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
ChatDetailRoute.name, ChatDetailRoute.name,
args: ChatDetailRouteArgs(key: key, id: id), args: ChatDetailRouteArgs(key: key, id: id),
@ -128,7 +127,7 @@ class ChatDetailRoute extends _i26.PageRouteInfo<ChatDetailRouteArgs> {
static const String name = 'ChatDetailRoute'; static const String name = 'ChatDetailRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -143,7 +142,7 @@ class ChatDetailRoute extends _i26.PageRouteInfo<ChatDetailRouteArgs> {
class ChatDetailRouteArgs { class ChatDetailRouteArgs {
const ChatDetailRouteArgs({this.key, required this.id}); const ChatDetailRouteArgs({this.key, required this.id});
final _i27.Key? key; final _i26.Key? key;
final String id; final String id;
@ -155,13 +154,13 @@ class ChatDetailRouteArgs {
/// generated route for /// generated route for
/// [_i5.ChatListScreen] /// [_i5.ChatListScreen]
class ChatListRoute extends _i26.PageRouteInfo<void> { class ChatListRoute extends _i25.PageRouteInfo<void> {
const ChatListRoute({List<_i26.PageRouteInfo>? children}) const ChatListRoute({List<_i25.PageRouteInfo>? children})
: super(ChatListRoute.name, initialChildren: children); : super(ChatListRoute.name, initialChildren: children);
static const String name = 'ChatListRoute'; static const String name = 'ChatListRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i5.ChatListScreen(); return const _i5.ChatListScreen();
@ -171,11 +170,11 @@ class ChatListRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i6.ChatRoomScreen] /// [_i6.ChatRoomScreen]
class ChatRoomRoute extends _i26.PageRouteInfo<ChatRoomRouteArgs> { class ChatRoomRoute extends _i25.PageRouteInfo<ChatRoomRouteArgs> {
ChatRoomRoute({ ChatRoomRoute({
_i27.Key? key, _i26.Key? key,
required String id, required String id,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
ChatRoomRoute.name, ChatRoomRoute.name,
args: ChatRoomRouteArgs(key: key, id: id), args: ChatRoomRouteArgs(key: key, id: id),
@ -185,7 +184,7 @@ class ChatRoomRoute extends _i26.PageRouteInfo<ChatRoomRouteArgs> {
static const String name = 'ChatRoomRoute'; static const String name = 'ChatRoomRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -200,7 +199,7 @@ class ChatRoomRoute extends _i26.PageRouteInfo<ChatRoomRouteArgs> {
class ChatRoomRouteArgs { class ChatRoomRouteArgs {
const ChatRoomRouteArgs({this.key, required this.id}); const ChatRoomRouteArgs({this.key, required this.id});
final _i27.Key? key; final _i26.Key? key;
final String id; final String id;
@ -212,13 +211,13 @@ class ChatRoomRouteArgs {
/// generated route for /// generated route for
/// [_i7.CreateAccountScreen] /// [_i7.CreateAccountScreen]
class CreateAccountRoute extends _i26.PageRouteInfo<void> { class CreateAccountRoute extends _i25.PageRouteInfo<void> {
const CreateAccountRoute({List<_i26.PageRouteInfo>? children}) const CreateAccountRoute({List<_i25.PageRouteInfo>? children})
: super(CreateAccountRoute.name, initialChildren: children); : super(CreateAccountRoute.name, initialChildren: children);
static const String name = 'CreateAccountRoute'; static const String name = 'CreateAccountRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i7.CreateAccountScreen(); return const _i7.CreateAccountScreen();
@ -228,13 +227,13 @@ class CreateAccountRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i8.CreatorHubScreen] /// [_i8.CreatorHubScreen]
class CreatorHubRoute extends _i26.PageRouteInfo<void> { class CreatorHubRoute extends _i25.PageRouteInfo<void> {
const CreatorHubRoute({List<_i26.PageRouteInfo>? children}) const CreatorHubRoute({List<_i25.PageRouteInfo>? children})
: super(CreatorHubRoute.name, initialChildren: children); : super(CreatorHubRoute.name, initialChildren: children);
static const String name = 'CreatorHubRoute'; static const String name = 'CreatorHubRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i8.CreatorHubScreen(); return const _i8.CreatorHubScreen();
@ -244,8 +243,8 @@ class CreatorHubRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i5.EditChatScreen] /// [_i5.EditChatScreen]
class EditChatRoute extends _i26.PageRouteInfo<EditChatRouteArgs> { class EditChatRoute extends _i25.PageRouteInfo<EditChatRouteArgs> {
EditChatRoute({_i27.Key? key, String? id, List<_i26.PageRouteInfo>? children}) EditChatRoute({_i26.Key? key, String? id, List<_i25.PageRouteInfo>? children})
: super( : super(
EditChatRoute.name, EditChatRoute.name,
args: EditChatRouteArgs(key: key, id: id), args: EditChatRouteArgs(key: key, id: id),
@ -255,7 +254,7 @@ class EditChatRoute extends _i26.PageRouteInfo<EditChatRouteArgs> {
static const String name = 'EditChatRoute'; static const String name = 'EditChatRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -270,7 +269,7 @@ class EditChatRoute extends _i26.PageRouteInfo<EditChatRouteArgs> {
class EditChatRouteArgs { class EditChatRouteArgs {
const EditChatRouteArgs({this.key, this.id}); const EditChatRouteArgs({this.key, this.id});
final _i27.Key? key; final _i26.Key? key;
final String? id; final String? id;
@ -282,11 +281,11 @@ class EditChatRouteArgs {
/// generated route for /// generated route for
/// [_i9.EditPublisherScreen] /// [_i9.EditPublisherScreen]
class EditPublisherRoute extends _i26.PageRouteInfo<EditPublisherRouteArgs> { class EditPublisherRoute extends _i25.PageRouteInfo<EditPublisherRouteArgs> {
EditPublisherRoute({ EditPublisherRoute({
_i27.Key? key, _i26.Key? key,
String? name, String? name,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
EditPublisherRoute.name, EditPublisherRoute.name,
args: EditPublisherRouteArgs(key: key, name: name), args: EditPublisherRouteArgs(key: key, name: name),
@ -296,7 +295,7 @@ class EditPublisherRoute extends _i26.PageRouteInfo<EditPublisherRouteArgs> {
static const String name = 'EditPublisherRoute'; static const String name = 'EditPublisherRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -311,7 +310,7 @@ class EditPublisherRoute extends _i26.PageRouteInfo<EditPublisherRouteArgs> {
class EditPublisherRouteArgs { class EditPublisherRouteArgs {
const EditPublisherRouteArgs({this.key, this.name}); const EditPublisherRouteArgs({this.key, this.name});
final _i27.Key? key; final _i26.Key? key;
final String? name; final String? name;
@ -323,11 +322,11 @@ class EditPublisherRouteArgs {
/// generated route for /// generated route for
/// [_i10.EditRealmScreen] /// [_i10.EditRealmScreen]
class EditRealmRoute extends _i26.PageRouteInfo<EditRealmRouteArgs> { class EditRealmRoute extends _i25.PageRouteInfo<EditRealmRouteArgs> {
EditRealmRoute({ EditRealmRoute({
_i27.Key? key, _i26.Key? key,
String? slug, String? slug,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
EditRealmRoute.name, EditRealmRoute.name,
args: EditRealmRouteArgs(key: key, slug: slug), args: EditRealmRouteArgs(key: key, slug: slug),
@ -337,7 +336,7 @@ class EditRealmRoute extends _i26.PageRouteInfo<EditRealmRouteArgs> {
static const String name = 'EditRealmRoute'; static const String name = 'EditRealmRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -352,7 +351,7 @@ class EditRealmRoute extends _i26.PageRouteInfo<EditRealmRouteArgs> {
class EditRealmRouteArgs { class EditRealmRouteArgs {
const EditRealmRouteArgs({this.key, this.slug}); const EditRealmRouteArgs({this.key, this.slug});
final _i27.Key? key; final _i26.Key? key;
final String? slug; final String? slug;
@ -365,12 +364,12 @@ class EditRealmRouteArgs {
/// generated route for /// generated route for
/// [_i11.EditStickerPacksScreen] /// [_i11.EditStickerPacksScreen]
class EditStickerPacksRoute class EditStickerPacksRoute
extends _i26.PageRouteInfo<EditStickerPacksRouteArgs> { extends _i25.PageRouteInfo<EditStickerPacksRouteArgs> {
EditStickerPacksRoute({ EditStickerPacksRoute({
_i27.Key? key, _i26.Key? key,
required String pubName, required String pubName,
String? packId, String? packId,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
EditStickerPacksRoute.name, EditStickerPacksRoute.name,
args: EditStickerPacksRouteArgs( args: EditStickerPacksRouteArgs(
@ -384,7 +383,7 @@ class EditStickerPacksRoute
static const String name = 'EditStickerPacksRoute'; static const String name = 'EditStickerPacksRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -411,7 +410,7 @@ class EditStickerPacksRouteArgs {
this.packId, this.packId,
}); });
final _i27.Key? key; final _i26.Key? key;
final String pubName; final String pubName;
@ -425,12 +424,12 @@ class EditStickerPacksRouteArgs {
/// generated route for /// generated route for
/// [_i12.EditStickersScreen] /// [_i12.EditStickersScreen]
class EditStickersRoute extends _i26.PageRouteInfo<EditStickersRouteArgs> { class EditStickersRoute extends _i25.PageRouteInfo<EditStickersRouteArgs> {
EditStickersRoute({ EditStickersRoute({
_i27.Key? key, _i26.Key? key,
required String packId, required String packId,
required String? id, required String? id,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
EditStickersRoute.name, EditStickersRoute.name,
args: EditStickersRouteArgs(key: key, packId: packId, id: id), args: EditStickersRouteArgs(key: key, packId: packId, id: id),
@ -440,7 +439,7 @@ class EditStickersRoute extends _i26.PageRouteInfo<EditStickersRouteArgs> {
static const String name = 'EditStickersRoute'; static const String name = 'EditStickersRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -467,7 +466,7 @@ class EditStickersRouteArgs {
required this.id, required this.id,
}); });
final _i27.Key? key; final _i26.Key? key;
final String packId; final String packId;
@ -481,13 +480,13 @@ class EditStickersRouteArgs {
/// generated route for /// generated route for
/// [_i13.ExploreScreen] /// [_i13.ExploreScreen]
class ExploreRoute extends _i26.PageRouteInfo<void> { class ExploreRoute extends _i25.PageRouteInfo<void> {
const ExploreRoute({List<_i26.PageRouteInfo>? children}) const ExploreRoute({List<_i25.PageRouteInfo>? children})
: super(ExploreRoute.name, initialChildren: children); : super(ExploreRoute.name, initialChildren: children);
static const String name = 'ExploreRoute'; static const String name = 'ExploreRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i13.ExploreScreen(); return const _i13.ExploreScreen();
@ -497,13 +496,13 @@ class ExploreRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i14.LoginScreen] /// [_i14.LoginScreen]
class LoginRoute extends _i26.PageRouteInfo<void> { class LoginRoute extends _i25.PageRouteInfo<void> {
const LoginRoute({List<_i26.PageRouteInfo>? children}) const LoginRoute({List<_i25.PageRouteInfo>? children})
: super(LoginRoute.name, initialChildren: children); : super(LoginRoute.name, initialChildren: children);
static const String name = 'LoginRoute'; static const String name = 'LoginRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i14.LoginScreen(); return const _i14.LoginScreen();
@ -513,13 +512,13 @@ class LoginRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i9.ManagedPublisherScreen] /// [_i9.ManagedPublisherScreen]
class ManagedPublisherRoute extends _i26.PageRouteInfo<void> { class ManagedPublisherRoute extends _i25.PageRouteInfo<void> {
const ManagedPublisherRoute({List<_i26.PageRouteInfo>? children}) const ManagedPublisherRoute({List<_i25.PageRouteInfo>? children})
: super(ManagedPublisherRoute.name, initialChildren: children); : super(ManagedPublisherRoute.name, initialChildren: children);
static const String name = 'ManagedPublisherRoute'; static const String name = 'ManagedPublisherRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i9.ManagedPublisherScreen(); return const _i9.ManagedPublisherScreen();
@ -529,13 +528,13 @@ class ManagedPublisherRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i15.MyselfEventCalendarScreen] /// [_i15.MyselfEventCalendarScreen]
class MyselfEventCalendarRoute extends _i26.PageRouteInfo<void> { class MyselfEventCalendarRoute extends _i25.PageRouteInfo<void> {
const MyselfEventCalendarRoute({List<_i26.PageRouteInfo>? children}) const MyselfEventCalendarRoute({List<_i25.PageRouteInfo>? children})
: super(MyselfEventCalendarRoute.name, initialChildren: children); : super(MyselfEventCalendarRoute.name, initialChildren: children);
static const String name = 'MyselfEventCalendarRoute'; static const String name = 'MyselfEventCalendarRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i15.MyselfEventCalendarScreen(); return const _i15.MyselfEventCalendarScreen();
@ -543,31 +542,15 @@ class MyselfEventCalendarRoute extends _i26.PageRouteInfo<void> {
); );
} }
/// generated route for
/// [_i16.MyselfProfileScreen]
class MyselfProfileRoute extends _i26.PageRouteInfo<void> {
const MyselfProfileRoute({List<_i26.PageRouteInfo>? children})
: super(MyselfProfileRoute.name, initialChildren: children);
static const String name = 'MyselfProfileRoute';
static _i26.PageInfo page = _i26.PageInfo(
name,
builder: (data) {
return const _i16.MyselfProfileScreen();
},
);
}
/// generated route for /// generated route for
/// [_i5.NewChatScreen] /// [_i5.NewChatScreen]
class NewChatRoute extends _i26.PageRouteInfo<void> { class NewChatRoute extends _i25.PageRouteInfo<void> {
const NewChatRoute({List<_i26.PageRouteInfo>? children}) const NewChatRoute({List<_i25.PageRouteInfo>? children})
: super(NewChatRoute.name, initialChildren: children); : super(NewChatRoute.name, initialChildren: children);
static const String name = 'NewChatRoute'; static const String name = 'NewChatRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i5.NewChatScreen(); return const _i5.NewChatScreen();
@ -577,13 +560,13 @@ class NewChatRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i9.NewPublisherScreen] /// [_i9.NewPublisherScreen]
class NewPublisherRoute extends _i26.PageRouteInfo<void> { class NewPublisherRoute extends _i25.PageRouteInfo<void> {
const NewPublisherRoute({List<_i26.PageRouteInfo>? children}) const NewPublisherRoute({List<_i25.PageRouteInfo>? children})
: super(NewPublisherRoute.name, initialChildren: children); : super(NewPublisherRoute.name, initialChildren: children);
static const String name = 'NewPublisherRoute'; static const String name = 'NewPublisherRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i9.NewPublisherScreen(); return const _i9.NewPublisherScreen();
@ -593,13 +576,13 @@ class NewPublisherRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i10.NewRealmScreen] /// [_i10.NewRealmScreen]
class NewRealmRoute extends _i26.PageRouteInfo<void> { class NewRealmRoute extends _i25.PageRouteInfo<void> {
const NewRealmRoute({List<_i26.PageRouteInfo>? children}) const NewRealmRoute({List<_i25.PageRouteInfo>? children})
: super(NewRealmRoute.name, initialChildren: children); : super(NewRealmRoute.name, initialChildren: children);
static const String name = 'NewRealmRoute'; static const String name = 'NewRealmRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i10.NewRealmScreen(); return const _i10.NewRealmScreen();
@ -610,11 +593,11 @@ class NewRealmRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i11.NewStickerPacksScreen] /// [_i11.NewStickerPacksScreen]
class NewStickerPacksRoute class NewStickerPacksRoute
extends _i26.PageRouteInfo<NewStickerPacksRouteArgs> { extends _i25.PageRouteInfo<NewStickerPacksRouteArgs> {
NewStickerPacksRoute({ NewStickerPacksRoute({
_i27.Key? key, _i26.Key? key,
required String pubName, required String pubName,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
NewStickerPacksRoute.name, NewStickerPacksRoute.name,
args: NewStickerPacksRouteArgs(key: key, pubName: pubName), args: NewStickerPacksRouteArgs(key: key, pubName: pubName),
@ -624,7 +607,7 @@ class NewStickerPacksRoute
static const String name = 'NewStickerPacksRoute'; static const String name = 'NewStickerPacksRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -641,7 +624,7 @@ class NewStickerPacksRoute
class NewStickerPacksRouteArgs { class NewStickerPacksRouteArgs {
const NewStickerPacksRouteArgs({this.key, required this.pubName}); const NewStickerPacksRouteArgs({this.key, required this.pubName});
final _i27.Key? key; final _i26.Key? key;
final String pubName; final String pubName;
@ -653,11 +636,11 @@ class NewStickerPacksRouteArgs {
/// generated route for /// generated route for
/// [_i12.NewStickersScreen] /// [_i12.NewStickersScreen]
class NewStickersRoute extends _i26.PageRouteInfo<NewStickersRouteArgs> { class NewStickersRoute extends _i25.PageRouteInfo<NewStickersRouteArgs> {
NewStickersRoute({ NewStickersRoute({
_i27.Key? key, _i26.Key? key,
required String packId, required String packId,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
NewStickersRoute.name, NewStickersRoute.name,
args: NewStickersRouteArgs(key: key, packId: packId), args: NewStickersRouteArgs(key: key, packId: packId),
@ -667,7 +650,7 @@ class NewStickersRoute extends _i26.PageRouteInfo<NewStickersRouteArgs> {
static const String name = 'NewStickersRoute'; static const String name = 'NewStickersRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -683,7 +666,7 @@ class NewStickersRoute extends _i26.PageRouteInfo<NewStickersRouteArgs> {
class NewStickersRouteArgs { class NewStickersRouteArgs {
const NewStickersRouteArgs({this.key, required this.packId}); const NewStickersRouteArgs({this.key, required this.packId});
final _i27.Key? key; final _i26.Key? key;
final String packId; final String packId;
@ -694,12 +677,12 @@ class NewStickersRouteArgs {
} }
/// generated route for /// generated route for
/// [_i17.PostComposeScreen] /// [_i16.PostComposeScreen]
class PostComposeRoute extends _i26.PageRouteInfo<PostComposeRouteArgs> { class PostComposeRoute extends _i25.PageRouteInfo<PostComposeRouteArgs> {
PostComposeRoute({ PostComposeRoute({
_i27.Key? key, _i26.Key? key,
_i28.SnPost? originalPost, _i27.SnPost? originalPost,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
PostComposeRoute.name, PostComposeRoute.name,
args: PostComposeRouteArgs(key: key, originalPost: originalPost), args: PostComposeRouteArgs(key: key, originalPost: originalPost),
@ -708,13 +691,13 @@ class PostComposeRoute extends _i26.PageRouteInfo<PostComposeRouteArgs> {
static const String name = 'PostComposeRoute'; static const String name = 'PostComposeRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final args = data.argsAs<PostComposeRouteArgs>( final args = data.argsAs<PostComposeRouteArgs>(
orElse: () => const PostComposeRouteArgs(), orElse: () => const PostComposeRouteArgs(),
); );
return _i17.PostComposeScreen( return _i16.PostComposeScreen(
key: args.key, key: args.key,
originalPost: args.originalPost, originalPost: args.originalPost,
); );
@ -725,9 +708,9 @@ class PostComposeRoute extends _i26.PageRouteInfo<PostComposeRouteArgs> {
class PostComposeRouteArgs { class PostComposeRouteArgs {
const PostComposeRouteArgs({this.key, this.originalPost}); const PostComposeRouteArgs({this.key, this.originalPost});
final _i27.Key? key; final _i26.Key? key;
final _i28.SnPost? originalPost; final _i27.SnPost? originalPost;
@override @override
String toString() { String toString() {
@ -736,12 +719,12 @@ class PostComposeRouteArgs {
} }
/// generated route for /// generated route for
/// [_i18.PostDetailScreen] /// [_i17.PostDetailScreen]
class PostDetailRoute extends _i26.PageRouteInfo<PostDetailRouteArgs> { class PostDetailRoute extends _i25.PageRouteInfo<PostDetailRouteArgs> {
PostDetailRoute({ PostDetailRoute({
_i27.Key? key, _i26.Key? key,
required String id, required String id,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
PostDetailRoute.name, PostDetailRoute.name,
args: PostDetailRouteArgs(key: key, id: id), args: PostDetailRouteArgs(key: key, id: id),
@ -751,14 +734,14 @@ class PostDetailRoute extends _i26.PageRouteInfo<PostDetailRouteArgs> {
static const String name = 'PostDetailRoute'; static const String name = 'PostDetailRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
final args = data.argsAs<PostDetailRouteArgs>( final args = data.argsAs<PostDetailRouteArgs>(
orElse: () => PostDetailRouteArgs(id: pathParams.getString('id')), orElse: () => PostDetailRouteArgs(id: pathParams.getString('id')),
); );
return _i18.PostDetailScreen(key: args.key, id: args.id); return _i17.PostDetailScreen(key: args.key, id: args.id);
}, },
); );
} }
@ -766,7 +749,7 @@ class PostDetailRoute extends _i26.PageRouteInfo<PostDetailRouteArgs> {
class PostDetailRouteArgs { class PostDetailRouteArgs {
const PostDetailRouteArgs({this.key, required this.id}); const PostDetailRouteArgs({this.key, required this.id});
final _i27.Key? key; final _i26.Key? key;
final String id; final String id;
@ -777,12 +760,12 @@ class PostDetailRouteArgs {
} }
/// generated route for /// generated route for
/// [_i17.PostEditScreen] /// [_i16.PostEditScreen]
class PostEditRoute extends _i26.PageRouteInfo<PostEditRouteArgs> { class PostEditRoute extends _i25.PageRouteInfo<PostEditRouteArgs> {
PostEditRoute({ PostEditRoute({
_i27.Key? key, _i26.Key? key,
required String id, required String id,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
PostEditRoute.name, PostEditRoute.name,
args: PostEditRouteArgs(key: key, id: id), args: PostEditRouteArgs(key: key, id: id),
@ -792,14 +775,14 @@ class PostEditRoute extends _i26.PageRouteInfo<PostEditRouteArgs> {
static const String name = 'PostEditRoute'; static const String name = 'PostEditRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
final args = data.argsAs<PostEditRouteArgs>( final args = data.argsAs<PostEditRouteArgs>(
orElse: () => PostEditRouteArgs(id: pathParams.getString('id')), orElse: () => PostEditRouteArgs(id: pathParams.getString('id')),
); );
return _i17.PostEditScreen(key: args.key, id: args.id); return _i16.PostEditScreen(key: args.key, id: args.id);
}, },
); );
} }
@ -807,7 +790,7 @@ class PostEditRoute extends _i26.PageRouteInfo<PostEditRouteArgs> {
class PostEditRouteArgs { class PostEditRouteArgs {
const PostEditRouteArgs({this.key, required this.id}); const PostEditRouteArgs({this.key, required this.id});
final _i27.Key? key; final _i26.Key? key;
final String id; final String id;
@ -818,13 +801,13 @@ class PostEditRouteArgs {
} }
/// generated route for /// generated route for
/// [_i19.PublisherProfileScreen] /// [_i18.PublisherProfileScreen]
class PublisherProfileRoute class PublisherProfileRoute
extends _i26.PageRouteInfo<PublisherProfileRouteArgs> { extends _i25.PageRouteInfo<PublisherProfileRouteArgs> {
PublisherProfileRoute({ PublisherProfileRoute({
_i27.Key? key, _i26.Key? key,
required String name, required String name,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
PublisherProfileRoute.name, PublisherProfileRoute.name,
args: PublisherProfileRouteArgs(key: key, name: name), args: PublisherProfileRouteArgs(key: key, name: name),
@ -834,7 +817,7 @@ class PublisherProfileRoute
static const String name = 'PublisherProfileRoute'; static const String name = 'PublisherProfileRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -842,7 +825,7 @@ class PublisherProfileRoute
orElse: orElse:
() => PublisherProfileRouteArgs(name: pathParams.getString('name')), () => PublisherProfileRouteArgs(name: pathParams.getString('name')),
); );
return _i19.PublisherProfileScreen(key: args.key, name: args.name); return _i18.PublisherProfileScreen(key: args.key, name: args.name);
}, },
); );
} }
@ -850,7 +833,7 @@ class PublisherProfileRoute
class PublisherProfileRouteArgs { class PublisherProfileRouteArgs {
const PublisherProfileRouteArgs({this.key, required this.name}); const PublisherProfileRouteArgs({this.key, required this.name});
final _i27.Key? key; final _i26.Key? key;
final String name; final String name;
@ -861,12 +844,12 @@ class PublisherProfileRouteArgs {
} }
/// generated route for /// generated route for
/// [_i20.RealmDetailScreen] /// [_i19.RealmDetailScreen]
class RealmDetailRoute extends _i26.PageRouteInfo<RealmDetailRouteArgs> { class RealmDetailRoute extends _i25.PageRouteInfo<RealmDetailRouteArgs> {
RealmDetailRoute({ RealmDetailRoute({
_i27.Key? key, _i26.Key? key,
required String slug, required String slug,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
RealmDetailRoute.name, RealmDetailRoute.name,
args: RealmDetailRouteArgs(key: key, slug: slug), args: RealmDetailRouteArgs(key: key, slug: slug),
@ -876,14 +859,14 @@ class RealmDetailRoute extends _i26.PageRouteInfo<RealmDetailRouteArgs> {
static const String name = 'RealmDetailRoute'; static const String name = 'RealmDetailRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
final args = data.argsAs<RealmDetailRouteArgs>( final args = data.argsAs<RealmDetailRouteArgs>(
orElse: () => RealmDetailRouteArgs(slug: pathParams.getString('slug')), orElse: () => RealmDetailRouteArgs(slug: pathParams.getString('slug')),
); );
return _i20.RealmDetailScreen(key: args.key, slug: args.slug); return _i19.RealmDetailScreen(key: args.key, slug: args.slug);
}, },
); );
} }
@ -891,7 +874,7 @@ class RealmDetailRoute extends _i26.PageRouteInfo<RealmDetailRouteArgs> {
class RealmDetailRouteArgs { class RealmDetailRouteArgs {
const RealmDetailRouteArgs({this.key, required this.slug}); const RealmDetailRouteArgs({this.key, required this.slug});
final _i27.Key? key; final _i26.Key? key;
final String slug; final String slug;
@ -903,13 +886,13 @@ class RealmDetailRouteArgs {
/// generated route for /// generated route for
/// [_i10.RealmListScreen] /// [_i10.RealmListScreen]
class RealmListRoute extends _i26.PageRouteInfo<void> { class RealmListRoute extends _i25.PageRouteInfo<void> {
const RealmListRoute({List<_i26.PageRouteInfo>? children}) const RealmListRoute({List<_i25.PageRouteInfo>? children})
: super(RealmListRoute.name, initialChildren: children); : super(RealmListRoute.name, initialChildren: children);
static const String name = 'RealmListRoute'; static const String name = 'RealmListRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i10.RealmListScreen(); return const _i10.RealmListScreen();
@ -918,33 +901,33 @@ class RealmListRoute extends _i26.PageRouteInfo<void> {
} }
/// generated route for /// generated route for
/// [_i21.RelationshipScreen] /// [_i20.RelationshipScreen]
class RelationshipRoute extends _i26.PageRouteInfo<void> { class RelationshipRoute extends _i25.PageRouteInfo<void> {
const RelationshipRoute({List<_i26.PageRouteInfo>? children}) const RelationshipRoute({List<_i25.PageRouteInfo>? children})
: super(RelationshipRoute.name, initialChildren: children); : super(RelationshipRoute.name, initialChildren: children);
static const String name = 'RelationshipRoute'; static const String name = 'RelationshipRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i21.RelationshipScreen(); return const _i20.RelationshipScreen();
}, },
); );
} }
/// generated route for /// generated route for
/// [_i22.SettingsScreen] /// [_i21.SettingsScreen]
class SettingsRoute extends _i26.PageRouteInfo<void> { class SettingsRoute extends _i25.PageRouteInfo<void> {
const SettingsRoute({List<_i26.PageRouteInfo>? children}) const SettingsRoute({List<_i25.PageRouteInfo>? children})
: super(SettingsRoute.name, initialChildren: children); : super(SettingsRoute.name, initialChildren: children);
static const String name = 'SettingsRoute'; static const String name = 'SettingsRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i22.SettingsScreen(); return const _i21.SettingsScreen();
}, },
); );
} }
@ -952,12 +935,12 @@ class SettingsRoute extends _i26.PageRouteInfo<void> {
/// generated route for /// generated route for
/// [_i12.StickerPackDetailScreen] /// [_i12.StickerPackDetailScreen]
class StickerPackDetailRoute class StickerPackDetailRoute
extends _i26.PageRouteInfo<StickerPackDetailRouteArgs> { extends _i25.PageRouteInfo<StickerPackDetailRouteArgs> {
StickerPackDetailRoute({ StickerPackDetailRoute({
_i27.Key? key, _i26.Key? key,
required String pubName, required String pubName,
required String id, required String id,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
StickerPackDetailRoute.name, StickerPackDetailRoute.name,
args: StickerPackDetailRouteArgs(key: key, pubName: pubName, id: id), args: StickerPackDetailRouteArgs(key: key, pubName: pubName, id: id),
@ -967,7 +950,7 @@ class StickerPackDetailRoute
static const String name = 'StickerPackDetailRoute'; static const String name = 'StickerPackDetailRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -994,7 +977,7 @@ class StickerPackDetailRouteArgs {
required this.id, required this.id,
}); });
final _i27.Key? key; final _i26.Key? key;
final String pubName; final String pubName;
@ -1008,11 +991,11 @@ class StickerPackDetailRouteArgs {
/// generated route for /// generated route for
/// [_i11.StickersScreen] /// [_i11.StickersScreen]
class StickersRoute extends _i26.PageRouteInfo<StickersRouteArgs> { class StickersRoute extends _i25.PageRouteInfo<StickersRouteArgs> {
StickersRoute({ StickersRoute({
_i27.Key? key, _i26.Key? key,
required String pubName, required String pubName,
List<_i26.PageRouteInfo>? children, List<_i25.PageRouteInfo>? children,
}) : super( }) : super(
StickersRoute.name, StickersRoute.name,
args: StickersRouteArgs(key: key, pubName: pubName), args: StickersRouteArgs(key: key, pubName: pubName),
@ -1022,7 +1005,7 @@ class StickersRoute extends _i26.PageRouteInfo<StickersRouteArgs> {
static const String name = 'StickersRoute'; static const String name = 'StickersRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
final pathParams = data.inheritedPathParams; final pathParams = data.inheritedPathParams;
@ -1037,7 +1020,7 @@ class StickersRoute extends _i26.PageRouteInfo<StickersRouteArgs> {
class StickersRouteArgs { class StickersRouteArgs {
const StickersRouteArgs({this.key, required this.pubName}); const StickersRouteArgs({this.key, required this.pubName});
final _i27.Key? key; final _i26.Key? key;
final String pubName; final String pubName;
@ -1048,49 +1031,49 @@ class StickersRouteArgs {
} }
/// generated route for /// generated route for
/// [_i23.TabsScreen] /// [_i22.TabsScreen]
class TabsRoute extends _i26.PageRouteInfo<void> { class TabsRoute extends _i25.PageRouteInfo<void> {
const TabsRoute({List<_i26.PageRouteInfo>? children}) const TabsRoute({List<_i25.PageRouteInfo>? children})
: super(TabsRoute.name, initialChildren: children); : super(TabsRoute.name, initialChildren: children);
static const String name = 'TabsRoute'; static const String name = 'TabsRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i23.TabsScreen(); return const _i22.TabsScreen();
}, },
); );
} }
/// generated route for /// generated route for
/// [_i24.UpdateProfileScreen] /// [_i23.UpdateProfileScreen]
class UpdateProfileRoute extends _i26.PageRouteInfo<void> { class UpdateProfileRoute extends _i25.PageRouteInfo<void> {
const UpdateProfileRoute({List<_i26.PageRouteInfo>? children}) const UpdateProfileRoute({List<_i25.PageRouteInfo>? children})
: super(UpdateProfileRoute.name, initialChildren: children); : super(UpdateProfileRoute.name, initialChildren: children);
static const String name = 'UpdateProfileRoute'; static const String name = 'UpdateProfileRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i24.UpdateProfileScreen(); return const _i23.UpdateProfileScreen();
}, },
); );
} }
/// generated route for /// generated route for
/// [_i25.WalletScreen] /// [_i24.WalletScreen]
class WalletRoute extends _i26.PageRouteInfo<void> { class WalletRoute extends _i25.PageRouteInfo<void> {
const WalletRoute({List<_i26.PageRouteInfo>? children}) const WalletRoute({List<_i25.PageRouteInfo>? children})
: super(WalletRoute.name, initialChildren: children); : super(WalletRoute.name, initialChildren: children);
static const String name = 'WalletRoute'; static const String name = 'WalletRoute';
static _i26.PageInfo page = _i26.PageInfo( static _i25.PageInfo page = _i25.PageInfo(
name, name,
builder: (data) { builder: (data) {
return const _i25.WalletScreen(); return const _i24.WalletScreen();
}, },
); );
} }

View File

@ -1,13 +0,0 @@
import 'package:auto_route/annotations.dart';
import 'package:flutter/material.dart';
import 'package:island/widgets/app_scaffold.dart';
@RoutePage()
class MyselfProfileScreen extends StatelessWidget {
const MyselfProfileScreen({super.key});
@override
Widget build(BuildContext context) {
return AppScaffold(appBar: AppBar(leading: const PageBackButton()));
}
}

View File

@ -46,7 +46,7 @@ class AccountProfileScreen extends HookConsumerWidget {
final iconShadow = Shadow( final iconShadow = Shadow(
color: Colors.black54, color: Colors.black54,
blurRadius: 5.0, blurRadius: 5.0,
offset: Offset(1.0, 1.0), offset: const Offset(1.0, 1.0),
); );
return account.when( return account.when(
@ -78,36 +78,39 @@ class AccountProfileScreen extends HookConsumerWidget {
), ),
), ),
SliverToBoxAdapter( SliverToBoxAdapter(
child: Row( child: Padding(
crossAxisAlignment: CrossAxisAlignment.start, padding: const EdgeInsets.fromLTRB(24, 24, 24, 8),
spacing: 20, child: Row(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
ProfilePictureWidget( children: [
fileId: data.profile.pictureId!, ProfilePictureWidget(
radius: 32, fileId: data.profile.pictureId,
), radius: 32,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
spacing: 6,
children: [
Text(data.nick).fontSize(20),
Text(
'@${data.name}',
).fontSize(14).opacity(0.85),
],
),
AccountStatusWidget(
uname: name,
padding: EdgeInsets.zero,
),
],
), ),
), const Gap(20),
], Expanded(
).padding(horizontal: 24, top: 24, bottom: 8), child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
children: [
Text(data.nick).fontSize(20),
const Gap(6),
Text(
'@${data.name}',
).fontSize(14).opacity(0.85),
],
),
AccountStatusWidget(
uname: name,
padding: EdgeInsets.zero,
),
],
),
),
],
),
),
), ),
if (data.badges.isNotEmpty) if (data.badges.isNotEmpty)
SliverToBoxAdapter( SliverToBoxAdapter(
@ -127,7 +130,7 @@ class AccountProfileScreen extends HookConsumerWidget {
SliverToBoxAdapter( SliverToBoxAdapter(
child: const Divider(height: 1).padding(bottom: 24), child: const Divider(height: 1).padding(bottom: 24),
), ),
if (data.profile.bio != null && data.profile.bio!.isNotEmpty) if (data.profile.bio?.isNotEmpty ?? false)
SliverToBoxAdapter( SliverToBoxAdapter(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,

View File

@ -18,7 +18,7 @@ import 'package:island/pods/websocket.dart';
import 'package:island/route.gr.dart'; import 'package:island/route.gr.dart';
import 'package:island/screens/posts/compose.dart'; import 'package:island/screens/posts/compose.dart';
import 'package:island/widgets/alert.dart'; import 'package:island/widgets/alert.dart';
import 'package:island/widgets/chat/message_bubble.dart'; import 'package:island/widgets/chat/message_item.dart';
import 'package:island/widgets/content/cloud_files.dart'; import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/response.dart'; import 'package:island/widgets/response.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
@ -506,17 +506,17 @@ class ChatRoomScreen extends HookConsumerWidget {
return chatIdentity.when( return chatIdentity.when(
skipError: true, skipError: true,
data: data:
(identity) => MessageBubble( (identity) => MessageItem(
message: message, message: message,
isCurrentUser: isCurrentUser:
identity?.id == message.senderId, identity?.id == message.senderId,
onAction: (action) { onAction: (action) {
switch (action) { switch (action) {
case MessageBubbleAction.delete: case MessageItemAction.delete:
messagesNotifier.deleteMessage( messagesNotifier.deleteMessage(
message.id, message.id,
); );
case MessageBubbleAction.edit: case MessageItemAction.edit:
messageEditingTo.value = messageEditingTo.value =
message.toRemoteMessage(); message.toRemoteMessage();
messageController.text = messageController.text =
@ -535,10 +535,10 @@ class ChatRoomScreen extends HookConsumerWidget {
), ),
) )
.toList(); .toList();
case MessageBubbleAction.forward: case MessageItemAction.forward:
messageForwardingTo.value = messageForwardingTo.value =
message.toRemoteMessage(); message.toRemoteMessage();
case MessageBubbleAction.reply: case MessageItemAction.reply:
messageReplyingTo.value = messageReplyingTo.value =
message.toRemoteMessage(); message.toRemoteMessage();
} }
@ -548,7 +548,7 @@ class ChatRoomScreen extends HookConsumerWidget {
showAvatar: isLastInGroup, showAvatar: isLastInGroup,
), ),
loading: loading:
() => MessageBubble( () => MessageItem(
message: message, message: message,
isCurrentUser: false, isCurrentUser: false,
onAction: null, onAction: null,

View File

@ -115,7 +115,7 @@ class AccountStatusWidget extends HookConsumerWidget {
child: Row( child: Row(
spacing: 4, spacing: 4,
children: [ children: [
if (userStatus.value!.isOnline) if (userStatus.value?.isOnline ?? false)
Icon( Icon(
Symbols.circle, Symbols.circle,
fill: 1, fill: 1,

View File

@ -6,8 +6,16 @@ import 'package:styled_widget/styled_widget.dart';
export 'content/alert.native.dart' export 'content/alert.native.dart'
if (dart.library.html) 'content/alert.web.dart'; if (dart.library.html) 'content/alert.web.dart';
void showSnackBar(BuildContext context, String message) { void showSnackBar(
showSnackBar(context, message); BuildContext context,
String message, {
SnackBarAction? action,
}) {
showSnackBar(context, message, action: action);
}
void clearSnackBar(BuildContext context) {
ScaffoldMessenger.of(context).clearSnackBars();
} }
OverlayEntry? _loadingOverlay; OverlayEntry? _loadingOverlay;

View File

@ -4,29 +4,29 @@ import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/database/message.dart'; import 'package:island/database/message.dart';
import 'package:island/models/chat.dart'; import 'package:island/models/chat.dart';
import 'package:island/screens/chat/room.dart';
import 'package:island/widgets/content/cloud_file_collection.dart'; import 'package:island/widgets/content/cloud_file_collection.dart';
import 'package:island/widgets/content/cloud_files.dart'; import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/content/markdown.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:styled_widget/styled_widget.dart'; import 'package:styled_widget/styled_widget.dart';
import 'package:super_context_menu/super_context_menu.dart'; import 'package:super_context_menu/super_context_menu.dart';
import '../../screens/chat/room.dart'; class MessageItemAction {
class MessageBubbleAction {
static const String edit = "edit"; static const String edit = "edit";
static const String delete = "delete"; static const String delete = "delete";
static const String reply = "reply"; static const String reply = "reply";
static const String forward = "forward"; static const String forward = "forward";
} }
class MessageBubble extends HookConsumerWidget { class MessageItem extends HookConsumerWidget {
final LocalChatMessage message; final LocalChatMessage message;
final bool isCurrentUser; final bool isCurrentUser;
final Function(String action)? onAction; final Function(String action)? onAction;
final Map<int, double>? progress; final Map<int, double>? progress;
final bool showAvatar; final bool showAvatar;
const MessageBubble({ const MessageItem({
super.key, super.key,
required this.message, required this.message,
required this.isCurrentUser, required this.isCurrentUser,
@ -45,6 +45,10 @@ class MessageBubble extends HookConsumerWidget {
isCurrentUser isCurrentUser
? Theme.of(context).colorScheme.primaryContainer.withOpacity(0.5) ? Theme.of(context).colorScheme.primaryContainer.withOpacity(0.5)
: Theme.of(context).colorScheme.surfaceContainer; : Theme.of(context).colorScheme.surfaceContainer;
final linkColor = Color.alphaBlend(
Theme.of(context).colorScheme.primary,
containerColor,
);
final remoteMessage = message.toRemoteMessage(); final remoteMessage = message.toRemoteMessage();
final sender = remoteMessage.sender; final sender = remoteMessage.sender;
@ -59,7 +63,7 @@ class MessageBubble extends HookConsumerWidget {
title: 'edit'.tr(), title: 'edit'.tr(),
image: MenuImage.icon(Symbols.edit), image: MenuImage.icon(Symbols.edit),
callback: () { callback: () {
onAction!.call(MessageBubbleAction.edit); onAction!.call(MessageItemAction.edit);
}, },
), ),
if (isCurrentUser) if (isCurrentUser)
@ -67,7 +71,7 @@ class MessageBubble extends HookConsumerWidget {
title: 'delete'.tr(), title: 'delete'.tr(),
image: MenuImage.icon(Symbols.delete), image: MenuImage.icon(Symbols.delete),
callback: () { callback: () {
onAction!.call(MessageBubbleAction.delete); onAction!.call(MessageItemAction.delete);
}, },
), ),
if (isCurrentUser) MenuSeparator(), if (isCurrentUser) MenuSeparator(),
@ -75,14 +79,14 @@ class MessageBubble extends HookConsumerWidget {
title: 'reply'.tr(), title: 'reply'.tr(),
image: MenuImage.icon(Symbols.reply), image: MenuImage.icon(Symbols.reply),
callback: () { callback: () {
onAction!.call(MessageBubbleAction.reply); onAction!.call(MessageItemAction.reply);
}, },
), ),
MenuAction( MenuAction(
title: 'forward'.tr(), title: 'forward'.tr(),
image: MenuImage.icon(Symbols.forward), image: MenuImage.icon(Symbols.forward),
callback: () { callback: () {
onAction!.call(MessageBubbleAction.forward); onAction!.call(MessageItemAction.forward);
}, },
), ),
], ],
@ -93,27 +97,20 @@ class MessageBubble extends HookConsumerWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4), padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
child: Column( child: Column(
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.start,
isCurrentUser
? CrossAxisAlignment.end
: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
if (showAvatar && !isCurrentUser) ...[ if (showAvatar) ...[
Row( Row(
spacing: 8, spacing: 8,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
if (!isCurrentUser) ProfilePictureWidget(
ProfilePictureWidget( fileId: sender.account.profile.pictureId,
fileId: sender.account.profile.pictureId, radius: 16,
radius: 18, ),
),
Column( Column(
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.start,
isCurrentUser
? CrossAxisAlignment.end
: CrossAxisAlignment.start,
spacing: 2, spacing: 2,
children: [ children: [
Text( Text(
@ -124,41 +121,24 @@ class MessageBubble extends HookConsumerWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
spacing: 5, spacing: 5,
children: [ children: [
if (isCurrentUser)
Badge(
label:
Text(
sender.role >= 100
? 'permissionOwner'
: sender.role >= 50
? 'permissionModerator'
: 'permissionMember',
).tr(),
),
Text( Text(
sender.account.nick, sender.account.nick,
style: Theme.of(context).textTheme.bodySmall, style: Theme.of(context).textTheme.bodySmall,
), ),
if (!isCurrentUser) Badge(
Badge( label:
label: Text(
Text( sender.role >= 100
sender.role >= 100 ? 'permissionOwner'
? 'permissionOwner' : sender.role >= 50
: sender.role >= 50 ? 'permissionModerator'
? 'permissionModerator' : 'permissionMember',
: 'permissionMember', ).tr(),
).tr(), ),
),
], ],
), ),
], ],
), ),
if (isCurrentUser)
ProfilePictureWidget(
fileId: sender.account.profile.pictureId,
radius: 18,
),
], ],
), ),
const Gap(4), const Gap(4),
@ -169,14 +149,6 @@ class MessageBubble extends HookConsumerWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
if (isCurrentUser)
_buildMessageIndicators(
context,
textColor,
remoteMessage,
message,
isCurrentUser,
),
Flexible( Flexible(
child: Container( child: Container(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
@ -203,9 +175,14 @@ class MessageBubble extends HookConsumerWidget {
isReply: false, isReply: false,
), ),
if (remoteMessage.content?.isNotEmpty ?? false) if (remoteMessage.content?.isNotEmpty ?? false)
Text( MarkdownTextContent(
remoteMessage.content!, content: remoteMessage.content!,
style: TextStyle(color: textColor), isSelectable: true,
linkStyle: TextStyle(color: linkColor),
textStyle: TextStyle(
color: textColor,
fontSize: 14,
),
), ),
if (remoteMessage.attachments.isNotEmpty) if (remoteMessage.attachments.isNotEmpty)
CloudFileList( CloudFileList(
@ -260,14 +237,13 @@ class MessageBubble extends HookConsumerWidget {
), ),
), ),
), ),
if (!isCurrentUser) _buildMessageIndicators(
_buildMessageIndicators( context,
context, textColor,
textColor, remoteMessage,
remoteMessage, message,
message, isCurrentUser,
isCurrentUser, ),
),
], ],
), ),
], ],
@ -288,10 +264,6 @@ class MessageBubble extends HookConsumerWidget {
spacing: 4, spacing: 4,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text(
DateFormat.Hm().format(message.createdAt.toLocal()),
style: TextStyle(fontSize: 11, color: textColor.withOpacity(0.7)),
),
if (remoteMessage.editedAt != null) if (remoteMessage.editedAt != null)
Text( Text(
'edited'.tr().toLowerCase(), 'edited'.tr().toLowerCase(),

View File

@ -183,47 +183,75 @@ class SplitAvatarWidget extends ConsumerWidget {
), ),
], ],
) )
else ...[ else
Positioned( Column(
top: 0, children: [
left: 0, Expanded(
child: _buildQuadrant(context, filesId[0], ref, radius), child: Row(
), children: [
Positioned( Expanded(
top: 0, child: _buildQuadrant(
right: 0, context,
child: _buildQuadrant(context, filesId[1], ref, radius), filesId[0],
), ref,
Positioned( radius,
bottom: 0,
left: 0,
child: _buildQuadrant(context, filesId[2], ref, radius),
),
Positioned(
bottom: 0,
right: 0,
child:
filesId.length > 4
? Container(
width: radius,
height: radius,
color: Theme.of(context).colorScheme.primaryContainer,
child: Center(
child: Text(
'+${filesId.length - 3}',
style: TextStyle(
fontSize: radius * 0.4,
color:
Theme.of(
context,
).colorScheme.onPrimaryContainer,
),
),
), ),
) ),
: _buildQuadrant(context, filesId[3], ref, radius), Expanded(
child: _buildQuadrant(
context,
filesId[1],
ref,
radius,
),
),
],
),
),
Expanded(
child: Row(
children: [
Expanded(
child: _buildQuadrant(
context,
filesId[2],
ref,
radius,
),
),
Expanded(
child:
filesId.length > 4
? Container(
color:
Theme.of(
context,
).colorScheme.primaryContainer,
child: Center(
child: Text(
'+${filesId.length - 3}',
style: TextStyle(
fontSize: radius * 0.4,
color:
Theme.of(
context,
).colorScheme.onPrimaryContainer,
),
),
),
)
: _buildQuadrant(
context,
filesId[3],
ref,
radius,
),
),
],
),
),
],
), ),
],
], ],
), ),
), ),

View File

@ -1,14 +1,14 @@
import 'package:auto_route/auto_route.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_highlight/flutter_highlight.dart'; import 'package:flutter/services.dart';
import 'package:flutter_highlight/theme_map.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:flutter_markdown_latex/flutter_markdown_latex.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/pods/config.dart'; import 'package:island/pods/config.dart';
import 'package:island/widgets/alert.dart';
import 'package:markdown/markdown.dart' as markdown; import 'package:markdown/markdown.dart' as markdown;
import 'package:url_launcher/url_launcher_string.dart'; import 'package:markdown_widget/markdown_widget.dart';
import 'package:url_launcher/url_launcher.dart';
import 'image.dart'; import 'image.dart';
@ -16,14 +16,18 @@ class MarkdownTextContent extends HookConsumerWidget {
final String content; final String content;
final bool isAutoWarp; final bool isAutoWarp;
final TextScaler? textScaler; final TextScaler? textScaler;
final Color? textColor; final TextStyle? textStyle;
final TextStyle? linkStyle;
final bool isSelectable;
const MarkdownTextContent({ const MarkdownTextContent({
super.key, super.key,
required this.content, required this.content,
this.isAutoWarp = false, this.isAutoWarp = false,
this.textScaler, this.textScaler,
this.textColor, this.textStyle,
this.linkStyle,
this.isSelectable = false,
}); });
@override @override
@ -40,91 +44,111 @@ class MarkdownTextContent extends HookConsumerWidget {
return matches.length == 1 && contentWithoutStickers.isEmpty; return matches.length == 1 && contentWithoutStickers.isEmpty;
}, [content]); }, [content]);
return Markdown( final isDark = Theme.of(context).brightness == Brightness.dark;
shrinkWrap: true, final config =
physics: const NeverScrollableScrollPhysics(), isDark ? MarkdownConfig.darkConfig : MarkdownConfig.defaultConfig;
return MarkdownBlock(
data: content, data: content,
padding: EdgeInsets.zero, selectable: isSelectable,
styleSheet: MarkdownStyleSheet.fromTheme(Theme.of(context)).copyWith( config: config.copy(
textScaler: textScaler, configs: [
p: isDark
textColor != null ? PreConfig.darkConfig.copy(
? Theme.of( textStyle: textStyle,
context, padding: EdgeInsets.zero,
).textTheme.bodyMedium!.copyWith(color: textColor) margin: EdgeInsets.zero,
: null, )
blockquote: TextStyle( : PreConfig().copy(
color: Theme.of(context).colorScheme.onSurfaceVariant, textStyle: textStyle,
), padding: EdgeInsets.zero,
blockquoteDecoration: BoxDecoration( margin: EdgeInsets.zero,
color: Theme.of(context).colorScheme.surfaceContainerHigh, ),
borderRadius: const BorderRadius.all(Radius.circular(4)), PConfig(
), textStyle: textStyle ?? Theme.of(context).textTheme.bodyMedium!,
horizontalRuleDecoration: BoxDecoration(
border: Border(
top: BorderSide(width: 1.0, color: Theme.of(context).dividerColor),
), ),
), LinkConfig(
codeblockDecoration: BoxDecoration( style:
border: Border.all(color: Theme.of(context).dividerColor, width: 0.3), linkStyle ??
borderRadius: const BorderRadius.all(Radius.circular(4)), TextStyle(color: Theme.of(context).colorScheme.primary),
color: Theme.of(context).colorScheme.surface.withOpacity(0.5), onTap: (herf) {
), final url = Uri.tryParse(herf);
code: GoogleFonts.robotoMono(height: 1), if (url != null) {
), if (url.scheme == 'solian') {
builders: {'latex': LatexElementBuilder(), 'code': HighlightBuilder()}, context.router.pushPath(
softLineBreak: true, ['', url.host, ...url.pathSegments].join('/'),
extensionSet: markdown.ExtensionSet( );
<markdown.BlockSyntax>[ return;
...markdown.ExtensionSet.gitHubFlavored.blockSyntaxes, }
markdown.CodeBlockSyntax(), final whitelistDomains = ['solian.app', 'solsynth.dev'];
markdown.FencedCodeBlockSyntax(), if (whitelistDomains.contains(url.host)) {
LatexBlockSyntax(), launchUrl(url, mode: LaunchMode.externalApplication);
], return;
<markdown.InlineSyntax>[ }
...markdown.ExtensionSet.gitHubFlavored.inlineSyntaxes, showConfirmAlert(
if (isAutoWarp) markdown.LineBreakSyntax(), 'openLinkConfirmDescription'.tr(args: [url.toString()]),
_UserNameCardInlineSyntax(), 'openLinkConfirm'.tr(),
_StickerInlineSyntax(ref.read(serverUrlProvider)), ).then((value) {
markdown.AutolinkSyntax(), if (value) {
markdown.AutolinkExtensionSyntax(), launchUrl(url, mode: LaunchMode.externalApplication);
markdown.CodeSyntax(), }
LatexInlineSyntax(), });
], } else {
), showSnackBar(
onTapLink: (text, href, title) async { context,
if (href == null) return; 'brokenLink'.tr(args: [herf]),
await launchUrlString(href, mode: LaunchMode.externalApplication); action: SnackBarAction(
}, label: 'copyToClipboard'.tr(),
imageBuilder: (uri, title, alt) { onPressed: () {
if (uri.scheme == 'solink') { Clipboard.setData(ClipboardData(text: herf));
switch (uri.host) { clearSnackBar(context);
case 'stickers': },
final size = doesEnlargeSticker ? 96.0 : 24.0;
return ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surfaceContainer,
borderRadius: const BorderRadius.all(Radius.circular(8)),
), ),
child: UniversalImage( );
uri: '$baseUrl/stickers/lookup/${uri.pathSegments[0]}/open', }
width: size, },
height: size, ),
fit: BoxFit.cover, ImgConfig(
noCacheOptimization: true, builder: (url, attributes) {
), final uri = Uri.parse(url);
), if (uri.scheme == 'solian') {
switch (uri.host) {
case 'stickers':
final size = doesEnlargeSticker ? 96.0 : 24.0;
return ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surfaceContainer,
borderRadius: const BorderRadius.all(
Radius.circular(8),
),
),
child: UniversalImage(
uri:
'$baseUrl/stickers/lookup/${uri.pathSegments[0]}/open',
width: size,
height: size,
fit: BoxFit.cover,
noCacheOptimization: true,
),
),
);
}
}
final content = UniversalImage(
uri: uri.toString(),
fit: BoxFit.cover,
); );
} return content;
} },
final content = UniversalImage(uri: uri.toString(), fit: BoxFit.cover); ),
if (alt != null) { ],
return Tooltip(message: alt, child: content); ),
} generator: MarkdownGenerator(
return content; inlineSyntaxList: [_UserNameCardInlineSyntax(), _StickerInlineSyntax()],
}, linesMargin: EdgeInsets.zero,
),
); );
} }
} }
@ -137,7 +161,7 @@ class _UserNameCardInlineSyntax extends markdown.InlineSyntax {
final alias = match[0]!; final alias = match[0]!;
final anchor = markdown.Element.text('a', alias) final anchor = markdown.Element.text('a', alias)
..attributes['href'] = Uri.encodeFull( ..attributes['href'] = Uri.encodeFull(
'solink://accounts/${alias.substring(1)}', 'solian://account/${alias.substring(1)}',
); );
parser.addNode(anchor); parser.addNode(anchor);
@ -146,72 +170,15 @@ class _UserNameCardInlineSyntax extends markdown.InlineSyntax {
} }
class _StickerInlineSyntax extends markdown.InlineSyntax { class _StickerInlineSyntax extends markdown.InlineSyntax {
final String baseUrl; _StickerInlineSyntax() : super(r':([-\w]+):');
_StickerInlineSyntax(this.baseUrl) : super(r':([-\w]+):');
@override @override
bool onMatch(markdown.InlineParser parser, Match match) { bool onMatch(markdown.InlineParser parser, Match match) {
final placeholder = match[1]!; final placeholder = match[1]!;
final image = markdown.Element.text('img', '') final image = markdown.Element.text('img', '')
..attributes['src'] = Uri.encodeFull('solink://stickers/$placeholder'); ..attributes['src'] = Uri.encodeFull('solian://stickers/$placeholder');
parser.addNode(image); parser.addNode(image);
return true; return true;
} }
} }
class HighlightBuilder extends MarkdownElementBuilder {
@override
Widget? visitElementAfterWithContext(
BuildContext context,
markdown.Element element,
TextStyle? preferredStyle,
TextStyle? parentStyle,
) {
final isDark = Theme.of(context).brightness == Brightness.dark;
if (element.attributes['class'] == null &&
!element.textContent.trim().contains('\n')) {
return Container(
padding: EdgeInsets.only(top: 0.0, right: 4.0, bottom: 1.75, left: 4.0),
margin: EdgeInsets.symmetric(horizontal: 2.0),
color: Colors.black12,
child: Text(
element.textContent,
style: GoogleFonts.robotoMono(textStyle: preferredStyle),
),
);
} else {
var language = 'plaintext';
final pattern = RegExp(r'^language-(.+)$');
if (element.attributes['class'] != null &&
pattern.hasMatch(element.attributes['class'] ?? '')) {
language =
pattern.firstMatch(element.attributes['class'] ?? '')?.group(1) ??
'plaintext';
}
return ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
child: HighlightView(
element.textContent.trim(),
language: language,
theme: {
...(isDark ? themeMap['a11y-dark']! : themeMap['a11y-light']!),
'root':
(isDark
? TextStyle(
backgroundColor: Colors.transparent,
color: Color(0xfff8f8f2),
)
: TextStyle(
backgroundColor: Colors.transparent,
color: Color(0xff545454),
)),
},
padding: EdgeInsets.all(12),
textStyle: GoogleFonts.robotoMono(textStyle: preferredStyle),
),
);
}
}
}

View File

@ -732,7 +732,7 @@ packages:
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_markdown: flutter_markdown:
dependency: "direct main" dependency: transitive
description: description:
name: flutter_markdown name: flutter_markdown
sha256: "08fb8315236099ff8e90cb87bb2b935e0a724a3af1623000a9cec930468e0f27" sha256: "08fb8315236099ff8e90cb87bb2b935e0a724a3af1623000a9cec930468e0f27"
@ -1109,6 +1109,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.15" version: "0.2.15"
markdown_widget:
dependency: "direct main"
description:
name: markdown_widget
sha256: b52c13d3ee4d0e60c812e15b0593f142a3b8a2003cde1babb271d001a1dbdc1c
url: "https://pub.dev"
source: hosted
version: "2.3.2+8"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@ -1501,6 +1509,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
scroll_to_index:
dependency: transitive
description:
name: scroll_to_index
sha256: b707546e7500d9f070d63e5acf74fd437ec7eeeb68d3412ef7b0afada0b4f176
url: "https://pub.dev"
source: hosted
version: "3.0.1"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@ -48,7 +48,6 @@ dependencies:
freezed_annotation: ^3.0.0 freezed_annotation: ^3.0.0
json_annotation: ^4.9.0 json_annotation: ^4.9.0
flutter_markdown_latex: ^0.3.4 flutter_markdown_latex: ^0.3.4
flutter_markdown: ^0.7.7
markdown: ^7.3.0 markdown: ^7.3.0
flutter_highlight: ^0.7.0 flutter_highlight: ^0.7.0
uuid: ^4.5.1 uuid: ^4.5.1
@ -96,6 +95,7 @@ dependencies:
riverpod_paging_utils: ^0.8.0 riverpod_paging_utils: ^0.8.0
crypto: ^3.0.6 crypto: ^3.0.6
avatar_stack: ^3.0.0 avatar_stack: ^3.0.0
markdown_widget: ^2.3.2+8
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: