// Copyright 2014 The Flutter 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:meta/meta.dart'; import 'package:platform/platform.dart'; import 'base/config.dart'; import 'base/context.dart'; import 'base/file_system.dart'; import 'base/logger.dart'; /// A class that represents global (non-project-specific) internal state that /// must persist across tool invocations. abstract class PersistentToolState { factory PersistentToolState({ @required FileSystem fileSystem, @required Logger logger, @required Platform platform, }) => _DefaultPersistentToolState( fileSystem: fileSystem, logger: logger, platform: platform, ); factory PersistentToolState.test({ @required Directory directory, @required Logger logger, }) => _DefaultPersistentToolState.test( directory: directory, logger: logger, ); static PersistentToolState get instance => context.get(); /// Whether the welcome message should be redisplayed. /// /// May give null if the value has not been set. bool redisplayWelcomeMessage; } class _DefaultPersistentToolState implements PersistentToolState { _DefaultPersistentToolState({ @required FileSystem fileSystem, @required Logger logger, @required Platform platform, }) : _config = Config( _kFileName, fileSystem: fileSystem, logger: logger, platform: platform, ); @visibleForTesting _DefaultPersistentToolState.test({ @required Directory directory, @required Logger logger, }) : _config = Config.test( _kFileName, directory: directory, logger: logger, ); static const String _kFileName = '.flutter_tool_state'; static const String _kRedisplayWelcomeMessage = 'redisplay-welcome-message'; final Config _config; @override bool get redisplayWelcomeMessage { return _config.getValue(_kRedisplayWelcomeMessage) as bool; } @override set redisplayWelcomeMessage(bool value) { _config.setValue(_kRedisplayWelcomeMessage, value); } }