Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c77a4d5be | ||
|
|
f9061a3dc6 | ||
|
|
e12a26d5c0 | ||
|
|
6b31d28cd3 | ||
|
bff301fdb3
|
|||
|
|
2049ee4401 | ||
|
18c071826f
|
|||
|
5bfc301088
|
|||
|
a39853ba5a
|
|||
|
639417e952
|
|||
|
|
9de4def4d4 | ||
|
fa0051b606
|
|||
|
9d867fd888
|
BIN
assets/audio/alert.reversed.wav
Normal file
BIN
assets/audio/alert.reversed.wav
Normal file
Binary file not shown.
BIN
assets/audio/alert.wav
Normal file
BIN
assets/audio/alert.wav
Normal file
Binary file not shown.
Binary file not shown.
BIN
assets/audio/messages.wav
Normal file
BIN
assets/audio/messages.wav
Normal file
Binary file not shown.
Binary file not shown.
BIN
assets/audio/notification.wav
Normal file
BIN
assets/audio/notification.wav
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -188,7 +188,7 @@ void main() async {
|
|||||||
|
|
||||||
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
|
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
|
||||||
FlutterNativeSplash.remove();
|
FlutterNativeSplash.remove();
|
||||||
talker.info("[SplashScreen] Now hiding the splash screen...");
|
talker.info("[SplashScreen] Now hiding splash screen...");
|
||||||
}
|
}
|
||||||
|
|
||||||
runApp(
|
runApp(
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
import 'dart:math' as math;
|
|
||||||
|
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:just_audio/just_audio.dart';
|
import 'package:just_audio/just_audio.dart';
|
||||||
import 'package:island/pods/config.dart';
|
import 'package:island/pods/config.dart';
|
||||||
import 'package:audio_session/audio_session.dart';
|
import 'package:audio_session/audio_session.dart';
|
||||||
import 'package:dart_midi_pro/dart_midi_pro.dart';
|
|
||||||
|
|
||||||
final sfxPlayerProvider = Provider<AudioPlayer>((ref) {
|
final sfxPlayerProvider = Provider<AudioPlayer>((ref) {
|
||||||
final player = AudioPlayer();
|
final player = AudioPlayer();
|
||||||
@@ -35,7 +31,7 @@ final notificationSfxProvider = FutureProvider<void>((ref) async {
|
|||||||
final player = ref.watch(sfxPlayerProvider);
|
final player = ref.watch(sfxPlayerProvider);
|
||||||
await player.setVolume(0.75);
|
await player.setVolume(0.75);
|
||||||
await player.setAudioSource(
|
await player.setAudioSource(
|
||||||
AudioSource.asset('assets/audio/notification.mp3'),
|
AudioSource.asset('assets/audio/notification.wav'),
|
||||||
preload: true,
|
preload: true,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -43,7 +39,7 @@ final notificationSfxProvider = FutureProvider<void>((ref) async {
|
|||||||
final messageSfxProvider = FutureProvider<void>((ref) async {
|
final messageSfxProvider = FutureProvider<void>((ref) async {
|
||||||
final player = ref.watch(sfxPlayerProvider);
|
final player = ref.watch(sfxPlayerProvider);
|
||||||
await player.setAudioSource(
|
await player.setAudioSource(
|
||||||
AudioSource.asset('assets/audio/messages.mp3'),
|
AudioSource.asset('assets/audio/messages.wav'),
|
||||||
preload: true,
|
preload: true,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -67,110 +63,3 @@ void playMessageSfx(WidgetRef ref) {
|
|||||||
if (!settings.soundEffects) return;
|
if (!settings.soundEffects) return;
|
||||||
_playSfx('assets/audio/messages.mp3', 0.75);
|
_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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -85,7 +85,7 @@ final class AppSettingsNotifierProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
String _$appSettingsNotifierHash() =>
|
String _$appSettingsNotifierHash() =>
|
||||||
r'0a7f75bd95850b0c564b29c57912ec8fcac53f09';
|
r'fc474771ced89ec8637c0f773a9c6bc392f0df60';
|
||||||
|
|
||||||
abstract class _$AppSettingsNotifier extends $Notifier<AppSettings> {
|
abstract class _$AppSettingsNotifier extends $Notifier<AppSettings> {
|
||||||
AppSettings build();
|
AppSettings build();
|
||||||
|
|||||||
@@ -261,11 +261,11 @@ class FileListScreen extends HookConsumerWidget {
|
|||||||
context: context,
|
context: context,
|
||||||
isScrollControlled: true,
|
isScrollControlled: true,
|
||||||
builder: (context) => SheetScaffold(
|
builder: (context) => SheetScaffold(
|
||||||
|
titleText: 'Usage Overview',
|
||||||
child: UsageOverviewWidget(
|
child: UsageOverviewWidget(
|
||||||
usage: usage,
|
usage: usage,
|
||||||
quota: quota,
|
quota: quota,
|
||||||
).padding(horizontal: 8, vertical: 16),
|
).padding(horizontal: 8, vertical: 16),
|
||||||
titleText: 'Usage Overview',
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,10 @@ import 'package:gap/gap.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/main.dart';
|
import 'package:island/main.dart';
|
||||||
import 'package:island/models/account.dart';
|
import 'package:island/models/account.dart';
|
||||||
|
import 'package:island/pods/config.dart';
|
||||||
import 'package:island/pods/notification.dart';
|
import 'package:island/pods/notification.dart';
|
||||||
import 'package:island/talker.dart';
|
import 'package:island/talker.dart';
|
||||||
|
import 'package:just_audio/just_audio.dart';
|
||||||
import 'package:material_symbols_icons/symbols.dart';
|
import 'package:material_symbols_icons/symbols.dart';
|
||||||
import 'package:styled_widget/styled_widget.dart';
|
import 'package:styled_widget/styled_widget.dart';
|
||||||
import 'package:top_snackbar_flutter/top_snack_bar.dart';
|
import 'package:top_snackbar_flutter/top_snack_bar.dart';
|
||||||
@@ -241,7 +243,22 @@ bool closeTopmostOverlayDialog() {
|
|||||||
|
|
||||||
const kDialogMaxWidth = 480.0;
|
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}) {
|
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) {
|
if (err is Error) {
|
||||||
talker.error('Something went wrong...', err, err.stackTrace);
|
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}) {
|
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>(
|
showOverlayDialog<void>(
|
||||||
builder: (context, close) => ConstrainedBox(
|
builder: (context, close) => ConstrainedBox(
|
||||||
constraints: const BoxConstraints(maxWidth: kDialogMaxWidth),
|
constraints: const BoxConstraints(maxWidth: kDialogMaxWidth),
|
||||||
@@ -333,6 +357,13 @@ Future<bool> showConfirmAlert(
|
|||||||
IconData? icon,
|
IconData? icon,
|
||||||
bool isDanger = false,
|
bool isDanger = false,
|
||||||
}) async {
|
}) 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>(
|
final result = await showOverlayDialog<bool>(
|
||||||
builder: (context, close) => ConstrainedBox(
|
builder: (context, close) => ConstrainedBox(
|
||||||
constraints: const BoxConstraints(maxWidth: kDialogMaxWidth),
|
constraints: const BoxConstraints(maxWidth: kDialogMaxWidth),
|
||||||
@@ -422,3 +453,4 @@ Future<void> openExternalLink(Uri url, WidgetRef ref) async {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||||
import 'package:gap/gap.dart';
|
import 'package:gap/gap.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/pods/audio.dart';
|
|
||||||
import 'package:island/pods/message.dart';
|
import 'package:island/pods/message.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:island/services/update_service.dart';
|
import 'package:island/services/update_service.dart';
|
||||||
@@ -23,7 +22,7 @@ Future<void> _showSetTokenDialog(BuildContext context, WidgetRef ref) async {
|
|||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Set Access Token'),
|
title: const Text('Set access token'),
|
||||||
content: TextField(
|
content: TextField(
|
||||||
controller: controller,
|
controller: controller,
|
||||||
decoration: const InputDecoration(
|
decoration: const InputDecoration(
|
||||||
@@ -131,17 +130,26 @@ class DebugSheet extends HookConsumerWidget {
|
|||||||
const Divider(height: 8),
|
const Divider(height: 8),
|
||||||
ListTile(
|
ListTile(
|
||||||
minTileHeight: 48,
|
minTileHeight: 48,
|
||||||
leading: const Icon(Symbols.play_arrow),
|
leading: const Icon(Symbols.error),
|
||||||
trailing: const Icon(Symbols.chevron_right),
|
trailing: const Icon(Symbols.chevron_right),
|
||||||
contentPadding: EdgeInsets.symmetric(horizontal: 24),
|
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
|
||||||
title: Text('Play untitled'),
|
title: const Text('Test error alert'),
|
||||||
onTap: () async {
|
onTap: () {
|
||||||
final synth = MiniSampleSynth(
|
showErrorAlert(
|
||||||
sampleAsset: 'assets/audio/messages.mp3',
|
'This is a test error message for debugging purposes.',
|
||||||
baseNote: 60,
|
|
||||||
);
|
);
|
||||||
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',
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -102,16 +102,16 @@ class FileListView extends HookConsumerWidget {
|
|||||||
useEffect(() {
|
useEffect(() {
|
||||||
// Sync query, order, and orderDesc filters
|
// Sync query, order, and orderDesc filters
|
||||||
if (mode.value == FileListMode.unindexed) {
|
if (mode.value == FileListMode.unindexed) {
|
||||||
unindexedNotifier.setQuery(this.query.value);
|
unindexedNotifier.setQuery(query.value);
|
||||||
unindexedNotifier.setOrder(order.value);
|
unindexedNotifier.setOrder(order.value);
|
||||||
unindexedNotifier.setOrderDesc(orderDesc.value);
|
unindexedNotifier.setOrderDesc(orderDesc.value);
|
||||||
} else {
|
} else {
|
||||||
cloudNotifier.setQuery(this.query.value);
|
cloudNotifier.setQuery(query.value);
|
||||||
cloudNotifier.setOrder(order.value);
|
cloudNotifier.setOrder(order.value);
|
||||||
cloudNotifier.setOrderDesc(orderDesc.value);
|
cloudNotifier.setOrderDesc(orderDesc.value);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}, [this.query.value, order.value, orderDesc.value, mode.value]);
|
}, [query.value, order.value, orderDesc.value, mode.value]);
|
||||||
|
|
||||||
final isRefreshing = ref.watch(
|
final isRefreshing = ref.watch(
|
||||||
mode.value == FileListMode.normal
|
mode.value == FileListMode.normal
|
||||||
|
|||||||
124
pubspec.lock
124
pubspec.lock
@@ -13,10 +13,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: _flutterfire_internals
|
name: _flutterfire_internals
|
||||||
sha256: e4a1b612fd2955908e26116075b3a4baf10c353418ca645b4deae231c82bf144
|
sha256: cd83f7d6bd4e4c0b0b4fef802e8796784032e1cc23d7b0e982cf5d05d9bbe182
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.65"
|
version: "1.3.66"
|
||||||
adaptive_number:
|
adaptive_number:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -277,10 +277,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: code_assets
|
name: code_assets
|
||||||
sha256: ae0db647e668cbb295a3527f0938e4039e004c80099dce2f964102373f5ce0b5
|
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.19.10"
|
version: "1.0.0"
|
||||||
code_builder:
|
code_builder:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -313,14 +313,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.1"
|
||||||
console:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: console
|
|
||||||
sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "4.1.0"
|
|
||||||
convert:
|
convert:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -417,14 +409,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.1"
|
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:
|
dart_style:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -677,34 +661,34 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_analytics
|
name: firebase_analytics
|
||||||
sha256: "8ca4832c7a6d145ce987fd07d6dfbb8c91d9058178342f20de6305fb77b1b40d"
|
sha256: "91e2739bad690da2826c0cd5b28328fd15fb87adf54634cded703f34fd797a81"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "12.1.0"
|
version: "12.1.1"
|
||||||
firebase_analytics_platform_interface:
|
firebase_analytics_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_analytics_platform_interface
|
name: firebase_analytics_platform_interface
|
||||||
sha256: d00234716f415f89eb5c2cefb1238d7fd2f3120275d71414b84ae434dcdb7a19
|
sha256: "62fd3f27f342c898bd819fb97fa87c0b971e9fbe03357477282c0e14e1a40c3c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.5"
|
version: "5.0.6"
|
||||||
firebase_analytics_web:
|
firebase_analytics_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_analytics_web
|
name: firebase_analytics_web
|
||||||
sha256: e42b294e51aedb4bd4b761a886c8d6b473c44b44aa4c0b47cab06b2c66ac3fba
|
sha256: "8fc488bb008439fc3b850cfac892dec1ff4cd438eee44438919a14c5e61b9828"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.1+1"
|
version: "0.6.1+2"
|
||||||
firebase_core:
|
firebase_core:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_core
|
name: firebase_core
|
||||||
sha256: "29cfa93c771d8105484acac340b5ea0835be371672c91405a300303986f4eba9"
|
sha256: "923085c881663ef685269b013e241b428e1fb03cdd0ebde265d9b40ff18abf80"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.3.0"
|
version: "4.4.0"
|
||||||
firebase_core_platform_interface:
|
firebase_core_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -717,50 +701,50 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_core_web
|
name: firebase_core_web
|
||||||
sha256: a631bbfbfa26963d68046aed949df80b228964020e9155b086eff94f462bbf1f
|
sha256: "83e7356c704131ca4d8d8dd57e360d8acecbca38b1a3705c7ae46cc34c708084"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.1"
|
version: "3.4.0"
|
||||||
firebase_crashlytics:
|
firebase_crashlytics:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_crashlytics
|
name: firebase_crashlytics
|
||||||
sha256: "8d52022ee6fdd224e92c042f297d1fd0ec277195c49f39fa61b8cc500a639f00"
|
sha256: a6e6cb8b2ea1214533a54e4c1b11b19c40f6a29333f3ab0854a479fdc3237c5b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.6"
|
version: "5.0.7"
|
||||||
firebase_crashlytics_platform_interface:
|
firebase_crashlytics_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_crashlytics_platform_interface
|
name: firebase_crashlytics_platform_interface
|
||||||
sha256: "97c6a97b35e3d3dafe38fb053a65086a1efb125022d292161405848527cc25a4"
|
sha256: fc6837c4c64c48fa94cab8a872a632b9194fa9208ca76a822f424b3da945584d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.8.16"
|
version: "3.8.17"
|
||||||
firebase_messaging:
|
firebase_messaging:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging
|
name: firebase_messaging
|
||||||
sha256: "1ad663fbb6758acec09d7e84a2e6478265f0a517f40ef77c573efd5e0089f400"
|
sha256: "06fad40ea14771e969a8f2bbce1944aa20ee2f4f57f4eca5b3ba346b65f3f644"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "16.1.0"
|
version: "16.1.1"
|
||||||
firebase_messaging_platform_interface:
|
firebase_messaging_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging_platform_interface
|
name: firebase_messaging_platform_interface
|
||||||
sha256: ea620e841fbcec62a96984295fc628f53ef5a8da4f53238159719ed0af7db834
|
sha256: "6c49e901c77e6e10e86d98e32056a087eb1ca1b93acdf58524f1961e617657b7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.7.5"
|
version: "4.7.6"
|
||||||
firebase_messaging_web:
|
firebase_messaging_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging_web
|
name: firebase_messaging_web
|
||||||
sha256: "7d0fb6256202515bba8489a3d69c6bc9d52d69a4999bad789053b486c8e7323e"
|
sha256: "2756f8fea583ffb9d294d15ddecb3a9ad429b023b70c9990c151fc92c54a32b3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.1"
|
version: "4.1.2"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1253,14 +1237,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
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:
|
glob:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1281,10 +1257,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: google_fonts
|
name: google_fonts
|
||||||
sha256: ca1cc501704c47e478f69a667d7f2d882755ddf7baad3f60c3b1256594467022
|
sha256: "6996212014b996eaa17074e02b1b925b212f5e053832d9048970dc27255a8fb3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.0.2"
|
version: "7.1.0"
|
||||||
graphs:
|
graphs:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1321,10 +1297,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: hooks
|
name: hooks
|
||||||
sha256: "5410b9f4f6c9f01e8ff0eb81c9801ea13a3c3d39f8f0b1613cda08e27eab3c18"
|
sha256: "5d309c86e7ce34cd8e37aa71cb30cb652d3829b900ab145e4d9da564b31d59f7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.20.5"
|
version: "1.0.0"
|
||||||
hooks_riverpod:
|
hooks_riverpod:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -1433,10 +1409,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: image_picker_android
|
name: image_picker_android
|
||||||
sha256: "5e9bf126c37c117cf8094215373c6d561117a3cfb50ebc5add1a61dc6e224677"
|
sha256: "539e0030d442ce11d168896d979e04e66e28ef819eadc59aeb62b9d374a139d7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.13+10"
|
version: "0.8.13+11"
|
||||||
image_picker_for_web:
|
image_picker_for_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1861,14 +1837,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
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:
|
native_exif:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -1881,10 +1849,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: native_toolchain_c
|
name: native_toolchain_c
|
||||||
sha256: f8872ea6c7a50ce08db9ae280ca2b8efdd973157ce462826c82f3c3051d154ce
|
sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.17.2"
|
version: "0.17.4"
|
||||||
nested:
|
nested:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1913,10 +1881,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: objective_c
|
name: objective_c
|
||||||
sha256: "55eb67ede1002d9771b3f9264d2c9d30bc364f0267bc1c6cc0883280d5f0c7cb"
|
sha256: "9922a1ad59ac5afb154cc948aa6ded01987a75003651d0a2866afc23f4da624e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.2.2"
|
version: "9.2.3"
|
||||||
octo_image:
|
octo_image:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -2735,10 +2703,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: source_gen
|
name: source_gen
|
||||||
sha256: "585bc140f20da42c584ece2df28f4d9ef2566955332b626f655957b3a8c8ad54"
|
sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.2"
|
version: "4.2.0"
|
||||||
source_helper:
|
source_helper:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -3007,42 +2975,42 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: talker
|
name: talker
|
||||||
sha256: c300f9ea5f5433b2db03b6ff61224f25e024ad94b0b6ed996f61686118ae68ec
|
sha256: a9a76f677905bc5cf62ace21a6eea49303cf06ac187bcad52b2004f0b9623fd7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.11"
|
version: "5.1.12"
|
||||||
talker_dio_logger:
|
talker_dio_logger:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: talker_dio_logger
|
name: talker_dio_logger
|
||||||
sha256: a55fe723f3d6f34ecc7ec589b6d66dd6cf9465bd70ea2243573926c994b01255
|
sha256: "51b0ca82c842abb787fd48d409e4e0299dca1cda010c17b42db74c8a81389b59"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.11"
|
version: "5.1.12"
|
||||||
talker_flutter:
|
talker_flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: talker_flutter
|
name: talker_flutter
|
||||||
sha256: "5010a5309c8ff2910407634d38415576a52e689bd631378d0882db5d2e129a31"
|
sha256: "93a287fd7f5a898de6b4b02a5def9acd1cda73ff3f2aa9873877a0cefa943281"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.11"
|
version: "5.1.12"
|
||||||
talker_logger:
|
talker_logger:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: talker_logger
|
name: talker_logger
|
||||||
sha256: "6ae95df093f1eabd2827b2e2d72c96ca881acb47dd19456beb1b1e589304916e"
|
sha256: da3d91c36bad10838cba5123b6bdf7d4310411f8f7500539ce364deda3550ac6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.11"
|
version: "5.1.12"
|
||||||
talker_riverpod_logger:
|
talker_riverpod_logger:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: talker_riverpod_logger
|
name: talker_riverpod_logger
|
||||||
sha256: "60ffe027b45a7fde3bc77af63e111ae0eae4c77dde1f0700aa564b43866f7036"
|
sha256: dc20d93765a405f6c5f7a00ac4f890843b8996b9921e3f4c5d04654c0234ae12
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.11"
|
version: "5.1.12"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
37
pubspec.yaml
37
pubspec.yaml
@@ -19,7 +19,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
|||||||
version: 3.5.0+164
|
version: 3.5.0+164
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.8.0
|
sdk: ">3.10.0"
|
||||||
|
|
||||||
# Dependencies specify other packages that your package needs in order to work.
|
# Dependencies specify other packages that your package needs in order to work.
|
||||||
# To automatically upgrade your package dependencies to the latest versions
|
# To automatically upgrade your package dependencies to the latest versions
|
||||||
@@ -52,7 +52,7 @@ dependencies:
|
|||||||
flutter_highlight: ^0.7.0
|
flutter_highlight: ^0.7.0
|
||||||
uuid: ^4.5.2
|
uuid: ^4.5.2
|
||||||
url_launcher: ^6.3.2
|
url_launcher: ^6.3.2
|
||||||
google_fonts: ^7.0.2
|
google_fonts: ^7.1.0
|
||||||
gap: ^3.0.1
|
gap: ^3.0.1
|
||||||
cached_network_image: ^3.4.1
|
cached_network_image: ^3.4.1
|
||||||
web: ^1.1.1
|
web: ^1.1.1
|
||||||
@@ -73,12 +73,12 @@ dependencies:
|
|||||||
file_picker: ^10.3.8
|
file_picker: ^10.3.8
|
||||||
riverpod_annotation: ^4.0.0
|
riverpod_annotation: ^4.0.0
|
||||||
image_picker_platform_interface: ^2.11.1
|
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
|
super_context_menu: ^0.9.1
|
||||||
modal_bottom_sheet: ^3.0.0
|
modal_bottom_sheet: ^3.0.0
|
||||||
firebase_messaging: ^16.1.0
|
firebase_messaging: ^16.1.1
|
||||||
flutter_udid: ^4.1.1
|
flutter_udid: ^4.1.1
|
||||||
firebase_core: ^4.3.0
|
firebase_core: ^4.4.0
|
||||||
web_socket_channel: ^3.0.3
|
web_socket_channel: ^3.0.3
|
||||||
material_symbols_icons: ^4.2892.0
|
material_symbols_icons: ^4.2892.0
|
||||||
drift: ^2.30.1
|
drift: ^2.30.1
|
||||||
@@ -131,8 +131,8 @@ dependencies:
|
|||||||
flutter_app_update: ^3.2.2
|
flutter_app_update: ^3.2.2
|
||||||
archive: ^4.0.7
|
archive: ^4.0.7
|
||||||
process_run: ^1.2.4
|
process_run: ^1.2.4
|
||||||
firebase_crashlytics: ^5.0.6
|
firebase_crashlytics: ^5.0.7
|
||||||
firebase_analytics: ^12.1.0
|
firebase_analytics: ^12.1.1
|
||||||
material_color_utilities: ^0.11.1
|
material_color_utilities: ^0.11.1
|
||||||
screenshot: ^3.0.0
|
screenshot: ^3.0.0
|
||||||
flutter_card_swiper: ^7.2.0
|
flutter_card_swiper: ^7.2.0
|
||||||
@@ -150,11 +150,11 @@ dependencies:
|
|||||||
dart_ipc: ^1.0.1
|
dart_ipc: ^1.0.1
|
||||||
pretty_diff_text: ^2.1.0
|
pretty_diff_text: ^2.1.0
|
||||||
window_manager: ^0.5.1
|
window_manager: ^0.5.1
|
||||||
talker: ^5.1.11
|
talker: ^5.1.12
|
||||||
talker_flutter: ^5.1.11
|
talker_flutter: ^5.1.12
|
||||||
talker_logger: ^5.1.11
|
talker_logger: ^5.1.12
|
||||||
talker_dio_logger: ^5.1.11
|
talker_dio_logger: ^5.1.12
|
||||||
talker_riverpod_logger: ^5.1.11
|
talker_riverpod_logger: ^5.1.12
|
||||||
syncfusion_flutter_pdfviewer: ^31.1.21
|
syncfusion_flutter_pdfviewer: ^31.1.21
|
||||||
swipe_to: ^1.0.6
|
swipe_to: ^1.0.6
|
||||||
dio_smart_retry: ^7.0.1
|
dio_smart_retry: ^7.0.1
|
||||||
@@ -174,7 +174,6 @@ dependencies:
|
|||||||
video_thumbnail: ^0.5.6
|
video_thumbnail: ^0.5.6
|
||||||
just_audio: ^0.10.5
|
just_audio: ^0.10.5
|
||||||
audio_session: ^0.2.2
|
audio_session: ^0.2.2
|
||||||
dart_midi_pro: ^1.0.4+2
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
@@ -194,7 +193,6 @@ dev_dependencies:
|
|||||||
riverpod_lint: ^3.1.0
|
riverpod_lint: ^3.1.0
|
||||||
drift_dev: ^2.30.1
|
drift_dev: ^2.30.1
|
||||||
flutter_launcher_icons: ^0.14.4
|
flutter_launcher_icons: ^0.14.4
|
||||||
msix: ^3.16.12
|
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# 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:
|
# To add assets to your application, add an assets section, like this:
|
||||||
assets:
|
assets:
|
||||||
- assets/midi/
|
|
||||||
- assets/i18n/
|
- assets/i18n/
|
||||||
- assets/images/
|
- assets/images/
|
||||||
- assets/images/oidc/
|
- assets/images/oidc/
|
||||||
@@ -267,13 +264,3 @@ flutter_native_splash:
|
|||||||
image_dark: "assets/icons/icon-dark.png"
|
image_dark: "assets/icons/icon-dark.png"
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
color_dark: "#121212"
|
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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user