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.
samples/game_template/lib/src/settings/settings.dart

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);
}
}