// 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:convert/convert.dart'; import 'package:crypto/crypto.dart'; import '../convert.dart'; import '../persistent_tool_state.dart'; /// This message is displayed on the first run of the Flutter tool, or anytime /// that the contents of this string change. const String _kFlutterFirstRunMessage = ''' ╔════════════════════════════════════════════════════════════════════════════╗ ║ Welcome to Flutter! - https://flutter.dev ║ ║ ║ ║ The Flutter tool uses Google Analytics to anonymously report feature usage ║ ║ statistics and basic crash reports. This data is used to help improve ║ ║ Flutter tools over time. ║ ║ ║ ║ Flutter tool analytics are not sent on the very first run. To disable ║ ║ reporting, type 'flutter config --no-analytics'. To display the current ║ ║ setting, type 'flutter config'. If you opt out of analytics, an opt-out ║ ║ event will be sent, and then no further information will be sent by the ║ ║ Flutter tool. ║ ║ ║ ║ By downloading the Flutter SDK, you agree to the Google Terms of Service. ║ ║ Note: The Google Privacy Policy describes how data is handled in this ║ ║ service. ║ ║ ║ ║ Moreover, Flutter includes the Dart SDK, which may send usage metrics and ║ ║ crash reports to Google. ║ ║ ║ ║ Read about data we send with crash reports: ║ ║ https://flutter.dev/docs/reference/crash-reporting ║ ║ ║ ║ See Google's privacy policy: ║ ║ https://policies.google.com/privacy ║ ╚════════════════════════════════════════════════════════════════════════════╝ '''; /// The first run messenger determines whether the first run license terms /// need to be displayed. class FirstRunMessenger { FirstRunMessenger({ required PersistentToolState persistentToolState }) : _persistentToolState = persistentToolState; final PersistentToolState _persistentToolState; /// Whether the license terms should be displayed. /// /// This is implemented by caching a hash of the previous license terms. This /// does not update the cache hash value. /// /// The persistent tool state setting [PersistentToolState.redisplayWelcomeMessage] /// can also be used to make this return false. This is primarily used to ensure /// that the license terms are not printed during a `flutter upgrade`, until the /// user manually runs the tool. bool shouldDisplayLicenseTerms() { if (_persistentToolState.shouldRedisplayWelcomeMessage == false) { return false; } final String? oldHash = _persistentToolState.lastActiveLicenseTermsHash; return oldHash != _currentHash; } /// Update the cached license terms hash once the new terms have been displayed. void confirmLicenseTermsDisplayed() { _persistentToolState.setLastActiveLicenseTermsHash(_currentHash); } /// The hash of the current license representation. String get _currentHash => hex.encode(md5.convert(utf8.encode(licenseTerms)).bytes); /// The current license terms. String get licenseTerms => _kFlutterFirstRunMessage; }