Compare commits

...

18 Commits

Author SHA1 Message Date
5cdeb7bd22 🐛 Adding fab to chat wide screen mode, close #244 2026-02-02 03:13:27 +08:00
6e5255550a 🐛 Avoiding show duplicate items in timeline 2026-02-02 02:55:09 +08:00
8a9de6f43f 👽 Update the notify due to the API changes 2026-02-02 02:54:41 +08:00
c9c362d3d1 ⬆️ Upgrade dependecies 2026-02-02 02:44:14 +08:00
617d22847b ⬆️ Upgrade the dependecies 2026-01-30 00:40:30 +08:00
LittleSheep
3c77a4d5be 🔀 Merge pull request #243 from BluewhaleYF/jap
🌐 添加日语本地化
2026-01-24 18:53:25 +08:00
LittleSheep
f9061a3dc6 🔀 Merge pull request #242 from BluewhaleYF/translate
🌐 文言界面翻译改进
2026-01-24 18:52:58 +08:00
Flint Scophire
e12a26d5c0 🌐 添加日语本地化 2026-01-24 13:21:37 +08:00
Flint Scophire
6b31d28cd3 🌐 文言界面翻译改进 2026-01-24 12:36:30 +08:00
bff301fdb3 ⬆️ Upgrade dependecies and flutter 2026-01-21 22:50:48 +08:00
LittleSheep
2049ee4401 🔀 Merge pull request #238 from BluewhaleYF/v3
彻底完成文言界面翻译
2026-01-18 23:53:00 +08:00
18c071826f 💄 Play sfx on confirm dialog as well 2026-01-18 18:17:47 +08:00
5bfc301088 🗑️ Clean unused code 2026-01-18 14:25:11 +08:00
a39853ba5a :drunk: Wrote some useless code 2026-01-18 14:16:29 +08:00
639417e952 :drunk: Werid miniapp runtime 2026-01-18 13:31:45 +08:00
Flint Scophire
9de4def4d4 Add files via upload
彻底完成文言界面翻译
2026-01-18 11:27:44 +08:00
fa0051b606 Sound effects on alert 2026-01-18 01:25:07 +08:00
9d867fd888 🍱 Update audio assets 2026-01-18 01:14:06 +08:00
22 changed files with 2646 additions and 2736 deletions

Binary file not shown.

