Fix preferences initialization error
This commit is contained in:
@@ -50,10 +50,6 @@ Future<void> lazyBootstrap(
|
|||||||
final appInfo = await container.read(appInfoProvider.future);
|
final appInfo = await container.read(appInfoProvider.future);
|
||||||
|
|
||||||
await container.read(sharedPreferencesProvider.future);
|
await container.read(sharedPreferencesProvider.future);
|
||||||
await PreferencesMigration(
|
|
||||||
sharedPreferences: container.read(sharedPreferencesProvider).requireValue,
|
|
||||||
).migrate();
|
|
||||||
|
|
||||||
final enableAnalytics = container.read(enableAnalyticsProvider);
|
final enableAnalytics = container.read(enableAnalyticsProvider);
|
||||||
|
|
||||||
await SentryFlutter.init(
|
await SentryFlutter.init(
|
||||||
@@ -89,6 +85,17 @@ Future<void> _lazyBootstrap(
|
|||||||
ProviderContainer container,
|
ProviderContainer container,
|
||||||
Environment env,
|
Environment env,
|
||||||
) async {
|
) async {
|
||||||
|
try {
|
||||||
|
await PreferencesMigration(
|
||||||
|
sharedPreferences: container.read(sharedPreferencesProvider).requireValue,
|
||||||
|
).migrate();
|
||||||
|
} catch (e) {
|
||||||
|
_logger.error("preferences migration failed", e);
|
||||||
|
if (env == Environment.dev) rethrow;
|
||||||
|
_logger.info("clearing preferences");
|
||||||
|
await container.read(sharedPreferencesProvider).requireValue.clear();
|
||||||
|
}
|
||||||
|
|
||||||
final debug = container.read(debugModeNotifierProvider) || kDebugMode;
|
final debug = container.read(debugModeNotifierProvider) || kDebugMode;
|
||||||
|
|
||||||
final filesEditor = container.read(filesEditorServiceProvider);
|
final filesEditor = container.read(filesEditorServiceProvider);
|
||||||
|
|||||||
@@ -1,8 +1,33 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:loggy/loggy.dart';
|
||||||
|
import 'package:path/path.dart' as p;
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
part 'preferences_provider.g.dart';
|
part 'preferences_provider.g.dart';
|
||||||
|
|
||||||
@Riverpod(keepAlive: true)
|
@Riverpod(keepAlive: true)
|
||||||
Future<SharedPreferences> sharedPreferences(SharedPreferencesRef ref) async =>
|
Future<SharedPreferences> sharedPreferences(SharedPreferencesRef ref) async {
|
||||||
SharedPreferences.getInstance();
|
final logger = Loggy("preferences");
|
||||||
|
SharedPreferences? sharedPreferences;
|
||||||
|
|
||||||
|
logger.debug("initializing preferences");
|
||||||
|
try {
|
||||||
|
sharedPreferences = await SharedPreferences.getInstance();
|
||||||
|
} catch (e) {
|
||||||
|
logger.error("error initializing preferences", e);
|
||||||
|
if (!Platform.isWindows && !Platform.isLinux) {
|
||||||
|
rethrow;
|
||||||
|
}
|
||||||
|
// https://github.com/flutter/flutter/issues/89211
|
||||||
|
final directory = await getApplicationSupportDirectory();
|
||||||
|
final file = File(p.join(directory.path, 'shared_preferences.json'));
|
||||||
|
if (file.existsSync()) {
|
||||||
|
file.deleteSync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sharedPreferences ??= await SharedPreferences.getInstance();
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user