feat(mobile): Various minor performance improvements (#1176)

* Improve scroll performance by introducing repaint boundaries and moving more calculations to providers.

* Add error handing for malformed dates.

* Remove unused method

* Use compute in different places to improve app performance during heavy tasks

* Fix test

* Refactor `List<RenderAssetGridElement>` to separate `RenderList` class and make `fromAssetGroups` a static method of this class.

* Fix loading indicator bug

* Use provider directly

* `RenderList` refactoring

* `AssetNotifier` refactoring

* Move `combine` to static private method

* Extract compute methods in cache services to static private methods.

* Use `tryParse` instead of `parse` with try/catch for dates.

* Fix bug in caching mechanism.

* Fixed state not being used to trigger conditional rendering

* styling

* Corrected state

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
Matthias Rupp
2023-01-18 16:59:23 +01:00
committed by GitHub
parent 92972ac776
commit 7a1ae8691e
15 changed files with 312 additions and 242 deletions

View File

@@ -7,9 +7,18 @@ import 'package:immich_mobile/shared/services/json_cache.dart';
class AssetCacheService extends JsonCache<List<Asset>> {
AssetCacheService() : super("asset_cache");
static Future<List<Map<String, dynamic>>> _computeSerialize(
List<Asset> assets) async {
return assets.map((e) => e.toJson()).toList();
}
@override
void put(List<Asset> data) {
putRawData(data.map((e) => e.toJson()).toList());
void put(List<Asset> data) async {
putRawData(await compute(_computeSerialize, data));
}
static Future<List<Asset>> _computeEncode(List<dynamic> data) async {
return data.map((e) => Asset.fromJson(e)).whereNotNull().toList();
}
@override
@@ -17,8 +26,7 @@ class AssetCacheService extends JsonCache<List<Asset>> {
try {
final mapList = await readRawData() as List<dynamic>;
final responseData =
mapList.map((e) => Asset.fromJson(e)).whereNotNull().toList();
final responseData = await compute(_computeEncode, mapList);
return responseData;
} catch (e) {