Compare commits

...

13 Commits

Author SHA1 Message Date
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
17 changed files with 2311 additions and 2425 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

@@ -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

@@ -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

@@ -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

@@ -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:
@@ -277,10 +277,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 +313,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:
@@ -417,14 +409,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:
@@ -677,34 +661,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 +701,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:
@@ -1253,14 +1237,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 +1257,10 @@ packages:
dependency: "direct main"
description:
name: google_fonts
sha256: ca1cc501704c47e478f69a667d7f2d882755ddf7baad3f60c3b1256594467022
sha256: "6996212014b996eaa17074e02b1b925b212f5e053832d9048970dc27255a8fb3"
url: "https://pub.dev"
source: hosted
version: "7.0.2"
version: "7.1.0"
graphs:
dependency: transitive
description:
@@ -1321,10 +1297,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 +1409,10 @@ packages:
dependency: "direct main"
description:
name: image_picker_android
sha256: "5e9bf126c37c117cf8094215373c6d561117a3cfb50ebc5add1a61dc6e224677"
sha256: "539e0030d442ce11d168896d979e04e66e28ef819eadc59aeb62b9d374a139d7"
url: "https://pub.dev"
source: hosted
version: "0.8.13+10"
version: "0.8.13+11"
image_picker_for_web:
dependency: transitive
description:
@@ -1861,14 +1837,6 @@ 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:
@@ -1881,10 +1849,10 @@ packages:
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 +1881,10 @@ packages:
dependency: transitive
description:
name: objective_c
sha256: "55eb67ede1002d9771b3f9264d2c9d30bc364f0267bc1c6cc0883280d5f0c7cb"
sha256: "9922a1ad59ac5afb154cc948aa6ded01987a75003651d0a2866afc23f4da624e"
url: "https://pub.dev"
source: hosted
version: "9.2.2"
version: "9.2.3"
octo_image:
dependency: transitive
description:
@@ -2735,10 +2703,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 +2975,42 @@ packages:
dependency: "direct main"
description:
name: talker
sha256: c300f9ea5f5433b2db03b6ff61224f25e024ad94b0b6ed996f61686118ae68ec
sha256: a9a76f677905bc5cf62ace21a6eea49303cf06ac187bcad52b2004f0b9623fd7
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.12"
talker_dio_logger:
dependency: "direct main"
description:
name: talker_dio_logger
sha256: a55fe723f3d6f34ecc7ec589b6d66dd6cf9465bd70ea2243573926c994b01255
sha256: "51b0ca82c842abb787fd48d409e4e0299dca1cda010c17b42db74c8a81389b59"
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.12"
talker_flutter:
dependency: "direct main"
description:
name: talker_flutter
sha256: "5010a5309c8ff2910407634d38415576a52e689bd631378d0882db5d2e129a31"
sha256: "93a287fd7f5a898de6b4b02a5def9acd1cda73ff3f2aa9873877a0cefa943281"
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.12"
talker_logger:
dependency: "direct main"
description:
name: talker_logger
sha256: "6ae95df093f1eabd2827b2e2d72c96ca881acb47dd19456beb1b1e589304916e"
sha256: da3d91c36bad10838cba5123b6bdf7d4310411f8f7500539ce364deda3550ac6
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.12"
talker_riverpod_logger:
dependency: "direct main"
description:
name: talker_riverpod_logger
sha256: "60ffe027b45a7fde3bc77af63e111ae0eae4c77dde1f0700aa564b43866f7036"
sha256: dc20d93765a405f6c5f7a00ac4f890843b8996b9921e3f4c5d04654c0234ae12
url: "https://pub.dev"
source: hosted
version: "5.1.11"
version: "5.1.12"
term_glyph:
dependency: transitive
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
@@ -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: ^7.1.0
gap: ^3.0.1
cached_network_image: ^3.4.1
web: ^1.1.1
@@ -73,12 +73,12 @@ dependencies:
file_picker: ^10.3.8
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+11
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
drift: ^2.30.1
@@ -131,8 +131,8 @@ 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
@@ -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.12
talker_flutter: ^5.1.12
talker_logger: ^5.1.12
talker_dio_logger: ^5.1.12
talker_riverpod_logger: ^5.1.12
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