BIN
assets/audio/alert.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/audio/messages.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -44,83 +44,83 @@ PODS:
- Flutter
- file_saver (0.0.1):
- Flutter
- Firebase/CoreOnly (12.6.0):
- FirebaseCore (~> 12.6.0)
- Firebase/Crashlytics (12.6.0):
- Firebase/CoreOnly (12.8.0):
- FirebaseCore (~> 12.8.0)
- Firebase/Crashlytics (12.8.0):
- Firebase/CoreOnly
- FirebaseCrashlytics (~> 12.6.0)
- Firebase/Messaging (12.6.0):
- FirebaseCrashlytics (~> 12.8.0)
- Firebase/Messaging (12.8.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 12.6.0)
- firebase_analytics (12.1.0):
- FirebaseMessaging (~> 12.8.0)
- firebase_analytics (12.1.1):
- firebase_core
- FirebaseAnalytics (= 12.6.0)
- FirebaseAnalytics (= 12.8.0)
- Flutter
- firebase_core (4.3.0):
- Firebase/CoreOnly (= 12.6.0)
- firebase_core (4.4.0):
- Firebase/CoreOnly (= 12.8.0)
- Flutter
- firebase_crashlytics (5.0.6):
- Firebase/Crashlytics (= 12.6.0)
- firebase_crashlytics (5.0.7):
- Firebase/Crashlytics (= 12.8.0)
- firebase_core
- Flutter
- firebase_messaging (16.1.0):
- Firebase/Messaging (= 12.6.0)
- firebase_messaging (16.1.1):
- Firebase/Messaging (= 12.8.0)
- firebase_core
- Flutter
- FirebaseAnalytics (12.6.0):
- FirebaseAnalytics/Default (= 12.6.0)
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseAnalytics (12.8.0):
- FirebaseAnalytics/Default (= 12.8.0)
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- FirebaseAnalytics/Default (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- GoogleAppMeasurement/Default (= 12.6.0)
- FirebaseAnalytics/Default (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleAppMeasurement/Default (= 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- FirebaseCore (12.6.0):
- FirebaseCoreInternal (~> 12.6.0)
- FirebaseCore (12.8.0):
- FirebaseCoreInternal (~> 12.8.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 8.1)
- FirebaseCoreExtension (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseCoreInternal (12.6.0):
- FirebaseCoreExtension (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseCoreInternal (12.8.0):
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseCrashlytics (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseRemoteConfigInterop (~> 12.6.0)
- FirebaseSessions (~> 12.6.0)
- FirebaseCrashlytics (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- FirebaseRemoteConfigInterop (~> 12.8.0)
- FirebaseSessions (~> 12.8.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/Environment (~> 8.1)
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- FirebaseInstallations (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (12.8.0):
- FirebaseCore (~> 12.8.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseMessaging (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Reachability (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- FirebaseRemoteConfigInterop (12.6.0)
- FirebaseSessions (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseCoreExtension (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseRemoteConfigInterop (12.8.0)
- FirebaseSessions (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseCoreExtension (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
@@ -161,23 +161,23 @@ PODS:
- GoogleUtilities/Logger (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/Core (12.6.0):
- GoogleAppMeasurement/Core (12.8.0):
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/Default (12.6.0):
- GoogleAppMeasurement/Default (12.8.0):
- GoogleAdsOnDeviceConversion (~> 3.2.0)
- GoogleAppMeasurement/Core (= 12.6.0)
- GoogleAppMeasurement/IdentitySupport (= 12.6.0)
- GoogleAppMeasurement/Core (= 12.8.0)
- GoogleAppMeasurement/IdentitySupport (= 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/IdentitySupport (12.6.0):
- GoogleAppMeasurement/Core (= 12.6.0)
- GoogleAppMeasurement/IdentitySupport (12.8.0):
- GoogleAppMeasurement/Core (= 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
@@ -275,7 +275,7 @@ PODS:
- Flutter
- receive_sharing_intent (1.8.1):
- Flutter
- record_ios (1.1.0):
- record_ios (1.2.0):
- Flutter
- SDWebImage (5.21.5):
- SDWebImage/Core (= 5.21.5)
@@ -527,20 +527,20 @@ SPEC CHECKSUMS:
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6
Firebase: a451a7b61536298fd5cbfe3a746fd40443a50679
firebase_analytics: 4f9cca09e65f6c2944a862c6dc86f6bed9fb769c
firebase_core: ba00a168e719694f38960502ceb560285603d073
firebase_crashlytics: 13f4b77e9ce2a84b1f8ea07f293db5b6213ce1cf
firebase_messaging: bf0e29321927edc02a563c984dbfa5b063864b15
FirebaseAnalytics: d0a97a0db6425e5a5d966340b87f92ca7b13a557
FirebaseCore: 0e38ad5d62d980a47a64b8e9301ffa311457be04
FirebaseCoreExtension: 032fd6f8509e591fda8cb76f6651f20d926b121f
FirebaseCoreInternal: 69bf1306a05b8ac43004f6cc1f804bb7b05b229e
FirebaseCrashlytics: 3d6248c50726ee7832aef0e53cb84c9e64d9fa7e
FirebaseInstallations: 631b38da2e11a83daa4bfb482f79d286a5dfa7ad
FirebaseMessaging: a61bc42dcab3f7a346d94bbb54dab2c9435b18b2
FirebaseRemoteConfigInterop: 3443b8cb8fffd76bb3e03b2a84bfd3db952fcda4
FirebaseSessions: 2e8f808347e665dff3e5843f275715f07045297d
Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d
firebase_analytics: b5a19eaf3e4bf4187b0815ef4850b8916e2bc549
firebase_core: ee30637e6744af8e0c12a6a1e8a9718506ec2398
firebase_crashlytics: 28b8f39df8104131376393e6af658b8b77dd120f
firebase_messaging: 343de01a8d3e18b60df0c6d37f7174c44ae38e02
FirebaseAnalytics: f20bbad8cb7f65d8a5eaefeb424ae8800a31bdfc
FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c
FirebaseCoreExtension: 6605938d51f765d8b18bfcafd2085276a252bee2
FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21
FirebaseCrashlytics: fb31c6907e5b52aa252668394d3f1ab326df1511
FirebaseInstallations: 6a14ab3d694ebd9f839c48d330da5547e9ca9dc0
FirebaseMessaging: 7f42cfd10ec64181db4e01b305a613791c8e782c
FirebaseRemoteConfigInterop: 869ddca16614f979e5c931ece11fbb0b8729ed41
FirebaseSessions: d614ca154c63dbbc6c10d6c38259c2162c4e7c9b
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
@@ -553,7 +553,7 @@ SPEC CHECKSUMS:
flutter_webrtc: c3e21fc0dcd9d8eb246ae4d5256fcbeb2f5ecd22
gal: baecd024ebfd13c441269ca7404792a7152fde89
GoogleAdsOnDeviceConversion: d68c69dd9581a0f5da02617b6f377e5be483970f
GoogleAppMeasurement: 3bf40aff49a601af5da1c3345702fcb4991d35ee
GoogleAppMeasurement: 72c9a682fec6290327ea5e3c4b829b247fcb2c17
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326
@@ -580,7 +580,7 @@ SPEC CHECKSUMS:
protocol_handler_ios: 59f23ee71f3ec602d67902ca7f669a80957888d5
quick_actions_ios: 500fcc11711d9f646739093395c4ae8eec25f779
receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00
record_ios: f75fa1d57f840012775c0e93a38a7f3ceea1a374
record_ios: 412daca2350b228e698fffcd08f1f94ceb1e3844
SDWebImage: e9c98383c7572d713c1a0d7dd2783b10599b9838
sensors_plus: 6a11ed0c2e1d0bd0b20b4029d3bad27d96e0c65b
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a

View File

@@ -188,7 +188,7 @@ void main() async {
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
FlutterNativeSplash.remove();
talker.info("[SplashScreen] Now hiding the splash screen...");
talker.info("[SplashScreen] Now hiding splash screen...");
}
runApp(

View File

@@ -1,11 +1,7 @@
import 'dart:math' as math;
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:just_audio/just_audio.dart';
import 'package:island/pods/config.dart';
import 'package:audio_session/audio_session.dart';
import 'package:dart_midi_pro/dart_midi_pro.dart';
final sfxPlayerProvider = Provider<AudioPlayer>((ref) {
final player = AudioPlayer();
@@ -35,7 +31,7 @@ final notificationSfxProvider = FutureProvider<void>((ref) async {
final player = ref.watch(sfxPlayerProvider);
await player.setVolume(0.75);
await player.setAudioSource(
AudioSource.asset('assets/audio/notification.mp3'),
AudioSource.asset('assets/audio/notification.wav'),
preload: true,
);
});
@@ -43,7 +39,7 @@ final notificationSfxProvider = FutureProvider<void>((ref) async {
final messageSfxProvider = FutureProvider<void>((ref) async {
final player = ref.watch(sfxPlayerProvider);
await player.setAudioSource(
AudioSource.asset('assets/audio/messages.mp3'),
AudioSource.asset('assets/audio/messages.wav'),
preload: true,
);
});
@@ -67,110 +63,3 @@ void playMessageSfx(WidgetRef ref) {
if (!settings.soundEffects) return;
_playSfx('assets/audio/messages.mp3', 0.75);
}
class MiniSampleSynth {
final String sampleAsset;
final int baseNote; // MIDI note of the sample (usually 72 = C5 for lower pitch playback)
AudioPlayer? currentPlayer;
MiniSampleSynth({required this.sampleAsset, this.baseNote = 72});
Future<void> playMidiAsset(String midiAsset) async {
final data = await rootBundle.load(midiAsset);
final midi = MidiParser().parseMidiFromBuffer(data.buffer.asUint8List());
for (final track in midi.tracks) {
int currentTick = 0;
for (final event in track) {
currentTick += event.deltaTime;
if (event is NoteOnEvent && event.velocity > 0) {
final note = event.noteNumber;
final durationTicks = _estimateDuration(track, event);
final durationMs = _ticksToMs(durationTicks, midi);
_scheduleNote(
note: note,
startMs: _ticksToMs(currentTick, midi),
durationMs: durationMs,
);
}
}
}
}
void _scheduleNote({
required int note,
required int startMs,
required int durationMs,
}) {
Future.delayed(Duration(milliseconds: startMs), () async {
// Stop any currently playing note
if (currentPlayer != null) {
await currentPlayer!.stop();
await currentPlayer!.dispose();
currentPlayer = null;
}
final player = AudioPlayer();
currentPlayer = player;
await player.setAudioSource(AudioSource.asset(sampleAsset));
final speed = _noteToSpeed(note);
await player.setSpeed(speed);
await player.play();
Future.delayed(Duration(milliseconds: durationMs), () async {
if (currentPlayer == player) {
await player.stop();
await player.dispose();
currentPlayer = null;
}
});
});
}
double _noteToSpeed(int note) {
return math.pow(2, (note - baseNote) / 12).toDouble();
}
int _getTempo(MidiFile midi) {
for (var track in midi.tracks) {
for (var event in track) {
if (event is SetTempoEvent) {
return event.microsecondsPerBeat;
}
}
}
return 500000; // default 120 BPM
}
int _ticksToMs(int ticks, MidiFile midi) {
final tempo = _getTempo(midi);
final ticksPerBeat = midi.header.ticksPerBeat ?? 480;
return ((ticks * tempo) / ticksPerBeat / 1000).round();
}
int _estimateDuration(List<MidiEvent> track, NoteOnEvent on) {
int ticks = 0;
bool started = false;
for (final e in track) {
if (e == on) {
started = true;
continue;
}
if (!started) continue;
ticks += e.deltaTime;
if (e is NoteOffEvent && e.noteNumber == on.noteNumber) {
return ticks;
}
}
return 200; // fallback
}
}

View File

@@ -85,7 +85,7 @@ final class AppSettingsNotifierProvider
}
String _$appSettingsNotifierHash() =>
r'0a7f75bd95850b0c564b29c57912ec8fcac53f09';
r'fc474771ced89ec8637c0f773a9c6bc392f0df60';
abstract class _$AppSettingsNotifier extends $Notifier<AppSettings> {
AppSettings build();

View File

@@ -16,6 +16,8 @@ class ActivityListNotifier
AsyncPaginationController<SnTimelineEvent>,
AsyncPaginationFilter<String?, SnTimelineEvent> {
static const int pageSize = 20;
static const Duration retryAdjustmentDuration = Duration(seconds: 10);
static const int maxRetryAttempts = 1;
@override
FutureOr<PaginationState<SnTimelineEvent>> build() async {
@@ -34,7 +36,7 @@ class ActivityListNotifier
String? currentFilter;
@override
Future<List<SnTimelineEvent>> fetch() async {
Future<List<SnTimelineEvent>> fetch({int retryCount = 0}) async {
final client = ref.read(apiClientProvider);
final settings = ref.read(appSettingsProvider);
@@ -72,7 +74,23 @@ class ActivityListNotifier
}
}
return items;
// Check for duplicate items by id
final existingItemIds = state.value?.items.map((e) => e.id).toSet() ?? {};
final uniqueItems = items.where((item) => !existingItemIds.contains(item.id)).toList();
// If no new items and we haven't reached max retry attempts, adjust cursor and retry
if (uniqueItems.isEmpty && retryCount < maxRetryAttempts) {
final prevCursor = DateTime.tryParse(cursor ?? '');
if (prevCursor != null) {
// Adjust cursor by subtracting retry adjustment duration
final adjustedCursor = prevCursor.subtract(retryAdjustmentDuration);
cursor = adjustedCursor.toUtc().toIso8601String();
// Retry fetch with adjusted cursor
return fetch(retryCount: retryCount + 1);
}
}
return uniqueItems;
}
void updateOne(int index, SnTimelineEvent activity) {

View File

@@ -347,6 +347,78 @@ class ChatShellScreen extends HookConsumerWidget {
}
}
class ChatFabWidget extends HookConsumerWidget {
const ChatFabWidget({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final userInfo = ref.watch(userInfoProvider);
if (userInfo.value == null) {
return const SizedBox.shrink();
}
return FloatingActionButton(
child: const Icon(Symbols.add),
onPressed: () {
showModalBottomSheet(
context: context,
isScrollControlled: true,
useRootNavigator: true,
builder: (context) => Column(
mainAxisSize: MainAxisSize.min,
children: [
const Gap(40),
ListTile(
title: const Text('createChatRoom').tr(),
leading: const Icon(Symbols.add),
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
onTap: () {
showModalBottomSheet(
context: context,
useRootNavigator: true,
isScrollControlled: true,
builder: (context) => const EditChatScreen(),
).then((value) {
if (value != null) {
eventBus.fire(const ChatRoomsRefreshEvent());
}
});
},
),
ListTile(
title: const Text('createDirectMessage').tr(),
leading: const Icon(Symbols.person),
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
onTap: () async {
final result = await showModalBottomSheet(
context: context,
useRootNavigator: true,
isScrollControlled: true,
builder: (context) => const AccountPickerSheet(),
);
if (result == null) return;
final client = ref.read(apiClientProvider);
try {
await client.post(
'/messager/chat/direct',
data: {'related_user_id': result.id},
);
eventBus.fire(const ChatRoomsRefreshEvent());
} catch (err) {
showErrorAlert(err);
}
},
),
const Gap(16),
],
),
);
},
).padding(bottom: MediaQuery.of(context).padding.bottom);
}
}
class ChatListScreen extends HookConsumerWidget {
final bool isAside;
final bool isFloating;
@@ -386,61 +458,66 @@ class ChatListScreen extends HookConsumerWidget {
margin: EdgeInsets.zero,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)),
child: Column(
child: Stack(
children: [
Row(
Column(
children: [
Expanded(
child: TabBar(
dividerColor: Colors.transparent,
controller: tabController,
tabAlignment: TabAlignment.start,
isScrollable: true,
tabs: [
const Tab(icon: Icon(Symbols.chat)),
const Tab(icon: Icon(Symbols.person)),
const Tab(icon: Icon(Symbols.group)),
],
),
),
Padding(
padding: const EdgeInsets.only(right: 8),
child: IconButton(
icon: Badge(
label: Text(
chatInvites.when(
data: (invites) => invites.length.toString(),
error: (_, _) => '0',
loading: () => '0',
),
Row(
children: [
Expanded(
child: TabBar(
dividerColor: Colors.transparent,
controller: tabController,
tabAlignment: TabAlignment.start,
isScrollable: true,
tabs: [
const Tab(icon: Icon(Symbols.chat)),
const Tab(icon: Icon(Symbols.person)),
const Tab(icon: Icon(Symbols.group)),
],
),
isLabelVisible: chatInvites.when(
data: (invites) => invites.isNotEmpty,
error: (_, _) => false,
loading: () => false,
),
child: const Icon(Symbols.email),
),
onPressed: () {
showModalBottomSheet(
useRootNavigator: true,
isScrollControlled: true,
context: context,
builder: (context) => const _ChatInvitesSheet(),
);
},
Padding(
padding: const EdgeInsets.only(right: 8),
child: IconButton(
icon: Badge(
label: Text(
chatInvites.when(
data: (invites) => invites.length.toString(),
error: (_, _) => '0',
loading: () => '0',
),
),
isLabelVisible: chatInvites.when(
data: (invites) => invites.isNotEmpty,
error: (_, _) => false,
loading: () => false,
),
child: const Icon(Symbols.email),
),
onPressed: () {
showModalBottomSheet(
useRootNavigator: true,
isScrollControlled: true,
context: context,
builder: (context) => const _ChatInvitesSheet(),
);
},
),
),
],
).padding(horizontal: 8),
const Divider(height: 1),
Expanded(
child: ChatListBodyWidget(
isFloating: false,
tabController: tabController,
selectedTab: selectedTab,
),
),
],
).padding(horizontal: 8),
const Divider(height: 1),
Expanded(
child: ChatListBodyWidget(
isFloating: false,
tabController: tabController,
selectedTab: selectedTab,
),
),
Positioned(bottom: 16, right: 16, child: ChatFabWidget()),
],
),
),
@@ -457,70 +534,7 @@ class ChatListScreen extends HookConsumerWidget {
return AppScaffold(
extendBody: false, // Prevent conflicts with tabs navigation
floatingActionButton: userInfo.value != null
? FloatingActionButton(
child: const Icon(Symbols.add),
onPressed: () {
showModalBottomSheet(
context: context,
isScrollControlled: true,
useRootNavigator: true,
builder: (context) => Column(
mainAxisSize: MainAxisSize.min,
children: [
const Gap(40),
ListTile(
title: const Text('createChatRoom').tr(),
leading: const Icon(Symbols.add),
contentPadding: const EdgeInsets.symmetric(
horizontal: 24,
),
onTap: () {
showModalBottomSheet(
context: context,
useRootNavigator: true,
isScrollControlled: true,
builder: (context) => const EditChatScreen(),
).then((value) {
if (value != null) {
eventBus.fire(const ChatRoomsRefreshEvent());
}
});
},
),
ListTile(
title: const Text('createDirectMessage').tr(),
leading: const Icon(Symbols.person),
contentPadding: const EdgeInsets.symmetric(
horizontal: 24,
),
onTap: () async {
final result = await showModalBottomSheet(
context: context,
useRootNavigator: true,
isScrollControlled: true,
builder: (context) => const AccountPickerSheet(),
);
if (result == null) return;
final client = ref.read(apiClientProvider);
try {
await client.post(
'/messager/chat/direct',
data: {'related_user_id': result.id},
);
eventBus.fire(const ChatRoomsRefreshEvent());
} catch (err) {
showErrorAlert(err);
}
},
),
const Gap(16),
],
),
);
},
).padding(bottom: MediaQuery.of(context).padding.bottom)
: null,
floatingActionButton: const ChatFabWidget(),
appBar: AppBar(
flexibleSpace: Container(
height: 48,

View File

@@ -261,11 +261,11 @@ class FileListScreen extends HookConsumerWidget {
context: context,
isScrollControlled: true,
builder: (context) => SheetScaffold(
titleText: 'Usage Overview',
child: UsageOverviewWidget(
usage: usage,
quota: quota,
).padding(horizontal: 8, vertical: 16),
titleText: 'Usage Overview',
),
);
}

View File

@@ -55,7 +55,7 @@ Future<void> initializeLocalNotifications() async {
);
await flutterLocalNotificationsPlugin.initialize(
initializationSettings,
settings: initializationSettings,
onDidReceiveNotificationResponse: (NotificationResponse response) async {
final payload = response.payload;
if (payload != null) {
@@ -125,10 +125,10 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
android: androidNotificationDetails,
);
await flutterLocalNotificationsPlugin.show(
0,
notification.title,
notification.content,
notificationDetails,
id: 0,
title: notification.title,
body: notification.content,
notificationDetails: notificationDetails,
payload: notification.meta['action_uri'] as String?,
);
} else {

View File

@@ -7,8 +7,10 @@ import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/main.dart';
import 'package:island/models/account.dart';
import 'package:island/pods/config.dart';
import 'package:island/pods/notification.dart';
import 'package:island/talker.dart';
import 'package:just_audio/just_audio.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:styled_widget/styled_widget.dart';
import 'package:top_snackbar_flutter/top_snack_bar.dart';
@@ -241,7 +243,22 @@ bool closeTopmostOverlayDialog() {
const kDialogMaxWidth = 480.0;
Future<void> _playSfx(String assetPath, double volume) async {
final player = AudioPlayer();
await player.setVolume(volume);
await player.setAudioSource(AudioSource.asset(assetPath));
await player.play();
await player.dispose();
}
void showErrorAlert(dynamic err, {IconData? icon}) {
final context = globalOverlay.currentState!.context;
final ref = ProviderScope.containerOf(context);
final settings = ref.read(appSettingsProvider);
if (settings.soundEffects) {
unawaited(_playSfx('assets/audio/alert.reversed.wav', 0.75));
}
if (err is Error) {
talker.error('Something went wrong...', err, err.stackTrace);
}
@@ -292,6 +309,13 @@ void showErrorAlert(dynamic err, {IconData? icon}) {
}
void showInfoAlert(String message, String title, {IconData? icon}) {
final context = globalOverlay.currentState!.context;
final ref = ProviderScope.containerOf(context);
final settings = ref.read(appSettingsProvider);
if (settings.soundEffects) {
unawaited(_playSfx('assets/audio/alert.wav', 0.75));
}
showOverlayDialog<void>(
builder: (context, close) => ConstrainedBox(
constraints: const BoxConstraints(maxWidth: kDialogMaxWidth),
@@ -333,6 +357,13 @@ Future<bool> showConfirmAlert(
IconData? icon,
bool isDanger = false,
}) async {
final context = globalOverlay.currentState!.context;
final ref = ProviderScope.containerOf(context);
final settings = ref.read(appSettingsProvider);
if (settings.soundEffects) {
unawaited(_playSfx('assets/audio/alert.wav', 0.75));
}
final result = await showOverlayDialog<bool>(
builder: (context, close) => ConstrainedBox(
constraints: const BoxConstraints(maxWidth: kDialogMaxWidth),
@@ -422,3 +453,4 @@ Future<void> openExternalLink(Uri url, WidgetRef ref) async {
}
}
}

View File

@@ -3,7 +3,6 @@ import 'package:flutter/services.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/pods/audio.dart';
import 'package:island/pods/message.dart';
import 'package:island/pods/network.dart';
import 'package:island/services/update_service.dart';
@@ -23,7 +22,7 @@ Future<void> _showSetTokenDialog(BuildContext context, WidgetRef ref) async {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Set Access Token'),
title: const Text('Set access token'),
content: TextField(
controller: controller,
decoration: const InputDecoration(
@@ -131,17 +130,26 @@ class DebugSheet extends HookConsumerWidget {
const Divider(height: 8),
ListTile(
minTileHeight: 48,
leading: const Icon(Symbols.play_arrow),
leading: const Icon(Symbols.error),
trailing: const Icon(Symbols.chevron_right),
contentPadding: EdgeInsets.symmetric(horizontal: 24),
title: Text('Play untitled'),
onTap: () async {
final synth = MiniSampleSynth(
sampleAsset: 'assets/audio/messages.mp3',
baseNote: 60,
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
title: const Text('Test error alert'),
onTap: () {
showErrorAlert(
'This is a test error message for debugging purposes.',
);
await synth.playMidiAsset(
'assets/midi/never-gonna-give-you-up.mid',
},
),
ListTile(
minTileHeight: 48,
leading: const Icon(Symbols.info),
trailing: const Icon(Symbols.chevron_right),
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
title: const Text('Test info alert'),
onTap: () {
showInfoAlert(
'This is a test info message for debugging purposes.',
'Test Alert',
);
},
),

View File

@@ -102,16 +102,16 @@ class FileListView extends HookConsumerWidget {
useEffect(() {
// Sync query, order, and orderDesc filters
if (mode.value == FileListMode.unindexed) {
unindexedNotifier.setQuery(this.query.value);
unindexedNotifier.setQuery(query.value);
unindexedNotifier.setOrder(order.value);
unindexedNotifier.setOrderDesc(orderDesc.value);
} else {
cloudNotifier.setQuery(this.query.value);
cloudNotifier.setQuery(query.value);
cloudNotifier.setOrder(order.value);
cloudNotifier.setOrderDesc(orderDesc.value);
}
return null;
}, [this.query.value, order.value, orderDesc.value, mode.value]);
}, [query.value, order.value, orderDesc.value, mode.value]);
final isRefreshing = ref.watch(
mode.value == FileListMode.normal

View File

@@ -15,85 +15,85 @@ PODS:
- FlutterMacOS
- file_selector_macos (0.0.1):
- FlutterMacOS
- Firebase/CoreOnly (12.6.0):
- FirebaseCore (~> 12.6.0)
- Firebase/Crashlytics (12.6.0):
- Firebase/CoreOnly (12.8.0):
- FirebaseCore (~> 12.8.0)
- Firebase/Crashlytics (12.8.0):
- Firebase/CoreOnly
- FirebaseCrashlytics (~> 12.6.0)
- Firebase/Messaging (12.6.0):
- FirebaseCrashlytics (~> 12.8.0)
- Firebase/Messaging (12.8.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 12.6.0)
- firebase_analytics (12.1.0):
- FirebaseMessaging (~> 12.8.0)
- firebase_analytics (12.1.1):
- firebase_core
- FirebaseAnalytics (= 12.6.0)
- FirebaseAnalytics (= 12.8.0)
- FlutterMacOS
- firebase_core (4.3.0):
- Firebase/CoreOnly (~> 12.6.0)
- firebase_core (4.4.0):
- Firebase/CoreOnly (~> 12.8.0)
- FlutterMacOS
- firebase_crashlytics (5.0.6):
- Firebase/CoreOnly (~> 12.6.0)
- Firebase/Crashlytics (~> 12.6.0)
- firebase_crashlytics (5.0.7):
- Firebase/CoreOnly (~> 12.8.0)
- Firebase/Crashlytics (~> 12.8.0)
- firebase_core
- FlutterMacOS
- firebase_messaging (16.1.0):
- Firebase/CoreOnly (~> 12.6.0)
- Firebase/Messaging (~> 12.6.0)
- firebase_messaging (16.1.1):
- Firebase/CoreOnly (~> 12.8.0)
- Firebase/Messaging (~> 12.8.0)
- firebase_core
- FlutterMacOS
- FirebaseAnalytics (12.6.0):
- FirebaseAnalytics/Default (= 12.6.0)
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseAnalytics (12.8.0):
- FirebaseAnalytics/Default (= 12.8.0)
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- FirebaseAnalytics/Default (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- GoogleAppMeasurement/Default (= 12.6.0)
- FirebaseAnalytics/Default (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleAppMeasurement/Default (= 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- FirebaseCore (12.6.0):
- FirebaseCoreInternal (~> 12.6.0)
- FirebaseCore (12.8.0):
- FirebaseCoreInternal (~> 12.8.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 8.1)
- FirebaseCoreExtension (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseCoreInternal (12.6.0):
- FirebaseCoreExtension (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseCoreInternal (12.8.0):
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseCrashlytics (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseRemoteConfigInterop (~> 12.6.0)
- FirebaseSessions (~> 12.6.0)
- FirebaseCrashlytics (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- FirebaseRemoteConfigInterop (~> 12.8.0)
- FirebaseSessions (~> 12.8.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/Environment (~> 8.1)
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- FirebaseInstallations (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (12.8.0):
- FirebaseCore (~> 12.8.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseMessaging (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Reachability (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- FirebaseRemoteConfigInterop (12.6.0)
- FirebaseSessions (12.6.0):
- FirebaseCore (~> 12.6.0)
- FirebaseCoreExtension (~> 12.6.0)
- FirebaseInstallations (~> 12.6.0)
- FirebaseRemoteConfigInterop (12.8.0)
- FirebaseSessions (12.8.0):
- FirebaseCore (~> 12.8.0)
- FirebaseCoreExtension (~> 12.8.0)
- FirebaseInstallations (~> 12.8.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
@@ -119,23 +119,23 @@ PODS:
- gal (1.0.0):
- Flutter
- FlutterMacOS
- GoogleAppMeasurement/Core (12.6.0):
- GoogleAppMeasurement/Core (12.8.0):
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/Default (12.6.0):
- GoogleAppMeasurement/Default (12.8.0):
- GoogleAdsOnDeviceConversion (~> 3.2.0)
- GoogleAppMeasurement/Core (= 12.6.0)
- GoogleAppMeasurement/IdentitySupport (= 12.6.0)
- GoogleAppMeasurement/Core (= 12.8.0)
- GoogleAppMeasurement/IdentitySupport (= 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/IdentitySupport (12.6.0):
- GoogleAppMeasurement/Core (= 12.6.0)
- GoogleAppMeasurement/IdentitySupport (12.8.0):
- GoogleAppMeasurement/Core (= 12.8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
@@ -209,7 +209,7 @@ PODS:
- PromisesObjC (= 2.4.0)
- protocol_handler_macos (0.0.1):
- FlutterMacOS
- record_macos (1.1.0):
- record_macos (1.2.0):
- FlutterMacOS
- screen_retriever_macos (0.0.1):
- FlutterMacOS
@@ -431,20 +431,20 @@ SPEC CHECKSUMS:
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
file_saver: e35bd97de451dde55ff8c38862ed7ad0f3418d0f
file_selector_macos: 9e9e068e90ebee155097d00e89ae91edb2374db7
Firebase: a451a7b61536298fd5cbfe3a746fd40443a50679
firebase_analytics: d59fdb2c980c7975f249eafd51520a45d4050a77
firebase_core: 2ccd04fc130691db5f3d3cd9aa43ab430004c1e9
firebase_crashlytics: a2ffade1722840166ba9b05a5aa846a23cd84cb3
firebase_messaging: 80efbf2e975a91f612ce5b5d18c67e5a762fbdf8
FirebaseAnalytics: d0a97a0db6425e5a5d966340b87f92ca7b13a557
FirebaseCore: 0e38ad5d62d980a47a64b8e9301ffa311457be04
FirebaseCoreExtension: 032fd6f8509e591fda8cb76f6651f20d926b121f
FirebaseCoreInternal: 69bf1306a05b8ac43004f6cc1f804bb7b05b229e
FirebaseCrashlytics: 3d6248c50726ee7832aef0e53cb84c9e64d9fa7e
FirebaseInstallations: 631b38da2e11a83daa4bfb482f79d286a5dfa7ad
FirebaseMessaging: a61bc42dcab3f7a346d94bbb54dab2c9435b18b2
FirebaseRemoteConfigInterop: 3443b8cb8fffd76bb3e03b2a84bfd3db952fcda4
FirebaseSessions: 2e8f808347e665dff3e5843f275715f07045297d
Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d
firebase_analytics: a5e02c7d878b16431358e4b65808c171db05ae5a
firebase_core: b1697fb64ff2b9ca16baaa821205f8b0c058e5d2
firebase_crashlytics: 1fc281aed26b12f6076d4be765f3dc66a453c64b
firebase_messaging: e6b30479b390f3a41203a7244886c6ab345536d3
FirebaseAnalytics: f20bbad8cb7f65d8a5eaefeb424ae8800a31bdfc
FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c
FirebaseCoreExtension: 6605938d51f765d8b18bfcafd2085276a252bee2
FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21
FirebaseCrashlytics: fb31c6907e5b52aa252668394d3f1ab326df1511
FirebaseInstallations: 6a14ab3d694ebd9f839c48d330da5547e9ca9dc0
FirebaseMessaging: 7f42cfd10ec64181db4e01b305a613791c8e782c
FirebaseRemoteConfigInterop: 869ddca16614f979e5c931ece11fbb0b8729ed41
FirebaseSessions: d614ca154c63dbbc6c10d6c38259c2162c4e7c9b
flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d
flutter_local_notifications: 4bf37a31afde695b56091b4ae3e4d9c7a7e6cda0
flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23
@@ -453,7 +453,7 @@ SPEC CHECKSUMS:
flutter_webrtc: 718eae22a371cd94e5d56aa4f301443ebc5bb737
FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
gal: baecd024ebfd13c441269ca7404792a7152fde89
GoogleAppMeasurement: 3bf40aff49a601af5da1c3345702fcb4991d35ee
GoogleAppMeasurement: 72c9a682fec6290327ea5e3c4b829b247fcb2c17
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
HotKey: 400beb7caa29054ea8d864c96f5ba7e5b4852277
@@ -473,7 +473,7 @@ SPEC CHECKSUMS:
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
protocol_handler_macos: f9cd7b13bcaf6b0425f7410cbe52376cb843a936
record_macos: 43194b6c06ca6f8fa132e2acea72b202b92a0f5b
record_macos: 7f227161b93c49e7e34fe681c5891c8622c8cc8b
screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb

View File

@@ -13,10 +13,10 @@ packages:
dependency: transitive
description:
name: _flutterfire_internals
sha256: e4a1b612fd2955908e26116075b3a4baf10c353418ca645b4deae231c82bf144
sha256: cd83f7d6bd4e4c0b0b4fef802e8796784032e1cc23d7b0e982cf5d05d9bbe182
url: "https://pub.dev"
source: hosted
version: "1.3.65"
version: "1.3.66"
adaptive_number:
dependency: transitive
description:
@@ -209,14 +209,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.4.3"
chalkdart:
dependency: transitive
description:
name: chalkdart
sha256: "7ffc6bd39c81453fb9ba8dbce042a9c960219b75ea1c07196a7fa41c2fab9e86"
url: "https://pub.dev"
source: hosted
version: "3.0.5"
characters:
dependency: transitive
description:
@@ -277,10 +269,10 @@ packages:
dependency: transitive
description:
name: code_assets
sha256: ae0db647e668cbb295a3527f0938e4039e004c80099dce2f964102373f5ce0b5
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
url: "https://pub.dev"
source: hosted
version: "0.19.10"
version: "1.0.0"
code_builder:
dependency: transitive
description:
@@ -313,14 +305,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.1"
console:
dependency: transitive
description:
name: console
sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a
url: "https://pub.dev"
source: hosted
version: "4.1.0"
convert:
dependency: "direct main"
description:
@@ -349,10 +333,10 @@ packages:
dependency: "direct main"
description:
name: cross_file
sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937"
url: "https://pub.dev"
source: hosted
version: "0.3.5+1"
version: "0.3.5+2"
crypto:
dependency: "direct main"
description:
@@ -417,14 +401,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.3.1"
dart_midi_pro:
dependency: "direct main"
description:
name: dart_midi_pro
sha256: "9a0273c92c0336e5694c7318fd936f64f06e938a936dd5fac6563c39954b7f6d"
url: "https://pub.dev"
source: hosted
version: "1.0.4+2"
dart_style:
dependency: transitive
description:
@@ -437,10 +413,10 @@ packages:
dependency: transitive
description:
name: dart_webrtc
sha256: "51bcda4ba5d7dd9e65a309244ce3ac0b58025e6e1f6d7442cee4cd02134ef65f"
sha256: "4ed7b9fa9924e5a81eb39271e2c2356739dd1039d60a13b86ba6c5f448625086"
url: "https://pub.dev"
source: hosted
version: "1.6.0"
version: "1.7.0"
dbus:
dependency: transitive
description:
@@ -485,10 +461,10 @@ packages:
dependency: "direct main"
description:
name: dio
sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9
sha256: b9d46faecab38fc8cc286f80bc4d61a3bb5d4ac49e51ed877b4d6706efe57b25
url: "https://pub.dev"
source: hosted
version: "5.9.0"
version: "5.9.1"
dio_smart_retry:
dependency: "direct main"
description:
@@ -629,10 +605,10 @@ packages:
dependency: "direct main"
description:
name: file_picker
sha256: d974b6ba2606371ac71dd94254beefb6fa81185bde0b59bdc1df09885da85fde
sha256: "57d9a1dd5063f85fa3107fb42d1faffda52fdc948cefd5fe5ea85267a5fc7343"
url: "https://pub.dev"
source: hosted
version: "10.3.8"
version: "10.3.10"
file_saver:
dependency: "direct main"
description:
@@ -677,34 +653,34 @@ packages:
dependency: "direct main"
description:
name: firebase_analytics
sha256: "8ca4832c7a6d145ce987fd07d6dfbb8c91d9058178342f20de6305fb77b1b40d"
sha256: "91e2739bad690da2826c0cd5b28328fd15fb87adf54634cded703f34fd797a81"
url: "https://pub.dev"
source: hosted
version: "12.1.0"
version: "12.1.1"
firebase_analytics_platform_interface:
dependency: transitive
description:
name: firebase_analytics_platform_interface
sha256: d00234716f415f89eb5c2cefb1238d7fd2f3120275d71414b84ae434dcdb7a19
sha256: "62fd3f27f342c898bd819fb97fa87c0b971e9fbe03357477282c0e14e1a40c3c"
url: "https://pub.dev"
source: hosted
version: "5.0.5"
version: "5.0.6"
firebase_analytics_web:
dependency: transitive
description:
name: firebase_analytics_web
sha256: e42b294e51aedb4bd4b761a886c8d6b473c44b44aa4c0b47cab06b2c66ac3fba
sha256: "8fc488bb008439fc3b850cfac892dec1ff4cd438eee44438919a14c5e61b9828"
url: "https://pub.dev"
source: hosted
version: "0.6.1+1"
version: "0.6.1+2"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
sha256: "29cfa93c771d8105484acac340b5ea0835be371672c91405a300303986f4eba9"
sha256: "923085c881663ef685269b013e241b428e1fb03cdd0ebde265d9b40ff18abf80"
url: "https://pub.dev"
source: hosted
version: "4.3.0"
version: "4.4.0"
firebase_core_platform_interface:
dependency: transitive
description:
@@ -717,50 +693,50 @@ packages:
dependency: transitive
description:
name: firebase_core_web
sha256: a631bbfbfa26963d68046aed949df80b228964020e9155b086eff94f462bbf1f
sha256: "83e7356c704131ca4d8d8dd57e360d8acecbca38b1a3705c7ae46cc34c708084"
url: "https://pub.dev"
source: hosted
version: "3.3.1"
version: "3.4.0"
firebase_crashlytics:
dependency: "direct main"
description:
name: firebase_crashlytics
sha256: "8d52022ee6fdd224e92c042f297d1fd0ec277195c49f39fa61b8cc500a639f00"
sha256: a6e6cb8b2ea1214533a54e4c1b11b19c40f6a29333f3ab0854a479fdc3237c5b
url: "https://pub.dev"
source: hosted
version: "5.0.6"
version: "5.0.7"
firebase_crashlytics_platform_interface:
dependency: transitive
description:
name: firebase_crashlytics_platform_interface
sha256: "97c6a97b35e3d3dafe38fb053a65086a1efb125022d292161405848527cc25a4"
sha256: fc6837c4c64c48fa94cab8a872a632b9194fa9208ca76a822f424b3da945584d
url: "https://pub.dev"
source: hosted
version: "3.8.16"
version: "3.8.17"
firebase_messaging:
dependency: "direct main"
description:
name: firebase_messaging
sha256: "1ad663fbb6758acec09d7e84a2e6478265f0a517f40ef77c573efd5e0089f400"
sha256: "06fad40ea14771e969a8f2bbce1944aa20ee2f4f57f4eca5b3ba346b65f3f644"
url: "https://pub.dev"
source: hosted
version: "16.1.0"
version: "16.1.1"
firebase_messaging_platform_interface:
dependency: transitive
description:
name: firebase_messaging_platform_interface
sha256: ea620e841fbcec62a96984295fc628f53ef5a8da4f53238159719ed0af7db834
sha256: "6c49e901c77e6e10e86d98e32056a087eb1ca1b93acdf58524f1961e617657b7"
url: "https://pub.dev"
source: hosted
version: "4.7.5"
version: "4.7.6"
firebase_messaging_web:
dependency: transitive
description:
name: firebase_messaging_web
sha256: "7d0fb6256202515bba8489a3d69c6bc9d52d69a4999bad789053b486c8e7323e"
sha256: "2756f8fea583ffb9d294d15ddecb3a9ad429b023b70c9990c151fc92c54a32b3"
url: "https://pub.dev"
source: hosted
version: "4.1.1"
version: "4.1.2"
fixnum:
dependency: transitive
description:
@@ -994,34 +970,34 @@ packages:
dependency: "direct main"
description:
name: flutter_local_notifications
sha256: "19ffb0a8bb7407875555e5e98d7343a633bb73707bae6c6a5f37c90014077875"
sha256: "76cd20bcfa72fabe50ea27eeaf165527f446f55d3033021462084b87805b4cac"
url: "https://pub.dev"
source: hosted
version: "19.5.0"
version: "20.0.0"
flutter_local_notifications_linux:
dependency: transitive
description:
name: flutter_local_notifications_linux
sha256: e3c277b2daab8e36ac5a6820536668d07e83851aeeb79c446e525a70710770a5
sha256: dce0116868cedd2cdf768af0365fc37ff1cbef7c02c4f51d0587482e625868d0
url: "https://pub.dev"
source: hosted
version: "6.0.0"
version: "7.0.0"
flutter_local_notifications_platform_interface:
dependency: transitive
description:
name: flutter_local_notifications_platform_interface
sha256: "277d25d960c15674ce78ca97f57d0bae2ee401c844b6ac80fcd972a9c99d09fe"
sha256: "23de31678a48c084169d7ae95866df9de5c9d2a44be3e5915a2ff067aeeba899"
url: "https://pub.dev"
source: hosted
version: "9.1.0"
version: "10.0.0"
flutter_local_notifications_windows:
dependency: transitive
description:
name: flutter_local_notifications_windows
sha256: "8d658f0d367c48bd420e7cf2d26655e2d1130147bca1eea917e576ca76668aaf"
sha256: "7ddd964fa85b6a23e96956c5b63ef55cdb9e5947b71b95712204db42ad46da61"
url: "https://pub.dev"
source: hosted
version: "1.0.3"
version: "2.0.0"
flutter_localizations:
dependency: transitive
description: flutter
@@ -1253,14 +1229,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.1"
get_it:
dependency: transitive
description:
name: get_it
sha256: ae78de7c3f2304b8d81f2bb6e320833e5e81de942188542328f074978cc0efa9
url: "https://pub.dev"
source: hosted
version: "8.3.0"
glob:
dependency: transitive
description:
@@ -1281,10 +1249,10 @@ packages:
dependency: "direct main"
description:
name: google_fonts
sha256: ca1cc501704c47e478f69a667d7f2d882755ddf7baad3f60c3b1256594467022
sha256: bf1fe61d4a53420a94cbbd4326e07702d247757926f6955af9667765a8324413
url: "https://pub.dev"
source: hosted
version: "7.0.2"
version: "8.0.0"
graphs:
dependency: transitive
description:
@@ -1321,10 +1289,10 @@ packages:
dependency: transitive
description:
name: hooks
sha256: "5410b9f4f6c9f01e8ff0eb81c9801ea13a3c3d39f8f0b1613cda08e27eab3c18"
sha256: "5d309c86e7ce34cd8e37aa71cb30cb652d3829b900ab145e4d9da564b31d59f7"
url: "https://pub.dev"
source: hosted
version: "0.20.5"
version: "1.0.0"
hooks_riverpod:
dependency: "direct main"
description:
@@ -1433,10 +1401,10 @@ packages:
dependency: "direct main"
description:
name: image_picker_android
sha256: "5e9bf126c37c117cf8094215373c6d561117a3cfb50ebc5add1a61dc6e224677"
sha256: "518a16108529fc18657a3e6dde4a043dc465d16596d20ab2abd49a4cac2e703d"
url: "https://pub.dev"
source: hosted
version: "0.8.13+10"
version: "0.8.13+13"
image_picker_for_web:
dependency: transitive
description:
@@ -1449,10 +1417,10 @@ packages:
dependency: transitive
description:
name: image_picker_ios
sha256: "956c16a42c0c708f914021666ffcd8265dde36e673c9fa68c81f7d085d9774ad"
sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588
url: "https://pub.dev"
source: hosted
version: "0.8.13+3"
version: "0.8.13+6"
image_picker_linux:
dependency: transitive
description:
@@ -1625,10 +1593,10 @@ packages:
dependency: transitive
description:
name: lints
sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0
sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df"
url: "https://pub.dev"
source: hosted
version: "6.0.0"
version: "6.1.0"
livekit_client:
dependency: "direct main"
description:
@@ -1737,10 +1705,10 @@ packages:
dependency: "direct main"
description:
name: material_symbols_icons
sha256: "02555a48e1ec02b16e532dfd4ef13c4f6bf7ec7c20230e58e56641a393433dc3"
sha256: c62b15f2b3de98d72cbff0148812f5ef5159f05e61fc9f9a089ec2bb234df082
url: "https://pub.dev"
source: hosted
version: "4.2892.0"
version: "4.2906.0"
media_kit:
dependency: "direct main"
description:
@@ -1861,30 +1829,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.0"
msix:
dependency: "direct dev"
description:
name: msix
sha256: f88033fcb9e0dd8de5b18897cbebbd28ea30596810f4a7c86b12b0c03ace87e5
url: "https://pub.dev"
source: hosted
version: "3.16.12"
native_exif:
dependency: "direct main"
description:
name: native_exif
sha256: "0d37444c1ed00cbcada69b7510aba1d505fed75d3b6ef3ea3c8c2c970040e4f1"
sha256: "044276caf22c14695f97833b3e9cec941a7bf2403f422749436797381fceb857"
url: "https://pub.dev"
source: hosted
version: "0.6.2"
version: "0.7.0"
native_toolchain_c:
dependency: transitive
description:
name: native_toolchain_c
sha256: f8872ea6c7a50ce08db9ae280ca2b8efdd973157ce462826c82f3c3051d154ce
sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac"
url: "https://pub.dev"
source: hosted
version: "0.17.2"
version: "0.17.4"
nested:
dependency: transitive
description:
@@ -1913,10 +1873,10 @@ packages:
dependency: transitive
description:
name: objective_c
sha256: "55eb67ede1002d9771b3f9264d2c9d30bc364f0267bc1c6cc0883280d5f0c7cb"
sha256: "983c7fa1501f6dcc0cb7af4e42072e9993cb28d73604d25ebf4dab08165d997e"
url: "https://pub.dev"
source: hosted
version: "9.2.2"
version: "9.2.5"
octo_image:
dependency: transitive
description:
@@ -2338,58 +2298,58 @@ packages:
dependency: "direct main"
description:
name: record
sha256: "6bad72fb3ea6708d724cf8b6c97c4e236cf9f43a52259b654efeb6fd9b737f1f"
sha256: d5b6b334f3ab02460db6544e08583c942dbf23e3504bf1e14fd4cbe3d9409277
url: "https://pub.dev"
source: hosted
version: "6.1.2"
version: "6.2.0"
record_android:
dependency: transitive
description:
name: record_android
sha256: "9aaf3f151e61399b09bd7c31eb5f78253d2962b3f57af019ac5a2d1a3afdcf71"
sha256: "3bb3c6abbcb5fc1e86719fc6f0acdee89dfe8078543b92caad11854c487e435a"
url: "https://pub.dev"
source: hosted
version: "1.4.5"
version: "1.5.0"
record_ios:
dependency: transitive
description:
name: record_ios
sha256: "69fcd37c6185834e90254573599a9165db18a2cbfa266b6d1e46ffffeb06a28c"
sha256: "8df7c136131bd05efc19256af29b2ba6ccc000ccc2c80d4b6b6d7a8d21a3b5a9"
url: "https://pub.dev"
source: hosted
version: "1.1.5"
version: "1.2.0"
record_linux:
dependency: transitive
description:
name: record_linux
sha256: "235b1f1fb84e810f8149cc0c2c731d7d697f8d1c333b32cb820c449bf7bb72d8"
sha256: c31a35cc158cd666fc6395f7f56fc054f31685571684be6b97670a27649ce5c7
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.3.0"
record_macos:
dependency: transitive
description:
name: record_macos
sha256: "842ea4b7e95f4dd237aacffc686d1b0ff4277e3e5357865f8d28cd28bc18ed95"
sha256: f04d1547ff61ae54b4154e9726f656a17ad993f1a90f8f44bc40de94bafa072f
url: "https://pub.dev"
source: hosted
version: "1.1.2"
version: "1.2.0"
record_platform_interface:
dependency: transitive
description:
name: record_platform_interface
sha256: b0065fdf1ec28f5a634d676724d388a77e43ce7646fb049949f58c69f3fcb4ed
sha256: "8a81dbc4e14e1272a285bbfef6c9136d070a47d9b0d1f40aa6193516253ee2f6"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
version: "1.5.0"
record_web:
dependency: transitive
description:
name: record_web
sha256: "3feeffbc0913af3021da9810bb8702a068db6bc9da52dde1d19b6ee7cb9edb51"
sha256: "7e9846981c1f2d111d86f0ae3309071f5bba8b624d1c977316706f08fc31d16d"
url: "https://pub.dev"
source: hosted
version: "1.2.2"
version: "1.3.0"
record_windows:
dependency: transitive
description:
@@ -2458,10 +2418,10 @@ packages:
dependency: transitive
description:
name: safe_local_storage
sha256: e9a21b6fec7a8aa62cc2585ff4c1b127df42f3185adbd2aca66b47abe2e80236
sha256: "287ea1f667c0b93cdc127dccc707158e2d81ee59fba0459c31a0c7da4d09c755"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
version: "2.0.3"
screen_retriever:
dependency: transitive
description:
@@ -2586,10 +2546,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
sha256: "83af5c682796c0f7719c2bbf74792d113e40ae97981b8f266fa84574573556bc"
sha256: cbc40be9be1c5af4dab4d6e0de4d5d3729e6f3d65b89d21e1815d57705644a6f
url: "https://pub.dev"
source: hosted
version: "2.4.18"
version: "2.4.20"
shared_preferences_foundation:
dependency: transitive
description:
@@ -2735,10 +2695,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: "585bc140f20da42c584ece2df28f4d9ef2566955332b626f655957b3a8c8ad54"
sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17"
url: "https://pub.dev"
source: hosted
version: "4.1.2"
version: "4.2.0"
source_helper:
dependency: transitive
description:
@@ -3007,42 +2967,42 @@ packages:
dependency: "direct main"
description:
name: talker
sha256: c300f9ea5f5433b2db03b6ff61224f25e024ad94b0b6ed996f61686118ae68ec
sha256: "4160d27f4da6d87f016212bbe6abfb15c8954b72726a0f154d72f77664c48b8c"
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.13"
talker_dio_logger:
dependency: "direct main"
description:
name: talker_dio_logger
sha256: a55fe723f3d6f34ecc7ec589b6d66dd6cf9465bd70ea2243573926c994b01255
sha256: c5769f4b1ee6fcc1a0670cdfc7f3253016a1090b583aeb70e3ccd73f479970a8
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.13"
talker_flutter:
dependency: "direct main"
description:
name: talker_flutter
sha256: "5010a5309c8ff2910407634d38415576a52e689bd631378d0882db5d2e129a31"
sha256: "6a807972565dc7d5bacfb6a980efa0f766bfdbacac5660adf150aa386c440052"
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.13"
talker_logger:
dependency: "direct main"
description:
name: talker_logger
sha256: "6ae95df093f1eabd2827b2e2d72c96ca881acb47dd19456beb1b1e589304916e"
sha256: ed5f8434f17f3988548abc5f617b88e7a5d2d61d7a975e7c12eee75755848aa8
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.13"
talker_riverpod_logger:
dependency: "direct main"
description:
name: talker_riverpod_logger
sha256: "60ffe027b45a7fde3bc77af63e111ae0eae4c77dde1f0700aa564b43866f7036"
sha256: "1594134fc35a74aedad03b49408d8fc0cd1e9d64bf0868ddcc58895eb3278726"
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.13"
term_glyph:
dependency: transitive
description:
@@ -3239,10 +3199,10 @@ packages:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc
sha256: "201e876b5d52753626af64b6359cd13ac6011b80728731428fd34bc840f71c9b"
url: "https://pub.dev"
source: hosted
version: "1.1.19"
version: "1.1.20"
vector_math:
dependency: transitive
description:
@@ -3343,10 +3303,10 @@ packages:
dependency: transitive
description:
name: webrtc_interface
sha256: "2e604a31703ad26781782fb14fa8a4ee621154ee2c513d2b9938e486fa695233"
sha256: ad0e5786b2acd3be72a3219ef1dde9e1cac071cf4604c685f11b61d63cdd6eb3
url: "https://pub.dev"
source: hosted
version: "1.3.0"
version: "1.4.0"
win32:
dependency: "direct main"
description:

View File

@@ -19,7 +19,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
version: 3.5.0+164
environment:
sdk: ^3.8.0
sdk: ">3.10.0"
# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
@@ -44,7 +44,7 @@ dependencies:
shared_preferences: ^2.5.4
flutter_riverpod: ^3.1.0
path_provider: ^2.1.5
dio: ^5.9.0
dio: ^5.9.1
freezed_annotation: ^3.1.0
json_annotation: ^4.9.0
flutter_markdown_latex: ^0.3.4
@@ -52,7 +52,7 @@ dependencies:
flutter_highlight: ^0.7.0
uuid: ^4.5.2
url_launcher: ^6.3.2
google_fonts: ^7.0.2
google_fonts: ^8.0.0
gap: ^3.0.1
cached_network_image: ^3.4.1
web: ^1.1.1
@@ -68,19 +68,19 @@ dependencies:
package_info_plus: ^9.0.0
device_info_plus: ^11.3.0
protocol_handler: ^0.2.0
cross_file: ^0.3.5+1
cross_file: ^0.3.5+2
image_picker: ^1.2.1
file_picker: ^10.3.8
file_picker: ^10.3.10
riverpod_annotation: ^4.0.0
image_picker_platform_interface: ^2.11.1
image_picker_android: ^0.8.13+10
image_picker_android: ^0.8.13+13
super_context_menu: ^0.9.1
modal_bottom_sheet: ^3.0.0
firebase_messaging: ^16.1.0
firebase_messaging: ^16.1.1
flutter_udid: ^4.1.1
firebase_core: ^4.3.0
firebase_core: ^4.4.0
web_socket_channel: ^3.0.3
material_symbols_icons: ^4.2892.0
material_symbols_icons: ^4.2906.0
drift: ^2.30.1
drift_flutter: ^0.2.8
path: ^1.9.1
@@ -103,7 +103,7 @@ dependencies:
pasteboard: ^0.4.0
flutter_colorpicker: ^1.1.0
image: ^4.7.2
record: ^6.1.2
record: ^6.2.0
qr_flutter: ^4.1.0
flutter_otp_text_field: ^1.5.1+1
flutter_staggered_grid_view: ^0.7.0
@@ -113,7 +113,7 @@ dependencies:
fl_chart: ^1.1.1
sign_in_with_apple: ^7.0.1
flutter_svg: ^2.2.3
native_exif: ^0.6.2
native_exif: ^0.7.0
local_auth: ^3.0.0
flutter_secure_storage: ^10.0.0
flutter_math_fork: ^0.7.4
@@ -131,15 +131,15 @@ dependencies:
flutter_app_update: ^3.2.2
archive: ^4.0.7
process_run: ^1.2.4
firebase_crashlytics: ^5.0.6
firebase_analytics: ^12.1.0
firebase_crashlytics: ^5.0.7
firebase_analytics: ^12.1.1
material_color_utilities: ^0.11.1
screenshot: ^3.0.0
flutter_card_swiper: ^7.2.0
file_saver: ^0.3.1
tray_manager: ^0.5.2
flutter_webrtc: ^1.2.1
flutter_local_notifications: ^19.5.0
flutter_local_notifications: ^20.0.0
wakelock_plus: ^1.4.0
slide_countdown: ^2.0.2
shelf: ^1.4.2
@@ -150,11 +150,11 @@ dependencies:
dart_ipc: ^1.0.1
pretty_diff_text: ^2.1.0
window_manager: ^0.5.1
talker: ^5.1.11
talker_flutter: ^5.1.11
talker_logger: ^5.1.11
talker_dio_logger: ^5.1.11
talker_riverpod_logger: ^5.1.11
talker: ^5.1.13
talker_flutter: ^5.1.13
talker_logger: ^5.1.13
talker_dio_logger: ^5.1.13
talker_riverpod_logger: ^5.1.13
syncfusion_flutter_pdfviewer: ^31.1.21
swipe_to: ^1.0.6
dio_smart_retry: ^7.0.1
@@ -174,7 +174,6 @@ dependencies:
video_thumbnail: ^0.5.6
just_audio: ^0.10.5
audio_session: ^0.2.2
dart_midi_pro: ^1.0.4+2
dev_dependencies:
flutter_test:
@@ -194,7 +193,6 @@ dev_dependencies:
riverpod_lint: ^3.1.0
drift_dev: ^2.30.1
flutter_launcher_icons: ^0.14.4
msix: ^3.16.12
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
@@ -208,7 +206,6 @@ flutter:
# To add assets to your application, add an assets section, like this:
assets:
- assets/midi/
- assets/i18n/
- assets/images/
- assets/images/oidc/
@@ -267,13 +264,3 @@ flutter_native_splash:
image_dark: "assets/icons/icon-dark.png"
color: "#ffffff"
color_dark: "#121212"
msix_config:
display_name: Solian
publisher_display_name: Solsynth LLC
identity_name: dev.solian.app
msix_version: 3.2.0.0
logo_path: .\assets\icons\icon.png
protocol_activation: solian, https
app_uri_handler_hosts: solian.app
capabilities: internetClientServer, location, microphone, webcam