mirror of https://github.com/flutter/samples.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.0 KiB
63 lines
2.0 KiB
// Copyright 2022, the Flutter project authors. Please see the AUTHORS file
|
|
// for details. 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 'persistence/settings_persistence.dart';
|
|
|
|
/// An class that holds settings like [playerName] or [musicOn],
|
|
/// and saves them to an injected persistence store.
|
|
class SettingsController {
|
|
final SettingsPersistence _persistence;
|
|
|
|
/// Whether or not the sound is on at all. This overrides both music
|
|
/// and sound.
|
|
ValueNotifier<bool> muted = ValueNotifier(false);
|
|
|
|
ValueNotifier<String> playerName = ValueNotifier('Player');
|
|
|
|
ValueNotifier<bool> soundsOn = ValueNotifier(false);
|
|
|
|
ValueNotifier<bool> musicOn = ValueNotifier(false);
|
|
|
|
/// Creates a new instance of [SettingsController] backed by [persistence].
|
|
SettingsController({required SettingsPersistence persistence})
|
|
: _persistence = persistence;
|
|
|
|
/// Asynchronously loads values from the injected persistence store.
|
|
Future<void> loadStateFromPersistence() async {
|
|
await Future.wait([
|
|
_persistence
|
|
// On the web, sound can only start after user interaction, so
|
|
// we start muted there.
|
|
// On any other platform, we start unmuted.
|
|
.getMuted(defaultValue: kIsWeb)
|
|
.then((value) => muted.value = value),
|
|
_persistence.getSoundsOn().then((value) => soundsOn.value = value),
|
|
_persistence.getMusicOn().then((value) => musicOn.value = value),
|
|
_persistence.getPlayerName().then((value) => playerName.value = value),
|
|
]);
|
|
}
|
|
|
|
void setPlayerName(String name) {
|
|
playerName.value = name;
|
|
_persistence.savePlayerName(playerName.value);
|
|
}
|
|
|
|
void toggleMusicOn() {
|
|
musicOn.value = !musicOn.value;
|
|
_persistence.saveMusicOn(musicOn.value);
|
|
}
|
|
|
|
void toggleMuted() {
|
|
muted.value = !muted.value;
|
|
_persistence.saveMuted(muted.value);
|
|
}
|
|
|
|
void toggleSoundsOn() {
|
|
soundsOn.value = !soundsOn.value;
|
|
_persistence.saveSoundsOn(soundsOn.value);
|
|
}
|
|
}
|