// 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 'dart:ui' as ui show AccessibilityFeatures, SemanticsUpdateBuilder; import 'package:flutter/foundation.dart'; import 'debug.dart'; export 'dart:ui' show AccessibilityFeatures, SemanticsUpdateBuilder; /// The glue between the semantics layer and the Flutter engine. // TODO(zanderso): move the remaining semantic related bindings here. mixin SemanticsBinding on BindingBase { @override void initInstances() { super.initInstances(); _instance = this; _accessibilityFeatures = platformDispatcher.accessibilityFeatures; } /// The current [SemanticsBinding], if one has been created. /// /// Provides access to the features exposed by this mixin. The binding must /// be initialized before using this getter; this is typically done by calling /// [runApp] or [WidgetsFlutterBinding.ensureInitialized]. static SemanticsBinding get instance => BindingBase.checkInstance(_instance); static SemanticsBinding? _instance; /// Called when the platform accessibility features change. /// /// See [dart:ui.PlatformDispatcher.onAccessibilityFeaturesChanged]. @protected void handleAccessibilityFeaturesChanged() { _accessibilityFeatures = platformDispatcher.accessibilityFeatures; } /// Creates an empty semantics update builder. /// /// The caller is responsible for filling out the semantics node updates. /// /// This method is used by the [SemanticsOwner] to create builder for all its /// semantics updates. ui.SemanticsUpdateBuilder createSemanticsUpdateBuilder() { return ui.SemanticsUpdateBuilder(); } /// The currently active set of [AccessibilityFeatures]. /// /// This is initialized the first time [runApp] is called and updated whenever /// a flag is changed. /// /// To listen to changes to accessibility features, create a /// [WidgetsBindingObserver] and listen to /// [WidgetsBindingObserver.didChangeAccessibilityFeatures]. ui.AccessibilityFeatures get accessibilityFeatures => _accessibilityFeatures; late ui.AccessibilityFeatures _accessibilityFeatures; /// The platform is requesting that animations be disabled or simplified. /// /// This setting can be overridden for testing or debugging by setting /// [debugSemanticsDisableAnimations]. bool get disableAnimations { bool value = _accessibilityFeatures.disableAnimations; assert(() { if (debugSemanticsDisableAnimations != null) { value = debugSemanticsDisableAnimations!; } return true; }()); return value; } }