blob: c8e5d72286f2eec3784183e15b586b545cc07d59 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/foundation.dart';
import 'config_specific/logger/logger.dart';
import 'globals.dart';
import 'vm_service_wrapper.dart';
/// A controller for global application preferences.
class PreferencesController {
final ValueNotifier<bool> _darkModeTheme = ValueNotifier(true);
final ValueNotifier<bool> _vmDeveloperMode = ValueNotifier(false);
ValueListenable<bool> get darkModeTheme => _darkModeTheme;
ValueListenable<bool> get vmDeveloperModeEnabled => _vmDeveloperMode;
Future<void> init() async {
if (storage != null) {
// Get the current values and listen for and write back changes.
String value = await storage.getValue('ui.darkMode');
toggleDarkModeTheme(value == null || value == 'true');
_darkModeTheme.addListener(() {
storage.setValue('ui.darkMode', '${_darkModeTheme.value}');
});
value = await storage.getValue('ui.vmDeveloperMode');
toggleVmDeveloperMode(value == 'true');
_vmDeveloperMode.addListener(() {
storage.setValue('ui.vmDeveloperMode', '${_vmDeveloperMode.value}');
});
} else {
// This can happen when running tests.
log('PreferencesController: storage not initialized');
}
setGlobal(PreferencesController, this);
}
/// Change the value for the dark mode setting.
void toggleDarkModeTheme(bool useDarkMode) {
_darkModeTheme.value = useDarkMode;
}
/// Change the value for the VM developer mode setting.
void toggleVmDeveloperMode(bool enableVmDeveloperMode) {
_vmDeveloperMode.value = enableVmDeveloperMode;
VmServicePrivate.enablePrivateRpcs = enableVmDeveloperMode;
}
}