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
643 changed files with 32561 additions and 35292 deletions

View File

@@ -12,10 +12,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
final actionProvider = NotifierProvider<ActionNotifier, void>(
ActionNotifier.new,
dependencies: [
multiSelectProvider,
timelineServiceProvider,
],
dependencies: [multiSelectProvider, timelineServiceProvider],
);
class ActionResult {
@@ -74,37 +71,31 @@ class ActionNotifier extends Notifier<void> {
Iterable<T> _getIdsForSource<T extends BaseAsset>(ActionSource source) {
final Set<BaseAsset> assets = _getAssets(source);
return switch (T) {
const (RemoteAsset) => assets.whereType<RemoteAsset>(),
const (LocalAsset) => assets.whereType<LocalAsset>(),
_ => const [],
} as Iterable<T>;
const (RemoteAsset) => assets.whereType<RemoteAsset>(),
const (LocalAsset) => assets.whereType<LocalAsset>(),
_ => const [],
}
as Iterable<T>;
}
Set<BaseAsset> _getAssets(ActionSource source) {
return switch (source) {
ActionSource.timeline => ref.read(multiSelectProvider).selectedAssets,
ActionSource.viewer => switch (ref.read(currentAssetNotifier)) {
BaseAsset asset => {asset},
null => const {},
},
BaseAsset asset => {asset},
null => const {},
},
};
}
Future<ActionResult> shareLink(
ActionSource source,
BuildContext context,
) async {
Future<ActionResult> shareLink(ActionSource source, BuildContext context) async {
final ids = _getRemoteIdsForSource(source);
try {
await _service.shareLink(ids, context);
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to create shared link for assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -115,11 +106,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to favorite assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -130,11 +117,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to unfavorite assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -145,11 +128,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to archive assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -160,11 +139,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to unarchive assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -176,11 +151,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to move assets to lock folder', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -191,11 +162,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to remove assets from lock folder', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -207,11 +174,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to trash assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -222,11 +185,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to restore trash assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -238,11 +197,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to delete assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -254,11 +209,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to delete assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -269,18 +220,11 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: deletedCount, success: true);
} catch (error, stack) {
_logger.severe('Failed to delete assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
Future<ActionResult?> editLocation(
ActionSource source,
BuildContext context,
) async {
Future<ActionResult?> editLocation(ActionSource source, BuildContext context) async {
final ids = _getOwnedRemoteIdsForSource(source);
try {
final isEdited = await _service.editLocation(ids, context);
@@ -291,29 +235,18 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to edit location for assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
Future<ActionResult> removeFromAlbum(
ActionSource source,
String albumId,
) async {
Future<ActionResult> removeFromAlbum(ActionSource source, String albumId) async {
final ids = _getRemoteIdsForSource(source);
try {
final removedCount = await _service.removeFromAlbum(ids, albumId);
return ActionResult(count: removedCount, success: true);
} catch (error, stack) {
_logger.severe('Failed to remove assets from album', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -324,11 +257,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: ids.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to stack assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -339,10 +268,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: assets.length, success: true);
} catch (error, stack) {
_logger.severe('Failed to unstack assets', error, stack);
return ActionResult(
count: assets.length,
success: false,
);
return ActionResult(count: assets.length, success: false);
}
}
@@ -354,11 +280,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: count, success: true);
} catch (error, stack) {
_logger.severe('Failed to share assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
return ActionResult(count: ids.length, success: false, error: error.toString());
}
}
@@ -371,11 +293,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: enqueueCount, success: true);
} catch (error, stack) {
_logger.severe('Failed to download assets', error, stack);
return ActionResult(
count: assets.length,
success: false,
error: error.toString(),
);
return ActionResult(count: assets.length, success: false, error: error.toString());
}
}
@@ -386,11 +304,7 @@ class ActionNotifier extends Notifier<void> {
return ActionResult(count: assets.length, success: true);
} catch (error, stack) {
_logger.severe('Failed manually upload assets', error, stack);
return ActionResult(
count: assets.length,
success: false,
error: error.toString(),
);
return ActionResult(count: assets.length, success: false, error: error.toString());
}
}
}

View File

