Compare commits

..

No commits in common. "9f21f744a4ccadb77383eb08890a475419838464" and "3c0e4046a4cd2a37f1b71765e135529c639493f7" have entirely different histories.

11 changed files with 313 additions and 287 deletions

View File

@ -13,6 +13,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:hotkey_manager/hotkey_manager.dart'; import 'package:hotkey_manager/hotkey_manager.dart';
import 'package:package_info_plus/package_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -40,6 +41,8 @@ import 'package:surface/providers/userinfo.dart';
import 'package:surface/providers/websocket.dart'; import 'package:surface/providers/websocket.dart';
import 'package:surface/providers/widget.dart'; import 'package:surface/providers/widget.dart';
import 'package:surface/router.dart'; import 'package:surface/router.dart';
import 'package:surface/types/chat.dart';
import 'package:surface/types/realm.dart';
import 'package:flutter_web_plugins/url_strategy.dart' show usePathUrlStrategy; import 'package:flutter_web_plugins/url_strategy.dart' show usePathUrlStrategy;
import 'package:surface/widgets/dialog.dart'; import 'package:surface/widgets/dialog.dart';
import 'package:tray_manager/tray_manager.dart'; import 'package:tray_manager/tray_manager.dart';
@ -80,6 +83,12 @@ void main() async {
await EasyLocalization.ensureInitialized(); await EasyLocalization.ensureInitialized();
await Hive.initFlutter();
Hive.registerAdapter(SnChannelImplAdapter());
Hive.registerAdapter(SnRealmImplAdapter());
Hive.registerAdapter(SnChannelMemberImplAdapter());
Hive.registerAdapter(SnChatMessageImplAdapter());
if (!kIsWeb && !Platform.isLinux) { if (!kIsWeb && !Platform.isLinux) {
await Firebase.initializeApp( await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform, options: DefaultFirebaseOptions.currentPlatform,
@ -106,8 +115,7 @@ void main() async {
} }
if (!kIsWeb && Platform.isAndroid) { if (!kIsWeb && Platform.isAndroid) {
final ImagePickerPlatform imagePickerImplementation = final ImagePickerPlatform imagePickerImplementation = ImagePickerPlatform.instance;
ImagePickerPlatform.instance;
if (imagePickerImplementation is ImagePickerAndroid) { if (imagePickerImplementation is ImagePickerAndroid) {
imagePickerImplementation.useAndroidPhotoPicker = true; imagePickerImplementation.useAndroidPhotoPicker = true;
} }
@ -226,8 +234,7 @@ class _AppSplashScreenState extends State<_AppSplashScreen> with TrayListener {
if (prefs.containsKey('first_boot_time')) { if (prefs.containsKey('first_boot_time')) {
final rawTime = prefs.getString('first_boot_time'); final rawTime = prefs.getString('first_boot_time');
final time = DateTime.tryParse(rawTime ?? ''); final time = DateTime.tryParse(rawTime ?? '');
if (time != null && if (time != null && time.isBefore(DateTime.now().subtract(const Duration(days: 3)))) {
time.isBefore(DateTime.now().subtract(const Duration(days: 3)))) {
final inAppReview = InAppReview.instance; final inAppReview = InAppReview.instance;
if (prefs.getBool('rating_requested') == true) return; if (prefs.getBool('rating_requested') == true) return;
if (await inAppReview.isAvailable()) { if (await inAppReview.isAvailable()) {
@ -255,18 +262,13 @@ class _AppSplashScreenState extends State<_AppSplashScreen> with TrayListener {
).get( ).get(
'https://git.solsynth.dev/api/v1/repos/HyperNet/Surface/tags?page=1&limit=1', 'https://git.solsynth.dev/api/v1/repos/HyperNet/Surface/tags?page=1&limit=1',
); );
final remoteVersionString = final remoteVersionString = (resp.data as List).firstOrNull?['name'] ?? '0.0.0+0';
(resp.data as List).firstOrNull?['name'] ?? '0.0.0+0';
final remoteVersion = Version.parse(remoteVersionString.split('+').first); final remoteVersion = Version.parse(remoteVersionString.split('+').first);
final localVersion = Version.parse(localVersionString.split('+').first); final localVersion = Version.parse(localVersionString.split('+').first);
final remoteBuildNumber = final remoteBuildNumber = int.tryParse(remoteVersionString.split('+').last) ?? 0;
int.tryParse(remoteVersionString.split('+').last) ?? 0; final localBuildNumber = int.tryParse(localVersionString.split('+').last) ?? 0;
final localBuildNumber =
int.tryParse(localVersionString.split('+').last) ?? 0;
log("[Update] Local: $localVersionString, Remote: $remoteVersionString"); log("[Update] Local: $localVersionString, Remote: $remoteVersionString");
if ((remoteVersion > localVersion || if ((remoteVersion > localVersion || remoteBuildNumber > localBuildNumber) && mounted) {
remoteBuildNumber > localBuildNumber) &&
mounted) {
final config = context.read<ConfigProvider>(); final config = context.read<ConfigProvider>();
config.setUpdate(remoteVersionString); config.setUpdate(remoteVersionString);
log("[Update] Update available: $remoteVersionString"); log("[Update] Update available: $remoteVersionString");
@ -333,9 +335,7 @@ class _AppSplashScreenState extends State<_AppSplashScreen> with TrayListener {
Future<void> _trayInitialization() async { Future<void> _trayInitialization() async {
if (kIsWeb || Platform.isAndroid || Platform.isIOS) return; if (kIsWeb || Platform.isAndroid || Platform.isIOS) return;
final icon = Platform.isWindows final icon = Platform.isWindows ? 'assets/icon/tray-icon.ico' : 'assets/icon/tray-icon.png';
? 'assets/icon/tray-icon.ico'
: 'assets/icon/tray-icon.png';
final appVersion = await PackageInfo.fromPlatform(); final appVersion = await PackageInfo.fromPlatform();
trayManager.addListener(this); trayManager.addListener(this);

View File

@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:drift/drift.dart'; import 'package:drift/drift.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:surface/database/database.dart'; import 'package:surface/database/database.dart';
import 'package:surface/providers/database.dart'; import 'package:surface/providers/database.dart';
@ -21,6 +22,11 @@ class ChatChannelProvider extends ChangeNotifier {
_sn = context.read<SnNetworkProvider>(); _sn = context.read<SnNetworkProvider>();
_ud = context.read<UserDirectoryProvider>(); _ud = context.read<UserDirectoryProvider>();
_dt = context.read<DatabaseProvider>(); _dt = context.read<DatabaseProvider>();
_initializeLocalData();
}
Future<void> _initializeLocalData() async {
await Hive.openBox<SnChannel>(kChatChannelBoxName);
} }
Future<void> _saveChannelToLocal(Iterable<SnChannel> channels) async { Future<void> _saveChannelToLocal(Iterable<SnChannel> channels) async {

View File

@ -4,10 +4,10 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:material_symbols_icons/symbols.dart'; import 'package:material_symbols_icons/symbols.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:styled_widget/styled_widget.dart'; import 'package:styled_widget/styled_widget.dart';
import 'package:surface/providers/database.dart';
import 'package:surface/providers/sn_network.dart'; import 'package:surface/providers/sn_network.dart';
import 'package:surface/providers/userinfo.dart'; import 'package:surface/providers/userinfo.dart';
import 'package:surface/providers/websocket.dart'; import 'package:surface/providers/websocket.dart';
@ -45,8 +45,7 @@ class AccountScreen extends StatelessWidget {
? Stack( ? Stack(
fit: StackFit.expand, fit: StackFit.expand,
children: [ children: [
AutoResizeUniversalImage(sn.getAttachmentUrl(ua.user!.banner), AutoResizeUniversalImage(sn.getAttachmentUrl(ua.user!.banner), fit: BoxFit.cover),
fit: BoxFit.cover),
Positioned( Positioned(
top: 0, top: 0,
left: 0, left: 0,
@ -80,9 +79,7 @@ class AccountScreen extends StatelessWidget {
], ],
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
child: ua.isAuthorized child: ua.isAuthorized ? _AuthorizedAccountScreen() : _UnauthorizedAccountScreen(),
? _AuthorizedAccountScreen()
: _UnauthorizedAccountScreen(),
), ),
); );
} }
@ -118,15 +115,12 @@ class _AuthorizedAccountScreen extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.baseline, crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic, textBaseline: TextBaseline.alphabetic,
children: [ children: [
Text(ua.user!.nick) Text(ua.user!.nick).textStyle(Theme.of(context).textTheme.titleLarge!),
.textStyle(Theme.of(context).textTheme.titleLarge!),
const Gap(4), const Gap(4),
Text('@${ua.user!.name}') Text('@${ua.user!.name}').textStyle(Theme.of(context).textTheme.bodySmall!),
.textStyle(Theme.of(context).textTheme.bodySmall!),
], ],
), ),
Text(ua.user!.description) Text(ua.user!.description).textStyle(Theme.of(context).textTheme.bodyMedium!),
.textStyle(Theme.of(context).textTheme.bodyMedium!),
], ],
), ),
); );
@ -199,7 +193,8 @@ class _AuthorizedAccountScreen extends StatelessWidget {
ua.logoutUser(); ua.logoutUser();
final ws = context.read<WebSocketProvider>(); final ws = context.read<WebSocketProvider>();
ws.disconnect(); ws.disconnect();
context.read<DatabaseProvider>().removeDatabase(); await Hive.deleteFromDisk();
await Hive.initFlutter();
}, },
), ),
], ],
@ -225,9 +220,7 @@ class _UnauthorizedAccountScreen extends StatelessWidget {
child: Icon(Symbols.waving_hand, size: 28), child: Icon(Symbols.waving_hand, size: 28),
), ),
const Gap(8), const Gap(8),
Text('accountIntroTitle') Text('accountIntroTitle').tr().textStyle(Theme.of(context).textTheme.titleLarge!),
.tr()
.textStyle(Theme.of(context).textTheme.titleLarge!),
Text('accountIntroSubtitle').tr(), Text('accountIntroSubtitle').tr(),
], ],
).padding(all: 20), ).padding(all: 20),

