Files
zapstore/lib/navigation/app_initializer.dart
T
franzap d3c648f0b9 - Ability to disable updates, show disabled updates app in updates screen, closes #157
- Better installation feedback messages (new plugin)
- Bigger toasts and improved explanations, add toast actions, closes #159
- Add install success toast, closes #154
- Remove default Signed by zap.store
- refreshUpdateStatus performance optimization for one app
2024-11-08 22:35:00 -03:00

67 lines
2.1 KiB
Dart

import 'package:collection/collection.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_data/flutter_data.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:zapstore/main.dart';
import 'package:zapstore/main.data.dart';
import 'package:zapstore/models/app.dart';
import 'package:zapstore/models/local_app.dart';
import 'package:zapstore/navigation/router.dart';
import 'package:zapstore/widgets/app_curation_container.dart';
AppLifecycleListener? _lifecycleListener;
SharedPreferences? sharedPreferences;
final appInitializer = FutureProvider<void>((ref) async {
sharedPreferences = await SharedPreferences.getInstance();
final dbVersion = sharedPreferences!.getInt('dbVersion');
// Perform migration
if (dbVersion == null || dbVersion < kDbVersion) {
final storage = ref.read(localStorageProvider);
await storage.initialize();
await storage.destroy();
await sharedPreferences!.setInt('dbVersion', kDbVersion);
}
// Initialize Flutter Data
await ref.read(initializeFlutterData(adapterProvidersMap).future);
_lifecycleListener = AppLifecycleListener(
onStateChange: (state) async {
if (state == AppLifecycleState.resumed) {
await ref.localApps.localAppAdapter.refreshUpdateStatus();
}
},
);
// Preload curation sets
// Do not use ignoreReturn here
if (ref.appCurationSets.countLocal == 0) {
await ref.appCurationSets.findAll();
// Take opportunity to preload updates
await ref.apps.appAdapter.checkForUpdates();
} else {
ref.appCurationSets.findAll();
}
// Preload zapstore's nostr curation set
await ref.read(appCurationSetProvider(kNostrCurationSet).notifier).fetch();
// Handle deep links
final appLinksSub = appLinks.uriLinkStream.listen((uri) async {
if (uri.scheme == "zapstore") {
final adapter = ref.apps.appAdapter;
final app = adapter.findWhereIdentifierInLocal({uri.host}).firstOrNull;
if (app != null) {
appRouter.go('/details', extra: app);
}
}
});
ref.onDispose(() {
_lifecycleListener?.dispose();
appLinksSub.cancel();
});
});