@@ -30,10 +30,7 @@ final remoteAlbumRepository = Provider<DriftRemoteAlbumRepository>(
);
final remoteAlbumServiceProvider = Provider<RemoteAlbumService>(
(ref) => RemoteAlbumService(
ref.watch(remoteAlbumRepository),
ref.watch(driftAlbumApiRepositoryProvider),
),
(ref) => RemoteAlbumService(ref.watch(remoteAlbumRepository), ref.watch(driftAlbumApiRepositoryProvider)),
dependencies: [remoteAlbumRepository],
);

View File

@@ -4,9 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
final currentAssetNotifier = AutoDisposeNotifierProvider<CurrentAssetNotifier, BaseAsset?>(
CurrentAssetNotifier.new,
);
final currentAssetNotifier = AutoDisposeNotifierProvider<CurrentAssetNotifier, BaseAsset?>(CurrentAssetNotifier.new);
class CurrentAssetNotifier extends AutoDisposeNotifier<BaseAsset?> {
KeepAliveLink? _keepAliveLink;
@@ -33,12 +31,10 @@ class CurrentAssetNotifier extends AutoDisposeNotifier<BaseAsset?> {
}
}
final currentAssetExifProvider = FutureProvider.autoDispose(
(ref) {
final currentAsset = ref.watch(currentAssetNotifier);
if (currentAsset == null) {
return null;
}
return ref.watch(assetServiceProvider).getExif(currentAsset);
},
);
final currentAssetExifProvider = FutureProvider.autoDispose((ref) {
final currentAsset = ref.watch(currentAssetNotifier);
if (currentAsset == null) {
return null;
}
return ref.watch(assetServiceProvider).getExif(currentAsset);
});

View File

@@ -13,8 +13,9 @@ String _$isarHash() => r'69d3a06aa7e69a4381478e03f7956eb07d7f7feb';
final isarProvider = Provider<Isar>.internal(
isar,
name: r'isarProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$isarHash,
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$isarHash,
dependencies: null,
allTransitiveDependencies: null,
);

View File

@@ -2,6 +2,4 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/infrastructure/repositories/person.repository.dart';
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
final driftPersonProvider = Provider<DriftPersonRepository>(
(ref) => DriftPersonRepository(ref.watch(driftProvider)),
);
final driftPersonProvider = Provider<DriftPersonRepository>((ref) => DriftPersonRepository(ref.watch(driftProvider)));

View File