View File

@ -9,7 +9,7 @@ class SnAccount with _$SnAccount {
const SnAccount._(); const SnAccount._();
const factory SnAccount({ const factory SnAccount({
required int id, @HiveField(0) required int id,
required DateTime createdAt, required DateTime createdAt,
required DateTime updatedAt, required DateTime updatedAt,
required DateTime? deletedAt, required DateTime? deletedAt,

View File

@ -58,7 +58,7 @@ abstract class $SnAccountCopyWith<$Res> {
_$SnAccountCopyWithImpl<$Res, SnAccount>; _$SnAccountCopyWithImpl<$Res, SnAccount>;
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, DateTime createdAt,
DateTime updatedAt, DateTime updatedAt,
DateTime? deletedAt, DateTime? deletedAt,
@ -226,7 +226,7 @@ abstract class _$$SnAccountImplCopyWith<$Res>
@override @override
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, DateTime createdAt,
DateTime updatedAt, DateTime updatedAt,
DateTime? deletedAt, DateTime? deletedAt,
@ -374,7 +374,7 @@ class __$$SnAccountImplCopyWithImpl<$Res>
@JsonSerializable() @JsonSerializable()
class _$SnAccountImpl extends _SnAccount { class _$SnAccountImpl extends _SnAccount {
const _$SnAccountImpl( const _$SnAccountImpl(
{required this.id, {@HiveField(0) required this.id,
required this.createdAt, required this.createdAt,
required this.updatedAt, required this.updatedAt,
required this.deletedAt, required this.deletedAt,
@ -556,7 +556,7 @@ class _$SnAccountImpl extends _SnAccount {
abstract class _SnAccount extends SnAccount { abstract class _SnAccount extends SnAccount {
const factory _SnAccount( const factory _SnAccount(
{required final int id, {@HiveField(0) required final int id,
required final DateTime createdAt, required final DateTime createdAt,
required final DateTime updatedAt, required final DateTime updatedAt,
required final DateTime? deletedAt, required final DateTime? deletedAt,

View File

@ -14,21 +14,21 @@ class SnChannel with _$SnChannel {
@HiveType(typeId: 2) @HiveType(typeId: 2)
const factory SnChannel({ const factory SnChannel({
required int id, @HiveField(0) required int id,
required DateTime createdAt, @HiveField(1) required DateTime createdAt,
required DateTime updatedAt, @HiveField(2) required DateTime updatedAt,
required dynamic deletedAt, @HiveField(3) required dynamic deletedAt,
required String alias, @HiveField(4) required String alias,
required String name, @HiveField(5) required String name,
required String description, @HiveField(6) required String description,
required List<SnChannelMember>? members, @HiveField(7) required List<SnChannelMember>? members,
List<SnChatMessage>? messages, List<SnChatMessage>? messages,
required int type, @HiveField(8) required int type,
required int accountId, @HiveField(9) required int accountId,
required SnRealm? realm, @HiveField(10) required SnRealm? realm,
required int? realmId, @HiveField(11) required int? realmId,
required bool isPublic, @HiveField(12) required bool isPublic,
required bool isCommunity, @HiveField(13) required bool isCommunity,
}) = _SnChannel; }) = _SnChannel;
factory SnChannel.fromJson(Map<String, dynamic> json) => factory SnChannel.fromJson(Map<String, dynamic> json) =>
@ -44,17 +44,17 @@ class SnChannelMember with _$SnChannelMember {
@HiveType(typeId: 3) @HiveType(typeId: 3)
const factory SnChannelMember({ const factory SnChannelMember({
required int id, @HiveField(0) required int id,
required DateTime createdAt, @HiveField(1) required DateTime createdAt,
required DateTime updatedAt, @HiveField(2) required DateTime updatedAt,
required DateTime? deletedAt, @HiveField(3) required DateTime? deletedAt,
required int channelId, @HiveField(4) required int channelId,
required int accountId, @HiveField(5) required int accountId,
required String? nick, @HiveField(6) required String? nick,
required SnChannel? channel, @HiveField(7) required SnChannel? channel,
required SnAccount? account, @HiveField(8) required SnAccount? account,
@Default(0) int notify, @Default(0) int notify,
required int powerLevel, @HiveField(9) required int powerLevel,
dynamic calls, dynamic calls,
dynamic events, dynamic events,
}) = _SnChannelMember; }) = _SnChannelMember;
@ -69,19 +69,19 @@ class SnChatMessage with _$SnChatMessage {
@HiveType(typeId: 4) @HiveType(typeId: 4)
const factory SnChatMessage({ const factory SnChatMessage({
required int id, @HiveField(0) required int id,
required DateTime createdAt, @HiveField(1) required DateTime createdAt,
required DateTime updatedAt, @HiveField(2) required DateTime updatedAt,
required DateTime? deletedAt, @HiveField(3) required DateTime? deletedAt,
required String uuid, @HiveField(4) required String uuid,
@Default({}) Map<String, dynamic> body, @HiveField(5) @Default({}) Map<String, dynamic> body,
required String type, @HiveField(6) required String type,
required SnChannel channel, @HiveField(7) required SnChannel channel,
required SnChannelMember sender, @HiveField(8) required SnChannelMember sender,
required int channelId, @HiveField(9) required int channelId,
required int senderId, @HiveField(10) required int senderId,
required int? quoteEventId, @HiveField(11) required int? quoteEventId,
required int? relatedEventId, @HiveField(12) required int? relatedEventId,
SnChatMessagePreload? preload, SnChatMessagePreload? preload,
}) = _SnChatMessage; }) = _SnChatMessage;

View File

@ -66,21 +66,21 @@ abstract class $SnChannelCopyWith<$Res> {
_$SnChannelCopyWithImpl<$Res, SnChannel>; _$SnChannelCopyWithImpl<$Res, SnChannel>;
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
dynamic deletedAt, @HiveField(3) dynamic deletedAt,
String alias, @HiveField(4) String alias,
String name, @HiveField(5) String name,
String description, @HiveField(6) String description,
List<SnChannelMember>? members, @HiveField(7) List<SnChannelMember>? members,
List<SnChatMessage>? messages, List<SnChatMessage>? messages,
int type, @HiveField(8) int type,
int accountId, @HiveField(9) int accountId,
SnRealm? realm, @HiveField(10) SnRealm? realm,
int? realmId, @HiveField(11) int? realmId,
bool isPublic, @HiveField(12) bool isPublic,
bool isCommunity}); @HiveField(13) bool isCommunity});
$SnRealmCopyWith<$Res>? get realm; $SnRealmCopyWith<$Res>? get realm;
} }
@ -204,21 +204,21 @@ abstract class _$$SnChannelImplCopyWith<$Res>
@override @override
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
dynamic deletedAt, @HiveField(3) dynamic deletedAt,
String alias, @HiveField(4) String alias,
String name, @HiveField(5) String name,
String description, @HiveField(6) String description,
List<SnChannelMember>? members, @HiveField(7) List<SnChannelMember>? members,
List<SnChatMessage>? messages, List<SnChatMessage>? messages,
int type, @HiveField(8) int type,
int accountId, @HiveField(9) int accountId,
SnRealm? realm, @HiveField(10) SnRealm? realm,
int? realmId, @HiveField(11) int? realmId,
bool isPublic, @HiveField(12) bool isPublic,
bool isCommunity}); @HiveField(13) bool isCommunity});
@override @override
$SnRealmCopyWith<$Res>? get realm; $SnRealmCopyWith<$Res>? get realm;
@ -323,21 +323,21 @@ class __$$SnChannelImplCopyWithImpl<$Res>
@HiveType(typeId: 2) @HiveType(typeId: 2)
class _$SnChannelImpl extends _SnChannel { class _$SnChannelImpl extends _SnChannel {
const _$SnChannelImpl( const _$SnChannelImpl(
{required this.id, {@HiveField(0) required this.id,
required this.createdAt, @HiveField(1) required this.createdAt,
required this.updatedAt, @HiveField(2) required this.updatedAt,
required this.deletedAt, @HiveField(3) required this.deletedAt,
required this.alias, @HiveField(4) required this.alias,
required this.name, @HiveField(5) required this.name,
required this.description, @HiveField(6) required this.description,
required final List<SnChannelMember>? members, @HiveField(7) required final List<SnChannelMember>? members,
final List<SnChatMessage>? messages, final List<SnChatMessage>? messages,
required this.type, @HiveField(8) required this.type,
required this.accountId, @HiveField(9) required this.accountId,
required this.realm, @HiveField(10) required this.realm,
required this.realmId, @HiveField(11) required this.realmId,
required this.isPublic, @HiveField(12) required this.isPublic,
required this.isCommunity}) @HiveField(13) required this.isCommunity})
: _members = members, : _members = members,
_messages = messages, _messages = messages,
super._(); super._();
@ -477,21 +477,21 @@ class _$SnChannelImpl extends _SnChannel {
abstract class _SnChannel extends SnChannel { abstract class _SnChannel extends SnChannel {
const factory _SnChannel( const factory _SnChannel(
{required final int id, {@HiveField(0) required final int id,
required final DateTime createdAt, @HiveField(1) required final DateTime createdAt,
required final DateTime updatedAt, @HiveField(2) required final DateTime updatedAt,
required final dynamic deletedAt, @HiveField(3) required final dynamic deletedAt,
required final String alias, @HiveField(4) required final String alias,
required final String name, @HiveField(5) required final String name,
required final String description, @HiveField(6) required final String description,
required final List<SnChannelMember>? members, @HiveField(7) required final List<SnChannelMember>? members,
final List<SnChatMessage>? messages, final List<SnChatMessage>? messages,
required final int type, @HiveField(8) required final int type,
required final int accountId, @HiveField(9) required final int accountId,
required final SnRealm? realm, @HiveField(10) required final SnRealm? realm,
required final int? realmId, @HiveField(11) required final int? realmId,
required final bool isPublic, @HiveField(12) required final bool isPublic,
required final bool isCommunity}) = _$SnChannelImpl; @HiveField(13) required final bool isCommunity}) = _$SnChannelImpl;
const _SnChannel._() : super._(); const _SnChannel._() : super._();
factory _SnChannel.fromJson(Map<String, dynamic> json) = factory _SnChannel.fromJson(Map<String, dynamic> json) =
@ -597,17 +597,17 @@ abstract class $SnChannelMemberCopyWith<$Res> {
_$SnChannelMemberCopyWithImpl<$Res, SnChannelMember>; _$SnChannelMemberCopyWithImpl<$Res, SnChannelMember>;
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
DateTime? deletedAt, @HiveField(3) DateTime? deletedAt,
int channelId, @HiveField(4) int channelId,
int accountId, @HiveField(5) int accountId,
String? nick, @HiveField(6) String? nick,
SnChannel? channel, @HiveField(7) SnChannel? channel,
SnAccount? account, @HiveField(8) SnAccount? account,
int notify, int notify,
int powerLevel, @HiveField(9) int powerLevel,
dynamic calls, dynamic calls,
dynamic events}); dynamic events});
@ -738,17 +738,17 @@ abstract class _$$SnChannelMemberImplCopyWith<$Res>
@override @override
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
DateTime? deletedAt, @HiveField(3) DateTime? deletedAt,
int channelId, @HiveField(4) int channelId,
int accountId, @HiveField(5) int accountId,
String? nick, @HiveField(6) String? nick,
SnChannel? channel, @HiveField(7) SnChannel? channel,
SnAccount? account, @HiveField(8) SnAccount? account,
int notify, int notify,
int powerLevel, @HiveField(9) int powerLevel,
dynamic calls, dynamic calls,
dynamic events}); dynamic events});
@ -847,17 +847,17 @@ class __$$SnChannelMemberImplCopyWithImpl<$Res>
@HiveType(typeId: 3) @HiveType(typeId: 3)
class _$SnChannelMemberImpl extends _SnChannelMember { class _$SnChannelMemberImpl extends _SnChannelMember {
const _$SnChannelMemberImpl( const _$SnChannelMemberImpl(
{required this.id, {@HiveField(0) required this.id,
required this.createdAt, @HiveField(1) required this.createdAt,
required this.updatedAt, @HiveField(2) required this.updatedAt,
required this.deletedAt, @HiveField(3) required this.deletedAt,
required this.channelId, @HiveField(4) required this.channelId,
required this.accountId, @HiveField(5) required this.accountId,
required this.nick, @HiveField(6) required this.nick,
required this.channel, @HiveField(7) required this.channel,
required this.account, @HiveField(8) required this.account,
this.notify = 0, this.notify = 0,
required this.powerLevel, @HiveField(9) required this.powerLevel,
this.calls, this.calls,
this.events}) this.events})
: super._(); : super._();
@ -971,17 +971,17 @@ class _$SnChannelMemberImpl extends _SnChannelMember {
abstract class _SnChannelMember extends SnChannelMember { abstract class _SnChannelMember extends SnChannelMember {
const factory _SnChannelMember( const factory _SnChannelMember(
{required final int id, {@HiveField(0) required final int id,
required final DateTime createdAt, @HiveField(1) required final DateTime createdAt,
required final DateTime updatedAt, @HiveField(2) required final DateTime updatedAt,
required final DateTime? deletedAt, @HiveField(3) required final DateTime? deletedAt,
required final int channelId, @HiveField(4) required final int channelId,
required final int accountId, @HiveField(5) required final int accountId,
required final String? nick, @HiveField(6) required final String? nick,
required final SnChannel? channel, @HiveField(7) required final SnChannel? channel,
required final SnAccount? account, @HiveField(8) required final SnAccount? account,
final int notify, final int notify,
required final int powerLevel, @HiveField(9) required final int powerLevel,
final dynamic calls, final dynamic calls,
final dynamic events}) = _$SnChannelMemberImpl; final dynamic events}) = _$SnChannelMemberImpl;
const _SnChannelMember._() : super._(); const _SnChannelMember._() : super._();
@ -1085,19 +1085,19 @@ abstract class $SnChatMessageCopyWith<$Res> {
_$SnChatMessageCopyWithImpl<$Res, SnChatMessage>; _$SnChatMessageCopyWithImpl<$Res, SnChatMessage>;
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
DateTime? deletedAt, @HiveField(3) DateTime? deletedAt,
String uuid, @HiveField(4) String uuid,
Map<String, dynamic> body, @HiveField(5) Map<String, dynamic> body,
String type, @HiveField(6) String type,
SnChannel channel, @HiveField(7) SnChannel channel,
SnChannelMember sender, @HiveField(8) SnChannelMember sender,
int channelId, @HiveField(9) int channelId,
int senderId, @HiveField(10) int senderId,
int? quoteEventId, @HiveField(11) int? quoteEventId,
int? relatedEventId, @HiveField(12) int? relatedEventId,
SnChatMessagePreload? preload}); SnChatMessagePreload? preload});
$SnChannelCopyWith<$Res> get channel; $SnChannelCopyWith<$Res> get channel;
@ -1239,19 +1239,19 @@ abstract class _$$SnChatMessageImplCopyWith<$Res>
@override @override
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
DateTime? deletedAt, @HiveField(3) DateTime? deletedAt,
String uuid, @HiveField(4) String uuid,
Map<String, dynamic> body, @HiveField(5) Map<String, dynamic> body,
String type, @HiveField(6) String type,
SnChannel channel, @HiveField(7) SnChannel channel,
SnChannelMember sender, @HiveField(8) SnChannelMember sender,
int channelId, @HiveField(9) int channelId,
int senderId, @HiveField(10) int senderId,
int? quoteEventId, @HiveField(11) int? quoteEventId,
int? relatedEventId, @HiveField(12) int? relatedEventId,
SnChatMessagePreload? preload}); SnChatMessagePreload? preload});
@override @override
@ -1356,19 +1356,19 @@ class __$$SnChatMessageImplCopyWithImpl<$Res>
@HiveType(typeId: 4) @HiveType(typeId: 4)
class _$SnChatMessageImpl extends _SnChatMessage { class _$SnChatMessageImpl extends _SnChatMessage {
const _$SnChatMessageImpl( const _$SnChatMessageImpl(
{required this.id, {@HiveField(0) required this.id,
required this.createdAt, @HiveField(1) required this.createdAt,
required this.updatedAt, @HiveField(2) required this.updatedAt,
required this.deletedAt, @HiveField(3) required this.deletedAt,
required this.uuid, @HiveField(4) required this.uuid,
final Map<String, dynamic> body = const {}, @HiveField(5) final Map<String, dynamic> body = const {},
required this.type, @HiveField(6) required this.type,
required this.channel, @HiveField(7) required this.channel,
required this.sender, @HiveField(8) required this.sender,
required this.channelId, @HiveField(9) required this.channelId,
required this.senderId, @HiveField(10) required this.senderId,
required this.quoteEventId, @HiveField(11) required this.quoteEventId,
required this.relatedEventId, @HiveField(12) required this.relatedEventId,
this.preload}) this.preload})
: _body = body, : _body = body,
super._(); super._();
@ -1495,19 +1495,19 @@ class _$SnChatMessageImpl extends _SnChatMessage {
abstract class _SnChatMessage extends SnChatMessage { abstract class _SnChatMessage extends SnChatMessage {
const factory _SnChatMessage( const factory _SnChatMessage(
{required final int id, {@HiveField(0) required final int id,
required final DateTime createdAt, @HiveField(1) required final DateTime createdAt,
required final DateTime updatedAt, @HiveField(2) required final DateTime updatedAt,
required final DateTime? deletedAt, @HiveField(3) required final DateTime? deletedAt,
required final String uuid, @HiveField(4) required final String uuid,
final Map<String, dynamic> body, @HiveField(5) final Map<String, dynamic> body,
required final String type, @HiveField(6) required final String type,
required final SnChannel channel, @HiveField(7) required final SnChannel channel,
required final SnChannelMember sender, @HiveField(8) required final SnChannelMember sender,
required final int channelId, @HiveField(9) required final int channelId,
required final int senderId, @HiveField(10) required final int senderId,
required final int? quoteEventId, @HiveField(11) required final int? quoteEventId,
required final int? relatedEventId, @HiveField(12) required final int? relatedEventId,
final SnChatMessagePreload? preload}) = _$SnChatMessageImpl; final SnChatMessagePreload? preload}) = _$SnChatMessageImpl;
const _SnChatMessage._() : super._(); const _SnChatMessage._() : super._();

View File

@ -29,20 +29,20 @@ class SnRealm with _$SnRealm {
@HiveType(typeId: 1) @HiveType(typeId: 1)
const factory SnRealm({ const factory SnRealm({
required int id, @HiveField(0) required int id,
required DateTime createdAt, @HiveField(1) required DateTime createdAt,
required DateTime updatedAt, @HiveField(2) required DateTime updatedAt,
required DateTime? deletedAt, @HiveField(3) required DateTime? deletedAt,
required String alias, @HiveField(4) required String alias,
required String name, @HiveField(5) required String name,
required String description, @HiveField(6) required String description,
List<SnRealmMember>? members, List<SnRealmMember>? members,
required String? avatar, @HiveField(7) required String? avatar,
required String? banner, @HiveField(8) required String? banner,
required Map<String, dynamic>? accessPolicy, @HiveField(9) required Map<String, dynamic>? accessPolicy,
required int accountId, @HiveField(10) required int accountId,
required bool isPublic, @HiveField(11) required bool isPublic,
required bool isCommunity, @HiveField(12) required bool isCommunity,
@Default(0) int popularity, @Default(0) int popularity,
}) = _SnRealm; }) = _SnRealm;

View File

@ -411,20 +411,20 @@ abstract class $SnRealmCopyWith<$Res> {
_$SnRealmCopyWithImpl<$Res, SnRealm>; _$SnRealmCopyWithImpl<$Res, SnRealm>;
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
DateTime? deletedAt, @HiveField(3) DateTime? deletedAt,
String alias, @HiveField(4) String alias,
String name, @HiveField(5) String name,
String description, @HiveField(6) String description,
List<SnRealmMember>? members, List<SnRealmMember>? members,
String? avatar, @HiveField(7) String? avatar,
String? banner, @HiveField(8) String? banner,
Map<String, dynamic>? accessPolicy, @HiveField(9) Map<String, dynamic>? accessPolicy,
int accountId, @HiveField(10) int accountId,
bool isPublic, @HiveField(11) bool isPublic,
bool isCommunity, @HiveField(12) bool isCommunity,
int popularity}); int popularity});
} }
@ -532,20 +532,20 @@ abstract class _$$SnRealmImplCopyWith<$Res> implements $SnRealmCopyWith<$Res> {
@override @override
@useResult @useResult
$Res call( $Res call(
{int id, {@HiveField(0) int id,
DateTime createdAt, @HiveField(1) DateTime createdAt,
DateTime updatedAt, @HiveField(2) DateTime updatedAt,
DateTime? deletedAt, @HiveField(3) DateTime? deletedAt,
String alias, @HiveField(4) String alias,
String name, @HiveField(5) String name,
String description, @HiveField(6) String description,
List<SnRealmMember>? members, List<SnRealmMember>? members,
String? avatar, @HiveField(7) String? avatar,
String? banner, @HiveField(8) String? banner,
Map<String, dynamic>? accessPolicy, @HiveField(9) Map<String, dynamic>? accessPolicy,
int accountId, @HiveField(10) int accountId,
bool isPublic, @HiveField(11) bool isPublic,
bool isCommunity, @HiveField(12) bool isCommunity,
int popularity}); int popularity});
} }
@ -648,20 +648,20 @@ class __$$SnRealmImplCopyWithImpl<$Res>
@HiveType(typeId: 1) @HiveType(typeId: 1)
class _$SnRealmImpl extends _SnRealm { class _$SnRealmImpl extends _SnRealm {
const _$SnRealmImpl( const _$SnRealmImpl(
{required this.id, {@HiveField(0) required this.id,
required this.createdAt, @HiveField(1) required this.createdAt,
required this.updatedAt, @HiveField(2) required this.updatedAt,
required this.deletedAt, @HiveField(3) required this.deletedAt,
required this.alias, @HiveField(4) required this.alias,
required this.name, @HiveField(5) required this.name,
required this.description, @HiveField(6) required this.description,
final List<SnRealmMember>? members, final List<SnRealmMember>? members,
required this.avatar, @HiveField(7) required this.avatar,
required this.banner, @HiveField(8) required this.banner,
required final Map<String, dynamic>? accessPolicy, @HiveField(9) required final Map<String, dynamic>? accessPolicy,
required this.accountId, @HiveField(10) required this.accountId,
required this.isPublic, @HiveField(11) required this.isPublic,
required this.isCommunity, @HiveField(12) required this.isCommunity,
this.popularity = 0}) this.popularity = 0})
: _members = members, : _members = members,
_accessPolicy = accessPolicy, _accessPolicy = accessPolicy,
@ -805,20 +805,20 @@ class _$SnRealmImpl extends _SnRealm {
abstract class _SnRealm extends SnRealm { abstract class _SnRealm extends SnRealm {
const factory _SnRealm( const factory _SnRealm(
{required final int id, {@HiveField(0) required final int id,
required final DateTime createdAt, @HiveField(1) required final DateTime createdAt,
required final DateTime updatedAt, @HiveField(2) required final DateTime updatedAt,
required final DateTime? deletedAt, @HiveField(3) required final DateTime? deletedAt,
required final String alias, @HiveField(4) required final String alias,
required final String name, @HiveField(5) required final String name,
required final String description, @HiveField(6) required final String description,
final List<SnRealmMember>? members, final List<SnRealmMember>? members,
required final String? avatar, @HiveField(7) required final String? avatar,
required final String? banner, @HiveField(8) required final String? banner,
required final Map<String, dynamic>? accessPolicy, @HiveField(9) required final Map<String, dynamic>? accessPolicy,
required final int accountId, @HiveField(10) required final int accountId,
required final bool isPublic, @HiveField(11) required final bool isPublic,
required final bool isCommunity, @HiveField(12) required final bool isCommunity,
final int popularity}) = _$SnRealmImpl; final int popularity}) = _$SnRealmImpl;
const _SnRealm._() : super._(); const _SnRealm._() : super._();

View File

@ -946,6 +946,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.2" version: "2.3.2"
hive:
dependency: "direct main"
description:
name: hive
sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
url: "https://pub.dev"
source: hosted
version: "2.2.3"
hive_flutter:
dependency: "direct main"
description:
name: hive_flutter
sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc
url: "https://pub.dev"
source: hosted
version: "1.1.0"
hive_generator:
dependency: "direct dev"
description:
name: hive_generator
sha256: "06cb8f58ace74de61f63500564931f9505368f45f98958bd7a6c35ba24159db4"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
home_widget: home_widget:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@ -72,6 +72,8 @@ dependencies:
collection: ^1.18.0 collection: ^1.18.0
mime: ^2.0.0 mime: ^2.0.0
web_socket_channel: ^3.0.1 web_socket_channel: ^3.0.1
hive: ^2.2.3
hive_flutter: ^1.1.0
swipe_to: ^1.0.6 swipe_to: ^1.0.6
firebase_core: ^3.8.0 firebase_core: ^3.8.0
firebase_messaging: ^15.1.5 firebase_messaging: ^15.1.5
@ -139,6 +141,7 @@ dev_dependencies:
json_serializable: ^6.8.0 json_serializable: ^6.8.0
icons_launcher: ^3.0.0 icons_launcher: ^3.0.0
flutter_native_splash: ^2.4.2 flutter_native_splash: ^2.4.2
hive_generator: ^2.0.1
flutter_launcher_icons: ^0.14.1 flutter_launcher_icons: ^0.14.1
drift_dev: ^2.25.2 drift_dev: ^2.25.2