chore: bump dart sdk to 3.8 (#20355)

* chore: bump dart sdk to 3.8

* chore: make build

* make pigeon

* chore: format files

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong 2025-07-29 00:34:03 +05:30 committed by GitHub
parent 9b3718120b
commit e52b9d15b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
643 changed files with 32561 additions and 35292 deletions

View file

@ -17,9 +17,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
class BetaSyncSettings extends HookConsumerWidget {
const BetaSyncSettings({
super.key,
});
const BetaSyncSettings({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
@ -35,17 +33,11 @@ class BetaSyncSettings extends HookConsumerWidget {
final memoryCount = memoryService.getCount();
final getLocalHashedCount = assetService.getLocalHashedCount();
return await Future.wait([
assetCounts,
localAlbumCounts,
remoteAlbumCounts,
memoryCount,
getLocalHashedCount,
]);
return await Future.wait([assetCounts, localAlbumCounts, remoteAlbumCounts, memoryCount, getLocalHashedCount]);
}
Future<void> resetDatabase() async {
// https://github.com/simolus3/drift/commit/bd80a46264b6dd833ef4fd87fffc03f5a832ab41#diff-3f879e03b4a35779344ef16170b9353608dd9c42385f5402ec6035aac4dd8a04R76-R94
// https://github.com/simolus3/drift/commit/bd80a46264b6dd833ef4fd87fffc03f5a832ab41#diff-3f879e03b4a35779344ef16170b9353608dd9c42385f5402ec6035aac4dd8a04R76-R94
final drift = ref.read(driftProvider);
final database = drift.attachedDatabase;
await database.exclusively(() async {
@ -62,14 +54,10 @@ class BetaSyncSettings extends HookConsumerWidget {
database.resolvedEngine.executor,
drift_db.OpeningDetails(null, database.schemaVersion),
);
await database.customStatement(
'PRAGMA user_version = ${database.schemaVersion}',
);
await database.customStatement('PRAGMA user_version = ${database.schemaVersion}');
// Refresh all stream queries
database.notifyUpdates({
for (final table in database.allTables) drift_db.TableUpdate.onTable(table),
});
database.notifyUpdates({for (final table in database.allTables) drift_db.TableUpdate.onTable(table)});
});
}
@ -83,28 +71,18 @@ class BetaSyncSettings extends HookConsumerWidget {
if (!await dbFile.exists()) {
if (context.mounted) {
context.scaffoldMessenger.showSnackBar(
SnackBar(
content: Text("Database file not found".t(context: context)),
),
SnackBar(content: Text("Database file not found".t(context: context))),
);
}
return;
}
final timestamp = DateTime.now().millisecondsSinceEpoch;
final exportFile = File(
path.join(
documentsDir.path,
'immich_export_$timestamp.sqlite',
),
);
final exportFile = File(path.join(documentsDir.path, 'immich_export_$timestamp.sqlite'));
await dbFile.copy(exportFile.path);
await Share.shareXFiles(
[XFile(exportFile.path)],
text: 'Immich Database Export',
);
await Share.shareXFiles([XFile(exportFile.path)], text: 'Immich Database Export');
Future.delayed(const Duration(seconds: 30), () async {
if (await exportFile.exists()) {
@ -114,17 +92,13 @@ class BetaSyncSettings extends HookConsumerWidget {
if (context.mounted) {
context.scaffoldMessenger.showSnackBar(
SnackBar(
content: Text("Database exported successfully".t(context: context)),
),
SnackBar(content: Text("Database exported successfully".t(context: context))),
);
}
} catch (e) {
if (context.mounted) {
context.scaffoldMessenger.showSnackBar(
SnackBar(
content: Text("Failed to export database: $e".t(context: context)),
),
SnackBar(content: Text("Failed to export database: $e".t(context: context))),
);
}
}
@ -225,27 +199,17 @@ class BetaSyncSettings extends HookConsumerWidget {
],
),
),
const Divider(
height: 1,
indent: 16,
endIndent: 16,
),
const Divider(height: 1, indent: 16, endIndent: 16),
const SizedBox(height: 24),
_SectionHeaderText(text: "jobs".t(context: context)),
ListTile(
title: Text(
"sync_local".t(context: context),
style: const TextStyle(
fontWeight: FontWeight.w500,
),
),
subtitle: Text(
"tap_to_run_job".t(context: context),
style: const TextStyle(fontWeight: FontWeight.w500),
),
subtitle: Text("tap_to_run_job".t(context: context)),
leading: const Icon(Icons.sync),
trailing: _SyncStatusIcon(
status: ref.watch(syncStatusProvider).localSyncStatus,
),
trailing: _SyncStatusIcon(status: ref.watch(syncStatusProvider).localSyncStatus),
onTap: () {
ref.read(backgroundSyncProvider).syncLocal(full: true);
},
@ -253,17 +217,11 @@ class BetaSyncSettings extends HookConsumerWidget {
ListTile(
title: Text(
"sync_remote".t(context: context),
style: const TextStyle(
fontWeight: FontWeight.w500,
),
),
subtitle: Text(
"tap_to_run_job".t(context: context),
style: const TextStyle(fontWeight: FontWeight.w500),
),
subtitle: Text("tap_to_run_job".t(context: context)),
leading: const Icon(Icons.cloud_sync),
trailing: _SyncStatusIcon(
status: ref.watch(syncStatusProvider).remoteSyncStatus,
),
trailing: _SyncStatusIcon(status: ref.watch(syncStatusProvider).remoteSyncStatus),
onTap: () {
ref.read(backgroundSyncProvider).syncRemote();
},
@ -271,64 +229,40 @@ class BetaSyncSettings extends HookConsumerWidget {
ListTile(
title: Text(
"hash_asset".t(context: context),
style: const TextStyle(
fontWeight: FontWeight.w500,
),
style: const TextStyle(fontWeight: FontWeight.w500),
),
leading: const Icon(Icons.tag),
subtitle: Text(
"tap_to_run_job".t(context: context),
),
trailing: _SyncStatusIcon(
status: ref.watch(syncStatusProvider).hashJobStatus,
),
subtitle: Text("tap_to_run_job".t(context: context)),
trailing: _SyncStatusIcon(status: ref.watch(syncStatusProvider).hashJobStatus),
onTap: () {
ref.read(backgroundSyncProvider).hashAssets();
},
),
const Divider(
height: 1,
indent: 16,
endIndent: 16,
),
const Divider(height: 1, indent: 16, endIndent: 16),
const SizedBox(height: 24),
_SectionHeaderText(text: "actions".t(context: context)),
ListTile(
title: Text(
"export_database".t(context: context),
style: const TextStyle(
fontWeight: FontWeight.w500,
),
),
subtitle: Text(
"export_database_description".t(context: context),
style: const TextStyle(fontWeight: FontWeight.w500),
),
subtitle: Text("export_database_description".t(context: context)),
leading: const Icon(Icons.download),
onTap: exportDatabase,
),
ListTile(
title: Text(
"reset_sqlite".t(context: context),
style: TextStyle(
color: context.colorScheme.error,
fontWeight: FontWeight.w500,
),
),
leading: Icon(
Icons.settings_backup_restore_rounded,
color: context.colorScheme.error,
style: TextStyle(color: context.colorScheme.error, fontWeight: FontWeight.w500),
),
leading: Icon(Icons.settings_backup_restore_rounded, color: context.colorScheme.error),
onTap: () async {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(
"reset_sqlite".t(context: context),
),
content: Text(
"reset_sqlite_confirmation".t(context: context),
),
title: Text("reset_sqlite".t(context: context)),
content: Text("reset_sqlite_confirmation".t(context: context)),
actions: [
TextButton(
onPressed: () => context.pop(),
@ -339,18 +273,12 @@ class BetaSyncSettings extends HookConsumerWidget {
await resetDatabase();
context.pop();
context.scaffoldMessenger.showSnackBar(
SnackBar(
content: Text(
"reset_sqlite_success".t(context: context),
),
),
SnackBar(content: Text("reset_sqlite_success".t(context: context))),
);
},
child: Text(
"confirm".t(context: context),
style: TextStyle(
color: context.colorScheme.error,
),
style: TextStyle(color: context.colorScheme.error),
),
),
],
@ -370,31 +298,15 @@ class BetaSyncSettings extends HookConsumerWidget {
class _SyncStatusIcon extends StatelessWidget {
final SyncStatus status;
const _SyncStatusIcon({
required this.status,
});
const _SyncStatusIcon({required this.status});
@override
Widget build(BuildContext context) {
return switch (status) {
SyncStatus.idle => const Icon(
Icons.pause_circle_outline_rounded,
),
SyncStatus.syncing => const SizedBox(
height: 24,
width: 24,
child: CircularProgressIndicator(
strokeWidth: 2,
),
),
SyncStatus.success => const Icon(
Icons.check_circle_outline,
color: Colors.green,
),
SyncStatus.error => Icon(
Icons.error_outline,
color: context.colorScheme.error,
),
SyncStatus.idle => const Icon(Icons.pause_circle_outline_rounded),
SyncStatus.syncing => const SizedBox(height: 24, width: 24, child: CircularProgressIndicator(strokeWidth: 2)),
SyncStatus.success => const Icon(Icons.check_circle_outline, color: Colors.green),
SyncStatus.error => Icon(Icons.error_outline, color: context.colorScheme.error),
};
}
}
@ -402,9 +314,7 @@ class _SyncStatusIcon extends StatelessWidget {
class _SectionHeaderText extends StatelessWidget {
final String text;
const _SectionHeaderText({
required this.text,
});
const _SectionHeaderText({required this.text});
@override
Widget build(BuildContext context) {

View file

@ -7,12 +7,7 @@ class EntitiyCountTile extends StatelessWidget {
final String label;
final IconData icon;
const EntitiyCountTile({
super.key,
required this.count,
required this.label,
required this.icon,
});
const EntitiyCountTile({super.key, required this.count, required this.label, required this.icon});
String zeroPadding(int number, int targetWidth) {
final numStr = number.toString();
@ -31,10 +26,7 @@ class EntitiyCountTile extends StatelessWidget {
decoration: BoxDecoration(
color: context.colorScheme.surfaceContainerLow,
borderRadius: const BorderRadius.all(Radius.circular(16)),
border: Border.all(
width: 0.5,
color: context.colorScheme.outline.withAlpha(25),
),
border: Border.all(width: 0.5, color: context.colorScheme.outline.withAlpha(25)),
),
child: Column(
mainAxisSize: MainAxisSize.min,
@ -44,18 +36,11 @@ class EntitiyCountTile extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Icon(
icon,
color: context.primaryColor,
),
Icon(icon, color: context.primaryColor),
const SizedBox(width: 8),
Text(
label,
style: TextStyle(
color: context.primaryColor,
fontWeight: FontWeight.bold,
fontSize: 16,
),
style: TextStyle(color: context.primaryColor, fontWeight: FontWeight.bold, fontSize: 16),
),
],
),
@ -66,23 +51,15 @@ class EntitiyCountTile extends StatelessWidget {
final maxDigits = calculateMaxDigits(constraints.maxWidth);
return RichText(
text: TextSpan(
style: const TextStyle(
fontSize: 18,
fontFamily: 'OverpassMono',
fontWeight: FontWeight.w600,
),
style: const TextStyle(fontSize: 18, fontFamily: 'OverpassMono', fontWeight: FontWeight.w600),
children: [
TextSpan(
text: zeroPadding(count, maxDigits),
style: TextStyle(
color: context.colorScheme.onSurfaceSecondary.withAlpha(75),
),
style: TextStyle(color: context.colorScheme.onSurfaceSecondary.withAlpha(75)),
),
TextSpan(
text: count.toString(),
style: TextStyle(
color: context.primaryColor,
),
style: TextStyle(color: context.primaryColor),
),
],
),