@@ -15,19 +15,11 @@ class RemoteAlbumState {
final List<RemoteAlbum> albums;
final List<RemoteAlbum> filteredAlbums;
const RemoteAlbumState({
required this.albums,
List<RemoteAlbum>? filteredAlbums,
}) : filteredAlbums = filteredAlbums ?? albums;
const RemoteAlbumState({required this.albums, List<RemoteAlbum>? filteredAlbums})
: filteredAlbums = filteredAlbums ?? albums;
RemoteAlbumState copyWith({
List<RemoteAlbum>? albums,
List<RemoteAlbum>? filteredAlbums,
}) {
return RemoteAlbumState(
albums: albums ?? this.albums,
filteredAlbums: filteredAlbums ?? this.filteredAlbums,
);
RemoteAlbumState copyWith({List<RemoteAlbum>? albums, List<RemoteAlbum>? filteredAlbums}) {
return RemoteAlbumState(albums: albums ?? this.albums, filteredAlbums: filteredAlbums ?? this.filteredAlbums);
}
@override
@@ -57,10 +49,7 @@ class RemoteAlbumNotifier extends Notifier<RemoteAlbumState> {
Future<List<RemoteAlbum>> _getAll() async {
try {
final albums = await _remoteAlbumService.getAll();
state = state.copyWith(
albums: albums,
filteredAlbums: albums,
);
state = state.copyWith(albums: albums, filteredAlbums: albums);
return albums;
} catch (error, stack) {
_logger.severe('Failed to fetch albums', error, stack);
@@ -72,33 +61,17 @@ class RemoteAlbumNotifier extends Notifier<RemoteAlbumState> {
await _getAll();
}
void searchAlbums(
String query,
String? userId, [
QuickFilterMode filterMode = QuickFilterMode.all,
]) {
final filtered = _remoteAlbumService.searchAlbums(
state.albums,
query,
userId,
filterMode,
);
void searchAlbums(String query, String? userId, [QuickFilterMode filterMode = QuickFilterMode.all]) {
final filtered = _remoteAlbumService.searchAlbums(state.albums, query, userId, filterMode);
state = state.copyWith(
filteredAlbums: filtered,
);
state = state.copyWith(filteredAlbums: filtered);
}
void clearSearch() {
state = state.copyWith(
filteredAlbums: state.albums,
);
state = state.copyWith(filteredAlbums: state.albums);
}
void sortFilteredAlbums(
RemoteAlbumSortMode sortMode, {
bool isReverse = false,
}) {
void sortFilteredAlbums(RemoteAlbumSortMode sortMode, {bool isReverse = false}) {
final sortedAlbums = _remoteAlbumService.sortAlbums(state.filteredAlbums, sortMode, isReverse: isReverse);
state = state.copyWith(filteredAlbums: sortedAlbums);
}
@@ -109,16 +82,9 @@ class RemoteAlbumNotifier extends Notifier<RemoteAlbumState> {
List<String> assetIds = const [],
}) async {
try {
final album = await _remoteAlbumService.createAlbum(
title: title,
description: description,
assetIds: assetIds,
);
final album = await _remoteAlbumService.createAlbum(title: title, description: description, assetIds: assetIds);
state = state.copyWith(
albums: [...state.albums, album],
filteredAlbums: [...state.filteredAlbums, album],
);
state = state.copyWith(albums: [...state.albums, album], filteredAlbums: [...state.filteredAlbums, album]);
return album;
} catch (error, stack) {
@@ -153,10 +119,7 @@ class RemoteAlbumNotifier extends Notifier<RemoteAlbumState> {
return album.id == albumId ? updatedAlbum : album;
}).toList();
state = state.copyWith(
albums: updatedAlbums,
filteredAlbums: updatedFilteredAlbums,
);
state = state.copyWith(albums: updatedAlbums, filteredAlbums: updatedFilteredAlbums);
return updatedAlbum;
} catch (error, stack) {
@@ -179,10 +142,7 @@ class RemoteAlbumNotifier extends Notifier<RemoteAlbumState> {
final updatedAlbums = state.albums.where((album) => album.id != albumId).toList();
final updatedFilteredAlbums = state.filteredAlbums.where((album) => album.id != albumId).toList();
state = state.copyWith(
albums: updatedAlbums,
filteredAlbums: updatedFilteredAlbums,
);
state = state.copyWith(albums: updatedAlbums, filteredAlbums: updatedFilteredAlbums);
}
Future<List<RemoteAsset>> getAssets(String albumId) {
@@ -190,32 +150,22 @@ class RemoteAlbumNotifier extends Notifier<RemoteAlbumState> {
}
Future<int> addAssets(String albumId, List<String> assetIds) {
return _remoteAlbumService.addAssets(
albumId: albumId,
assetIds: assetIds,
);
return _remoteAlbumService.addAssets(albumId: albumId, assetIds: assetIds);
}
Future<void> addUsers(String albumId, List<String> userIds) {
return _remoteAlbumService.addUsers(
albumId: albumId,
userIds: userIds,
);
return _remoteAlbumService.addUsers(albumId: albumId, userIds: userIds);
}
}
final remoteAlbumDateRangeProvider = FutureProvider.family<(DateTime, DateTime), String>(
(ref, albumId) async {
final service = ref.watch(remoteAlbumServiceProvider);
return service.getDateRange(albumId);
},
);
final remoteAlbumDateRangeProvider = FutureProvider.family<(DateTime, DateTime), String>((ref, albumId) async {
final service = ref.watch(remoteAlbumServiceProvider);
return service.getDateRange(albumId);
});
final remoteAlbumSharedUsersProvider = FutureProvider.autoDispose.family<List<UserDto>, String>(
(ref, albumId) async {
final link = ref.keepAlive();
ref.onDispose(() => link.close());
final service = ref.watch(remoteAlbumServiceProvider);
return service.getSharedUsers(albumId);
},
);
final remoteAlbumSharedUsersProvider = FutureProvider.autoDispose.family<List<UserDto>, String>((ref, albumId) async {
final link = ref.keepAlive();
ref.onDispose(() => link.close());
final service = ref.watch(remoteAlbumServiceProvider);
return service.getSharedUsers(albumId);
});

View File

@@ -3,10 +3,6 @@ import 'package:immich_mobile/domain/services/search.service.dart';
import 'package:immich_mobile/infrastructure/repositories/search_api.repository.dart';
import 'package:immich_mobile/providers/api.provider.dart';
final searchApiRepositoryProvider = Provider(
(ref) => SearchApiRepository(ref.watch(apiServiceProvider).searchApi),
);
final searchApiRepositoryProvider = Provider((ref) => SearchApiRepository(ref.watch(apiServiceProvider).searchApi));
final searchServiceProvider = Provider(
(ref) => SearchService(ref.watch(searchApiRepositoryProvider)),
);
final searchServiceProvider = Provider((ref) => SearchService(ref.watch(searchApiRepositoryProvider)));

View File

@@ -2,6 +2,4 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/infrastructure/repositories/stack.repository.dart';
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
final driftStackProvider = Provider<DriftStackRepository>(
(ref) => DriftStackRepository(ref.watch(driftProvider)),
);
final driftStackProvider = Provider<DriftStackRepository>((ref) => DriftStackRepository(ref.watch(driftProvider)));

View File

@@ -1,6 +1,4 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/infrastructure/repositories/storage.repository.dart';
final storageRepositoryProvider = Provider<StorageRepository>(
(ref) => const StorageRepository(),
);
final storageRepositoryProvider = Provider<StorageRepository>((ref) => const StorageRepository());

View File

@@ -30,8 +30,9 @@ String _$storeServiceHash() => r'250e10497c42df360e9e1f9a618d0b19c1b5b0a0';
final storeServiceProvider = Provider<StoreService>.internal(
storeService,
name: r'storeServiceProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$storeServiceHash,
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$storeServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);

View File

@@ -20,13 +20,9 @@ final syncStreamServiceProvider = Provider(
),
);
final syncApiRepositoryProvider = Provider(
(ref) => SyncApiRepository(ref.watch(apiServiceProvider)),
);
final syncApiRepositoryProvider = Provider((ref) => SyncApiRepository(ref.watch(apiServiceProvider)));
final syncStreamRepositoryProvider = Provider(
(ref) => SyncStreamRepository(ref.watch(driftProvider)),
);
final syncStreamRepositoryProvider = Provider((ref) => SyncStreamRepository(ref.watch(driftProvider)));
final localSyncServiceProvider = Provider(
(ref) => LocalSyncService(

View File

@@ -33,13 +33,11 @@ final timelineFactoryProvider = Provider<TimelineFactory>(
),
);
final timelineUsersProvider = StreamProvider<List<String>>(
(ref) {
final currentUserId = ref.watch(currentUserProvider.select((u) => u?.id));
if (currentUserId == null) {
return Stream.value([]);
}
final timelineUsersProvider = StreamProvider<List<String>>((ref) {
final currentUserId = ref.watch(currentUserProvider.select((u) => u?.id));
if (currentUserId == null) {
return Stream.value([]);
}
return ref.watch(timelineRepositoryProvider).watchTimelineUserIds(currentUserId);
},
);
return ref.watch(timelineRepositoryProvider).watchTimelineUserIds(currentUserId);
});

View File

@@ -22,10 +22,10 @@ UserApiRepository userApiRepository(Ref ref) => UserApiRepository(ref.watch(apiS
@Riverpod(keepAlive: true)
UserService userService(Ref ref) => UserService(
isarUserRepository: ref.watch(userRepositoryProvider),
userApiRepository: ref.watch(userApiRepositoryProvider),
storeService: ref.watch(storeServiceProvider),
);
isarUserRepository: ref.watch(userRepositoryProvider),
userApiRepository: ref.watch(userApiRepositoryProvider),
storeService: ref.watch(storeServiceProvider),
);
/// Drifts
final driftPartnerRepositoryProvider = Provider<DriftPartnerRepository>(
@@ -33,12 +33,7 @@ final driftPartnerRepositoryProvider = Provider<DriftPartnerRepository>(
);
final driftPartnerServiceProvider = Provider<DriftPartnerService>(
(ref) => DriftPartnerService(
ref.watch(driftPartnerRepositoryProvider),
ref.watch(partnerApiRepositoryProvider),
),
(ref) => DriftPartnerService(ref.watch(driftPartnerRepositoryProvider), ref.watch(partnerApiRepositoryProvider)),
);
final partnerUsersProvider = NotifierProvider<PartnerNotifier, List<PartnerUserDto>>(
PartnerNotifier.new,
);
final partnerUsersProvider = NotifierProvider<PartnerNotifier, List<PartnerUserDto>>(PartnerNotifier.new);

View File

@@ -47,8 +47,9 @@ String _$userServiceHash() => r'181414dddc7891be6237e13d568c287a804228d1';
final userServiceProvider = Provider<UserService>.internal(
userService,
name: r'userServiceProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$userServiceHash,
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$userServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);