Added example for Magnifier and TextMagnifier (#110218)
diff --git a/examples/api/lib/widgets/magnifier/magnifier.0.dart b/examples/api/lib/widgets/magnifier/magnifier.0.dart
new file mode 100644
index 0000000..5817533
--- /dev/null
+++ b/examples/api/lib/widgets/magnifier/magnifier.0.dart
@@ -0,0 +1,62 @@
+// 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:flutter/material.dart';
+
+void main() => runApp(const MyApp());
+
+class MyApp extends StatefulWidget {
+ const MyApp({super.key});
+ static const Size loupeSize = Size(200, 200);
+
+ @override
+ State<MyApp> createState() => _MyAppState();
+}
+
+class _MyAppState extends State<MyApp> {
+ Offset dragGesturePositon = Offset.zero;
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ home: Scaffold(
+ body: Center(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: <Widget>[
+ const Text('Drag on the logo!'),
+ RepaintBoundary(
+ child: Stack(
+ children: <Widget>[
+ GestureDetector(
+ onPanUpdate: (DragUpdateDetails details) => setState(
+ () {
+ dragGesturePositon = details.localPosition;
+ },
+ ),
+ child: const FlutterLogo(size: 200),
+ ),
+ Positioned(
+ left: dragGesturePositon.dx,
+ top: dragGesturePositon.dy,
+ child: const RawMagnifier(
+ decoration: MagnifierDecoration(
+ shape: CircleBorder(
+ side: BorderSide(color: Colors.pink, width: 3),
+ ),
+ ),
+ size: Size(100, 100),
+ magnificationScale: 2,
+ ),
+ )
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/examples/api/lib/widgets/text_magnifier/text_magnifier.0.dart b/examples/api/lib/widgets/text_magnifier/text_magnifier.0.dart
new file mode 100644
index 0000000..b53aec9
--- /dev/null
+++ b/examples/api/lib/widgets/text_magnifier/text_magnifier.0.dart
@@ -0,0 +1,112 @@
+// 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:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+
+void main() => runApp(const MyApp(text: 'Hello world!'));
+
+class MyApp extends StatelessWidget {
+ const MyApp({
+ super.key,
+ this.textDirection = TextDirection.ltr,
+ required this.text,
+ });
+
+ final TextDirection textDirection;
+ final String text;
+
+ static const Size loupeSize = Size(200, 200);
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ home: Scaffold(
+ body: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 48.0),
+ child: Center(
+ child: TextField(
+ textDirection: textDirection,
+ // Create a custom magnifier configuration that
+ // this `TextField` will use to build a magnifier with.
+ magnifierConfiguration: TextMagnifierConfiguration(
+ magnifierBuilder: (_, __, ValueNotifier<MagnifierInfo> magnifierInfo) => CustomMagnifier(
+ magnifierInfo: magnifierInfo,
+ ),
+ ),
+ controller: TextEditingController(text: text),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class CustomMagnifier extends StatelessWidget {
+ const CustomMagnifier({super.key, required this.magnifierInfo});
+
+ static const Size magnifierSize = Size(200, 200);
+
+ // This magnifier will consume some text data and position itself
+ // based on the info in the magnifier.
+ final ValueNotifier<MagnifierInfo> magnifierInfo;
+
+ @override
+ Widget build(BuildContext context) {
+ // Use a value listenable builder because we want to rebuild
+ // every time the text selection info changes.
+ // `CustomMagnifier` could also be a `StatefulWidget` and call `setState`
+ // when `magnifierInfo` updates. This would be useful for more complex
+ // positioning cases.
+ return ValueListenableBuilder<MagnifierInfo>(
+ valueListenable: magnifierInfo,
+ builder: (BuildContext context,
+ MagnifierInfo currentMagnifierInfo, _) {
+ // We want to position the magnifier at the global position of the gesture.
+ Offset magnifierPosition = currentMagnifierInfo.globalGesturePosition;
+
+ // You may use the `MagnifierInfo` however you'd like:
+ // In this case, we make sure the magnifier never goes out of the current line bounds.
+ magnifierPosition = Offset(
+ clampDouble(
+ magnifierPosition.dx,
+ currentMagnifierInfo.currentLineBoundaries.left,
+ currentMagnifierInfo.currentLineBoundaries.right,
+ ),
+ clampDouble(
+ magnifierPosition.dy,
+ currentMagnifierInfo.currentLineBoundaries.top,
+ currentMagnifierInfo.currentLineBoundaries.bottom,
+ ),
+ );
+
+ // Finally, align the magnifier to the bottom center. The inital anchor is
+ // the top left, so subtract bottom center alignment.
+ magnifierPosition -= Alignment.bottomCenter.alongSize(magnifierSize);
+
+ return Positioned(
+ left: magnifierPosition.dx,
+ top: magnifierPosition.dy,
+ child: RawMagnifier(
+ magnificationScale: 2,
+ // The focal point starts at the center of the magnifier.
+ // We probably want to point below the magnifier, so
+ // offset the focal point by half the magnifier height.
+ focalPointOffset: Offset(0, magnifierSize.height / 2),
+ // Decorate it however we'd like!
+ decoration: const MagnifierDecoration(
+ shape: StarBorder(
+ side: BorderSide(
+ color: Colors.green,
+ width: 2,
+ ),
+ ),
+ ),
+ size: magnifierSize,
+ ),
+ );
+ });
+ }
+}
diff --git a/examples/api/test/widgets/magnifier/magnifier.0_test.dart b/examples/api/test/widgets/magnifier/magnifier.0_test.dart
new file mode 100644
index 0000000..b488b31
--- /dev/null
+++ b/examples/api/test/widgets/magnifier/magnifier.0_test.dart
@@ -0,0 +1,56 @@
+// 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:flutter/material.dart';
+import 'package:flutter_api_samples/widgets/magnifier/magnifier.0.dart'
+ as example;
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+ testWidgets('should update magnifier position on drag', (WidgetTester tester) async {
+ await tester.pumpWidget(const example.MyApp());
+
+ Matcher isPositionedAt(Offset at) {
+ return isA<Positioned>().having(
+ (Positioned positioned) => Offset(positioned.left!, positioned.top!),
+ 'magnifier position',
+ at,
+ );
+ }
+
+ expect(
+ tester.widget(find.byType(Positioned)),
+ isPositionedAt(Offset.zero),
+ );
+
+ final Offset centerOfFlutterLogo = tester.getCenter(find.byType(Positioned));
+ final Offset topLeftOfFlutterLogo = tester.getTopLeft(find.byType(FlutterLogo));
+
+ const Offset dragDistance = Offset(10, 10);
+
+ await tester.dragFrom(centerOfFlutterLogo, dragDistance);
+ await tester.pump();
+
+ expect(
+ tester.widget(find.byType(Positioned)),
+ // Need to adjust by the topleft since the position is local.
+ isPositionedAt((centerOfFlutterLogo - topLeftOfFlutterLogo) + dragDistance),
+ );
+ });
+
+ testWidgets('should match golden', (WidgetTester tester) async {
+ await tester.pumpWidget(const example.MyApp());
+
+ final Offset centerOfFlutterLogo = tester.getCenter(find.byType(Positioned));
+ const Offset dragDistance = Offset(10, 10);
+
+ await tester.dragFrom(centerOfFlutterLogo, dragDistance);
+ await tester.pump();
+
+ await expectLater(
+ find.byType(RepaintBoundary).last,
+ matchesGoldenFile('magnifier.0_test.png'),
+ );
+ });
+}
diff --git a/examples/api/test/widgets/text_magnifier/text_magnifier.0_test.dart b/examples/api/test/widgets/text_magnifier/text_magnifier.0_test.dart
new file mode 100644
index 0000000..c20d5d3
--- /dev/null
+++ b/examples/api/test/widgets/text_magnifier/text_magnifier.0_test.dart
@@ -0,0 +1,111 @@
+// 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:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:flutter_api_samples/widgets/text_magnifier/text_magnifier.0.dart'
+ as example;
+import 'package:flutter_test/flutter_test.dart';
+
+List<TextSelectionPoint> _globalize(
+ Iterable<TextSelectionPoint> points, RenderBox box) {
+ return points.map<TextSelectionPoint>((TextSelectionPoint point) {
+ return TextSelectionPoint(
+ box.localToGlobal(point.point),
+ point.direction,
+ );
+ }).toList();
+}
+
+RenderEditable _findRenderEditable<T extends State<StatefulWidget>>(WidgetTester tester) {
+ return (tester.state(find.byType(TextField))
+ as TextSelectionGestureDetectorBuilderDelegate)
+ .editableTextKey
+ .currentState!
+ .renderEditable;
+}
+
+Offset _textOffsetToPosition<T extends State<StatefulWidget>>(WidgetTester tester, int offset) {
+ final RenderEditable renderEditable = _findRenderEditable(tester);
+
+ final List<TextSelectionPoint> endpoints = renderEditable
+ .getEndpointsForSelection(
+ TextSelection.collapsed(offset: offset),
+ )
+ .map<TextSelectionPoint>((TextSelectionPoint point) => TextSelectionPoint(
+ renderEditable.localToGlobal(point.point),
+ point.direction,
+ ))
+ .toList();
+
+ return endpoints[0].point + const Offset(0.0, -2.0);
+}
+
+void main() {
+ const Duration durationBetweenActons = Duration(milliseconds: 20);
+ const String defaultText = 'I am a magnifier, fear me!';
+
+ Future<void> showMagnifier(WidgetTester tester, String characterToTapOn) async {
+ final Offset tapOffset = _textOffsetToPosition(tester, defaultText.indexOf(characterToTapOn));
+
+ // Double tap 'Magnifier' word to show the selection handles.
+ final TestGesture testGesture = await tester.startGesture(tapOffset);
+ await tester.pump(durationBetweenActons);
+ await testGesture.up();
+ await tester.pump(durationBetweenActons);
+ await testGesture.down(tapOffset);
+ await tester.pump(durationBetweenActons);
+ await testGesture.up();
+ await tester.pumpAndSettle();
+
+ final TextSelection selection = tester
+ .firstWidget<TextField>(find.byType(TextField))
+ .controller!
+ .selection;
+
+ final RenderEditable renderEditable = _findRenderEditable(tester);
+ final List<TextSelectionPoint> endpoints = _globalize(
+ renderEditable.getEndpointsForSelection(selection),
+ renderEditable,
+ );
+
+ final Offset handlePos = endpoints.last.point + const Offset(10.0, 10.0);
+
+ final TestGesture gesture = await tester.startGesture(handlePos);
+
+ await gesture.moveTo(
+ _textOffsetToPosition(
+ tester,
+ defaultText.length - 2,
+ ),
+ );
+ await tester.pump();
+ }
+
+ testWidgets('should show custom magnifier on drag', (WidgetTester tester) async {
+ await tester.pumpWidget(const example.MyApp(text: defaultText));
+
+ await showMagnifier(tester, 'e');
+ expect(find.byType(example.CustomMagnifier), findsOneWidget);
+
+ await expectLater(
+ find.byType(example.MyApp),
+ matchesGoldenFile('text_magnifier.0_test.png'),
+ );
+ }, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.android }));
+
+
+ for (final TextDirection textDirection in TextDirection.values) {
+ testWidgets('should show custom magnifier in $textDirection', (WidgetTester tester) async {
+ final String text = textDirection == TextDirection.rtl ? 'أثارت زر' : defaultText;
+ final String textToTapOn = textDirection == TextDirection.rtl ? 'ت' : 'e';
+
+ await tester.pumpWidget(example.MyApp(textDirection: textDirection, text: text));
+
+ await showMagnifier(tester, textToTapOn);
+
+ expect(find.byType(example.CustomMagnifier), findsOneWidget);
+ });
+ }
+}
diff --git a/packages/flutter/lib/src/cupertino/magnifier.dart b/packages/flutter/lib/src/cupertino/magnifier.dart
index 24f636b..c7b4b6d 100644
--- a/packages/flutter/lib/src/cupertino/magnifier.dart
+++ b/packages/flutter/lib/src/cupertino/magnifier.dart
@@ -9,7 +9,7 @@
/// finger may be blocking the point of interest, like a selection handle.
///
/// Delegates styling to [CupertinoMagnifier] with its position depending on
-/// [magnifierOverlayInfoBearer].
+/// [magnifierInfo].
///
/// Specifically, the [CupertinoTextMagnifier] follows the following rules.
/// [CupertinoTextMagnifier]:
@@ -21,7 +21,7 @@
/// then has vertical offset [dragResistance] * k.
class CupertinoTextMagnifier extends StatefulWidget {
/// Constructs a [RawMagnifier] in the Cupertino style, positioning with respect to
- /// [magnifierOverlayInfoBearer].
+ /// [magnifierInfo].
///
/// The default constructor parameters and constants were eyeballed on
/// an iPhone XR iOS v15.5.
@@ -32,7 +32,7 @@
this.dragResistance = 10.0,
this.hideBelowThreshold = 48.0,
this.horizontalScreenEdgePadding = 10.0,
- required this.magnifierOverlayInfoBearer,
+ required this.magnifierInfo,
});
/// The curve used for the in / out animations.
@@ -63,9 +63,9 @@
final double horizontalScreenEdgePadding;
/// [CupertinoTextMagnifier] will determine its own positioning
- /// based on the [MagnifierOverlayInfoBearer] of this notifier.
- final ValueNotifier<MagnifierOverlayInfoBearer>
- magnifierOverlayInfoBearer;
+ /// based on the [MagnifierInfo] of this notifier.
+ final ValueNotifier<MagnifierInfo>
+ magnifierInfo;
/// The duration that the magnifier drags behind its final position.
static const Duration _kDragAnimationDuration = Duration(milliseconds: 45);
@@ -95,7 +95,7 @@
)..addListener(() => setState(() {}));
widget.controller.animationController = _ioAnimationController;
- widget.magnifierOverlayInfoBearer
+ widget.magnifierInfo
.addListener(_determineMagnifierPositionAndFocalPoint);
_ioAnimation = Tween<double>(
@@ -111,16 +111,16 @@
void dispose() {
widget.controller.animationController = null;
_ioAnimationController.dispose();
- widget.magnifierOverlayInfoBearer
+ widget.magnifierInfo
.removeListener(_determineMagnifierPositionAndFocalPoint);
super.dispose();
}
@override
void didUpdateWidget(CupertinoTextMagnifier oldWidget) {
- if (oldWidget.magnifierOverlayInfoBearer != widget.magnifierOverlayInfoBearer) {
- oldWidget.magnifierOverlayInfoBearer.removeListener(_determineMagnifierPositionAndFocalPoint);
- widget.magnifierOverlayInfoBearer.addListener(_determineMagnifierPositionAndFocalPoint);
+ if (oldWidget.magnifierInfo != widget.magnifierInfo) {
+ oldWidget.magnifierInfo.removeListener(_determineMagnifierPositionAndFocalPoint);
+ widget.magnifierInfo.addListener(_determineMagnifierPositionAndFocalPoint);
}
super.didUpdateWidget(oldWidget);
}
@@ -132,8 +132,8 @@
}
void _determineMagnifierPositionAndFocalPoint() {
- final MagnifierOverlayInfoBearer textEditingContext =
- widget.magnifierOverlayInfoBearer.value;
+ final MagnifierInfo textEditingContext =
+ widget.magnifierInfo.value;
// The exact Y of the center of the current line.
final double verticalCenterOfCurrentLine =
@@ -228,7 +228,7 @@
///
/// * [RawMagnifier], the backing implementation.
/// * [CupertinoTextMagnifier], a widget that positions [CupertinoMagnifier] based on
-/// [MagnifierOverlayInfoBearer].
+/// [MagnifierInfo].
/// * [MagnifierController], the controller for this magnifier.
class CupertinoMagnifier extends StatelessWidget {
/// Creates a [RawMagnifier] in the Cupertino style.
diff --git a/packages/flutter/lib/src/cupertino/text_field.dart b/packages/flutter/lib/src/cupertino/text_field.dart
index c966c2a..68a90bb 100644
--- a/packages/flutter/lib/src/cupertino/text_field.dart
+++ b/packages/flutter/lib/src/cupertino/text_field.dart
@@ -798,9 +798,11 @@
/// platforms. If it is desired to suppress the magnifier, consider passing
/// [TextMagnifierConfiguration.disabled].
///
- // TODO(antholeole): https://github.com/flutter/flutter/issues/108041
- // once the magnifier PR lands, I should enrich this area of the
- // docs with images of what a magnifier is.
+ /// {@tool dartpad}
+ /// This sample demonstrates how to customize the magnifier that this text field uses.
+ ///
+ /// ** See code in examples/api/lib/widgets/text_magnifier/text_magnifier.0.dart **
+ /// {@end-tool}
final TextMagnifierConfiguration? magnifierConfiguration;
/// {@macro flutter.widgets.EditableText.spellCheckConfiguration}
@@ -873,14 +875,14 @@
magnifierBuilder: (
BuildContext context,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer> magnifierOverlayInfoBearer
+ ValueNotifier<MagnifierInfo> magnifierInfo
) {
switch (defaultTargetPlatform) {
case TargetPlatform.android:
case TargetPlatform.iOS:
return CupertinoTextMagnifier(
controller: controller,
- magnifierOverlayInfoBearer: magnifierOverlayInfoBearer,
+ magnifierInfo: magnifierInfo,
);
case TargetPlatform.fuchsia:
case TargetPlatform.linux:
diff --git a/packages/flutter/lib/src/material/magnifier.dart b/packages/flutter/lib/src/material/magnifier.dart
index d25cad7..64ab312 100644
--- a/packages/flutter/lib/src/material/magnifier.dart
+++ b/packages/flutter/lib/src/material/magnifier.dart
@@ -45,17 +45,17 @@
magnifierBuilder: (
BuildContext context,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer> magnifierOverlayInfoBearer,
+ ValueNotifier<MagnifierInfo> magnifierInfo,
) {
switch (defaultTargetPlatform) {
case TargetPlatform.iOS:
return CupertinoTextMagnifier(
controller: controller,
- magnifierOverlayInfoBearer: magnifierOverlayInfoBearer,
+ magnifierInfo: magnifierInfo,
);
case TargetPlatform.android:
return TextMagnifier(
- magnifierInfo: magnifierOverlayInfoBearer,
+ magnifierInfo: magnifierInfo,
);
case TargetPlatform.fuchsia:
case TargetPlatform.linux:
@@ -75,7 +75,7 @@
/// [TextMagnifier] positions itself based on [magnifierInfo].
///
/// {@macro widgets.material.magnifier.positionRules}
- final ValueNotifier<MagnifierOverlayInfoBearer>
+ final ValueNotifier<MagnifierInfo>
magnifierInfo;
@override
@@ -132,7 +132,7 @@
/// {@macro widgets.material.magnifier.positionRules}
void _determineMagnifierPositionAndFocalPoint() {
- final MagnifierOverlayInfoBearer selectionInfo =
+ final MagnifierInfo selectionInfo =
widget.magnifierInfo.value;
final Rect screenRect = Offset.zero & MediaQuery.of(context).size;
diff --git a/packages/flutter/lib/src/material/text_field.dart b/packages/flutter/lib/src/material/text_field.dart
index 9017643..992dccd 100644
--- a/packages/flutter/lib/src/material/text_field.dart
+++ b/packages/flutter/lib/src/material/text_field.dart
@@ -436,6 +436,12 @@
/// By default, builds a [CupertinoTextMagnifier] on iOS and [TextMagnifier]
/// on Android, and builds nothing on all other platforms. If it is desired to
/// suppress the magnifier, consider passing [TextMagnifierConfiguration.disabled].
+ ///
+ /// {@tool dartpad}
+ /// This sample demonstrates how to customize the magnifier that this text field uses.
+ ///
+ /// ** See code in examples/api/lib/widgets/text_magnifier/text_magnifier.0.dart **
+ /// {@end-tool}
final TextMagnifierConfiguration? magnifierConfiguration;
/// Controls the text being edited.
diff --git a/packages/flutter/lib/src/widgets/magnifier.dart b/packages/flutter/lib/src/widgets/magnifier.dart
index 973c3b5..74ef957 100644
--- a/packages/flutter/lib/src/widgets/magnifier.dart
+++ b/packages/flutter/lib/src/widgets/magnifier.dart
@@ -18,7 +18,7 @@
/// {@template flutter.widgets.magnifier.MagnifierBuilder}
/// Signature for a builder that builds a [Widget] with a [MagnifierController].
///
-/// Consuming [MagnifierController] or [ValueNotifier]<[MagnifierOverlayInfoBearer]> is not
+/// Consuming [MagnifierController] or [ValueNotifier]<[MagnifierInfo]> is not
/// required, although if a Widget intends to have entry or exit animations, it should take
/// [MagnifierController] and provide it an [AnimationController], so that [MagnifierController]
/// can wait before removing it from the overlay.
@@ -26,28 +26,28 @@
///
/// See also:
///
-/// - [MagnifierOverlayInfoBearer], the data class that updates the
+/// - [MagnifierInfo], the data class that updates the
/// magnifier.
typedef MagnifierBuilder = Widget? Function(
BuildContext context,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer> magnifierOverlayInfoBearer,
+ ValueNotifier<MagnifierInfo> magnifierInfo,
);
/// A data class that contains the geometry information of text layouts
/// and selection gestures, used to position magnifiers.
@immutable
-class MagnifierOverlayInfoBearer {
- /// Constructs a [MagnifierOverlayInfoBearer] from provided geometry values.
- const MagnifierOverlayInfoBearer({
+class MagnifierInfo {
+ /// Constructs a [MagnifierInfo] from provided geometry values.
+ const MagnifierInfo({
required this.globalGesturePosition,
required this.caretRect,
required this.fieldBounds,
required this.currentLineBoundaries,
});
- /// Const [MagnifierOverlayInfoBearer] with all values set to 0.
- static const MagnifierOverlayInfoBearer empty = MagnifierOverlayInfoBearer(
+ /// Const [MagnifierInfo] with all values set to 0.
+ static const MagnifierInfo empty = MagnifierInfo(
globalGesturePosition: Offset.zero,
caretRect: Rect.zero,
currentLineBoundaries: Rect.zero,
@@ -73,7 +73,7 @@
if (identical(this, other)) {
return true;
}
- return other is MagnifierOverlayInfoBearer
+ return other is MagnifierInfo
&& other.globalGesturePosition == globalGesturePosition
&& other.caretRect == caretRect
&& other.currentLineBoundaries == currentLineBoundaries
@@ -388,6 +388,12 @@
/// A common base class for magnifiers.
///
+/// {@tool dartpad}
+/// This sample demonstrates what a magnifier is, and how it can be used.
+///
+/// ** See code in examples/api/lib/widgets/magnifier/magnifier.0.dart **
+/// {@end-tool}
+///
/// {@template flutter.widgets.magnifier.intro}
/// This magnifying glass is useful for scenarios on mobile devices where
/// the user's finger may be covering part of the screen where a granular
diff --git a/packages/flutter/lib/src/widgets/selectable_region.dart b/packages/flutter/lib/src/widgets/selectable_region.dart
index 9995bfe..2b2f049 100644
--- a/packages/flutter/lib/src/widgets/selectable_region.dart
+++ b/packages/flutter/lib/src/widgets/selectable_region.dart
@@ -569,7 +569,7 @@
));
}
- MagnifierOverlayInfoBearer _buildInfoForMagnifier(Offset globalGesturePosition, SelectionPoint selectionPoint) {
+ MagnifierInfo _buildInfoForMagnifier(Offset globalGesturePosition, SelectionPoint selectionPoint) {
final Vector3 globalTransform = _selectable!.getTransformTo(null).getTranslation();
final Offset globalTransformAsOffset = Offset(globalTransform.x, globalTransform.y);
final Offset globalSelectionPointPosition = selectionPoint.localPosition + globalTransformAsOffset;
@@ -580,7 +580,7 @@
selectionPoint.lineHeight
);
- return MagnifierOverlayInfoBearer(
+ return MagnifierInfo(
globalGesturePosition: globalGesturePosition,
caretRect: caretRect,
fieldBounds: globalTransformAsOffset & _selectable!.size,
diff --git a/packages/flutter/lib/src/widgets/text_selection.dart b/packages/flutter/lib/src/widgets/text_selection.dart
index bcfeec4..e751b6f 100644
--- a/packages/flutter/lib/src/widgets/text_selection.dart
+++ b/packages/flutter/lib/src/widgets/text_selection.dart
@@ -543,7 +543,7 @@
return endHandleRect?.height ?? renderObject.preferredLineHeight;
}
- MagnifierOverlayInfoBearer _buildMagnifier({
+ MagnifierInfo _buildMagnifier({
required RenderEditable renderEditable,
required Offset globalGesturePosition,
required TextPosition currentTextPosition,
@@ -567,7 +567,7 @@
renderEditable.getLocalRectForCaret(positionAtEndOfLine).bottomCenter,
);
- return MagnifierOverlayInfoBearer(
+ return MagnifierInfo(
fieldBounds: globalRenderEditableTopLeft & renderEditable.size,
globalGesturePosition: globalGesturePosition,
caretRect: localCaretRect.shift(globalRenderEditableTopLeft),
@@ -808,8 +808,8 @@
final BuildContext context;
- final ValueNotifier<MagnifierOverlayInfoBearer> _magnifierOverlayInfoBearer =
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty);
+ final ValueNotifier<MagnifierInfo> _magnifierInfo =
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty);
/// [MagnifierController.show] and [MagnifierController.hide] should not be called directly, except
/// from inside [showMagnifier] and [hideMagnifier]. If it is desired to show or hide the magnifier,
@@ -836,13 +836,13 @@
/// since magnifiers may hide themselves. If this info is needed, check
/// [MagnifierController.shown].
/// {@endtemplate}
- void showMagnifier(MagnifierOverlayInfoBearer initialInfoBearer) {
+ void showMagnifier(MagnifierInfo initalMagnifierInfo) {
if (_toolbar != null) {
hideToolbar();
}
- // Start from empty, so we don't utilize any remnant values.
- _magnifierOverlayInfoBearer.value = initialInfoBearer;
+ // Start from empty, so we don't utilize any rememnant values.
+ _magnifierInfo.value = initalMagnifierInfo;
// Pre-build the magnifiers so we can tell if we've built something
// or not. If we don't build a magnifiers, then we should not
@@ -850,7 +850,7 @@
final Widget? builtMagnifier = magnifierConfiguration.magnifierBuilder(
context,
_magnifierController,
- _magnifierOverlayInfoBearer,
+ _magnifierInfo,
);
if (builtMagnifier == null) {
@@ -1300,14 +1300,14 @@
/// because the magnifier may have hidden itself and is looking for a cue to reshow
/// itself.
///
- /// If there is no magnifier in the overlay, this does nothing,
+ /// If there is no magnifier in the overlay, this does nothing.
/// {@endtemplate}
- void updateMagnifier(MagnifierOverlayInfoBearer magnifierOverlayInfoBearer) {
+ void updateMagnifier(MagnifierInfo magnifierInfo) {
if (_magnifierController.overlayEntry == null) {
return;
}
- _magnifierOverlayInfoBearer.value = magnifierOverlayInfoBearer;
+ _magnifierInfo.value = magnifierInfo;
}
}
diff --git a/packages/flutter/test/cupertino/magnifier_test.dart b/packages/flutter/test/cupertino/magnifier_test.dart
index 636b81e..845de0f 100644
--- a/packages/flutter/test/cupertino/magnifier_test.dart
+++ b/packages/flutter/test/cupertino/magnifier_test.dart
@@ -14,18 +14,18 @@
const Rect reasonableTextField = Rect.fromLTRB(0, 100, 200, 200);
final MagnifierController magnifierController = MagnifierController();
- // Make sure that your gesture in infoBearer is within the line in infoBearer,
+ // Make sure that your gesture in magnifierInfo is within the line in magnifierInfo,
// or else the magnifier status will stay hidden and this will not complete.
Future<void> showCupertinoMagnifier(
BuildContext context,
WidgetTester tester,
- ValueNotifier<MagnifierOverlayInfoBearer> infoBearer,
+ ValueNotifier<MagnifierInfo> magnifierInfo,
) async {
final Future<void> magnifierShown = magnifierController.show(
context: context,
builder: (_) => CupertinoTextMagnifier(
controller: magnifierController,
- magnifierOverlayInfoBearer: infoBearer,
+ magnifierInfo: magnifierInfo,
));
WidgetsBinding.instance.scheduleFrame();
@@ -76,9 +76,9 @@
final Rect fakeTextFieldRect =
tapPointRenderBox.localToGlobal(Offset.zero) & tapPointRenderBox.size;
- final ValueNotifier<MagnifierOverlayInfoBearer> magnifier =
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ final ValueNotifier<MagnifierInfo> magnifier =
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: fakeTextFieldRect,
fieldBounds: fakeTextFieldRect,
caretRect: fakeTextFieldRect,
@@ -110,8 +110,8 @@
await showCupertinoMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -143,8 +143,8 @@
await showCupertinoMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -176,9 +176,9 @@
final BuildContext context =
tester.firstElement(find.byType(Placeholder));
- final ValueNotifier<MagnifierOverlayInfoBearer> magnifierinfo =
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ final ValueNotifier<MagnifierInfo> magnifierinfo =
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -192,7 +192,7 @@
await showCupertinoMagnifier(context, tester, magnifierinfo);
// Move the gesture to one that should hide it.
- magnifierinfo.value = MagnifierOverlayInfoBearer(
+ magnifierinfo.value = MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -216,9 +216,9 @@
final BuildContext context =
tester.firstElement(find.byType(Placeholder));
- final ValueNotifier<MagnifierOverlayInfoBearer> magnifierInfo =
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ final ValueNotifier<MagnifierInfo> magnifierInfo =
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -231,7 +231,7 @@
await showCupertinoMagnifier(context, tester, magnifierInfo);
// Move the gesture to one that should hide it.
- magnifierInfo.value = MagnifierOverlayInfoBearer(
+ magnifierInfo.value = MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -243,7 +243,7 @@
expect(magnifierController.overlayEntry, isNotNull);
// Return the gesture to one that shows it.
- magnifierInfo.value = MagnifierOverlayInfoBearer(
+ magnifierInfo.value = MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
diff --git a/packages/flutter/test/cupertino/text_field_test.dart b/packages/flutter/test/cupertino/text_field_test.dart
index d8ff496..57a512d 100644
--- a/packages/flutter/test/cupertino/text_field_test.dart
+++ b/packages/flutter/test/cupertino/text_field_test.dart
@@ -5964,7 +5964,7 @@
});
group('magnifier', () {
- late ValueNotifier<MagnifierOverlayInfoBearer> infoBearer;
+ late ValueNotifier<MagnifierInfo> magnifierInfo;
final Widget fakeMagnifier = Container(key: UniqueKey());
group('magnifier builder', () {
@@ -5987,7 +5987,7 @@
defaultCupertinoTextField.magnifierConfiguration!.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
),
isA<Widget>().having((Widget widget) => widget.key, 'key', equals(customMagnifier.key)));
});
@@ -6005,7 +6005,7 @@
editableText.magnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
),
isA<CupertinoTextMagnifier>());
},
@@ -6025,7 +6025,7 @@
editableText.magnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
),
isNull);
},
@@ -6046,9 +6046,9 @@
magnifierConfiguration: TextMagnifierConfiguration(
magnifierBuilder: (_,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer>
- localInfoBearer) {
- infoBearer = localInfoBearer;
+ ValueNotifier<MagnifierInfo>
+ localMagnifierInfo) {
+ magnifierInfo = localMagnifierInfo;
return fakeMagnifier;
}),
),
@@ -6086,14 +6086,14 @@
await tester.pump();
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
- firstDragGesturePosition = infoBearer.value.globalGesturePosition;
+ firstDragGesturePosition = magnifierInfo.value.globalGesturePosition;
await gesture.moveTo(textOffsetToPosition(tester, testValue.length));
await tester.pump();
// Expect the position the magnifier gets to have moved.
expect(firstDragGesturePosition,
- isNot(infoBearer.value.globalGesturePosition));
+ isNot(magnifierInfo.value.globalGesturePosition));
await gesture.up();
await tester.pump();
@@ -6114,9 +6114,9 @@
magnifierBuilder: (
_,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer> localInfoBearer
+ ValueNotifier<MagnifierInfo> localMagnifierInfo
) {
- infoBearer = localInfoBearer;
+ magnifierInfo = localMagnifierInfo;
return fakeMagnifier;
},
),
@@ -6144,7 +6144,7 @@
expect(controller.selection.extentOffset, 5);
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
- final Offset firstLongPressGesturePosition = infoBearer.value.globalGesturePosition;
+ final Offset firstLongPressGesturePosition = magnifierInfo.value.globalGesturePosition;
// Move the gesture to 'h' to update the magnifier and move the cursor to 'h'.
await gesture.moveTo(textOffsetToPosition(tester, testValue.indexOf('h')));
@@ -6153,7 +6153,7 @@
expect(controller.selection.extentOffset, 9);
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
// Expect the position the magnifier gets to have moved.
- expect(firstLongPressGesturePosition, isNot(infoBearer.value.globalGesturePosition));
+ expect(firstLongPressGesturePosition, isNot(magnifierInfo.value.globalGesturePosition));
// End the long press to hide the magnifier.
await gesture.up();
diff --git a/packages/flutter/test/material/magnifier_test.dart b/packages/flutter/test/material/magnifier_test.dart
index 2b0c7bb..e777c7f 100644
--- a/packages/flutter/test/material/magnifier_test.dart
+++ b/packages/flutter/test/material/magnifier_test.dart
@@ -28,12 +28,12 @@
Future<void> showMagnifier(
BuildContext context,
WidgetTester tester,
- ValueNotifier<MagnifierOverlayInfoBearer> infoBearer,
+ ValueNotifier<MagnifierInfo> magnifierInfo,
) async {
final Future<void> magnifierShown = magnifierController.show(
context: context,
builder: (_) => TextMagnifier(
- magnifierInfo: infoBearer,
+ magnifierInfo: magnifierInfo,
));
WidgetsBinding.instance.scheduleFrame();
@@ -60,7 +60,7 @@
final Widget? builtWidget = TextMagnifier.adaptiveMagnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
);
expect(builtWidget, isA<TextMagnifier>());
@@ -77,7 +77,7 @@
final Widget? builtWidget = TextMagnifier.adaptiveMagnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
);
expect(builtWidget, isA<CupertinoTextMagnifier>());
@@ -94,7 +94,7 @@
final Widget? builtWidget = TextMagnifier.adaptiveMagnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
);
expect(builtWidget, isNull);
@@ -144,9 +144,9 @@
tapPointRenderBox.localToGlobal(Offset.zero) &
tapPointRenderBox.size;
- final ValueNotifier<MagnifierOverlayInfoBearer> magnifierInfo =
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ final ValueNotifier<MagnifierInfo> magnifierInfo =
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: fakeTextFieldRect,
fieldBounds: fakeTextFieldRect,
caretRect: fakeTextFieldRect,
@@ -179,8 +179,8 @@
await showMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
// Inflate these two to make sure we're bounding on the
// current line boundaries, not anything else.
@@ -212,8 +212,8 @@
await showMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
// Inflate these two to make sure we're bounding on the
// current line boundaries, not anything else.
@@ -240,8 +240,8 @@
await showMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -267,8 +267,8 @@
await showMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: topOfScreenTextFieldRect,
fieldBounds: topOfScreenTextFieldRect,
caretRect: topOfScreenTextFieldRect,
@@ -300,8 +300,8 @@
await showMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -331,8 +331,8 @@
await showMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: topOfScreenTextFieldRect,
fieldBounds: topOfScreenTextFieldRect,
caretRect: topOfScreenTextFieldRect,
@@ -364,8 +364,8 @@
await showMagnifier(
context,
tester,
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -386,9 +386,9 @@
final BuildContext context =
tester.firstElement(find.byType(Placeholder));
- final ValueNotifier<MagnifierOverlayInfoBearer> magnifierPositioner =
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ final ValueNotifier<MagnifierInfo> magnifierPositioner =
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -399,7 +399,7 @@
await showMagnifier(context, tester, magnifierPositioner);
// New position has a horizontal shift.
- magnifierPositioner.value = MagnifierOverlayInfoBearer(
+ magnifierPositioner.value = MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -422,9 +422,9 @@
final BuildContext context =
tester.firstElement(find.byType(Placeholder));
- final ValueNotifier<MagnifierOverlayInfoBearer> magnifierPositioner =
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ final ValueNotifier<MagnifierInfo> magnifierPositioner =
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -435,7 +435,7 @@
await showMagnifier(context, tester, magnifierPositioner);
// New position has a vertical shift.
- magnifierPositioner.value = MagnifierOverlayInfoBearer(
+ magnifierPositioner.value = MagnifierInfo(
currentLineBoundaries: reasonableTextField.shift(verticalShift),
fieldBounds: Rect.fromPoints(reasonableTextField.topLeft,
reasonableTextField.bottomRight + verticalShift),
@@ -458,9 +458,9 @@
final BuildContext context =
tester.firstElement(find.byType(Placeholder));
- final ValueNotifier<MagnifierOverlayInfoBearer> magnifierPositioner =
- ValueNotifier<MagnifierOverlayInfoBearer>(
- MagnifierOverlayInfoBearer(
+ final ValueNotifier<MagnifierInfo> magnifierPositioner =
+ ValueNotifier<MagnifierInfo>(
+ MagnifierInfo(
currentLineBoundaries: reasonableTextField,
fieldBounds: reasonableTextField,
caretRect: reasonableTextField,
@@ -471,7 +471,7 @@
await showMagnifier(context, tester, magnifierPositioner);
// New position has a vertical shift.
- magnifierPositioner.value = MagnifierOverlayInfoBearer(
+ magnifierPositioner.value = MagnifierInfo(
currentLineBoundaries: reasonableTextField.shift(verticalShift),
fieldBounds: Rect.fromPoints(reasonableTextField.topLeft,
reasonableTextField.bottomRight + verticalShift),
diff --git a/packages/flutter/test/material/text_field_test.dart b/packages/flutter/test/material/text_field_test.dart
index 89a3f01..731a76b 100644
--- a/packages/flutter/test/material/text_field_test.dart
+++ b/packages/flutter/test/material/text_field_test.dart
@@ -12032,7 +12032,7 @@
textField.magnifierConfiguration!.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
),
isA<Widget>().having(
(Widget widget) => widget.key,
@@ -12053,7 +12053,7 @@
editableText.magnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
),
isA<TextMagnifier>());
}, variant: TargetPlatformVariant.only(TargetPlatform.android));
@@ -12071,7 +12071,7 @@
editableText.magnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
),
isA<CupertinoTextMagnifier>());
}, variant: TargetPlatformVariant.only(TargetPlatform.iOS));
@@ -12089,7 +12089,7 @@
editableText.magnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty),
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty),
),
isNull);
},
@@ -12101,7 +12101,7 @@
});
group('magnifier', () {
- late ValueNotifier<MagnifierOverlayInfoBearer> infoBearer;
+ late ValueNotifier<MagnifierInfo> magnifierInfo;
final Widget fakeMagnifier = Container(key: UniqueKey());
testWidgets(
@@ -12117,9 +12117,9 @@
magnifierBuilder: (
_,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer> localInfoBearer
+ ValueNotifier<MagnifierInfo> localMagnifierInfo
) {
- infoBearer = localInfoBearer;
+ magnifierInfo = localMagnifierInfo;
return fakeMagnifier;
},
),
@@ -12153,14 +12153,14 @@
await tester.pump();
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
- final Offset firstDragGesturePosition = infoBearer.value.globalGesturePosition;
+ final Offset firstDragGesturePosition = magnifierInfo.value.globalGesturePosition;
await gesture.moveTo(textOffsetToPosition(tester, testValue.length));
await tester.pump();
// Expect the position the magnifier gets to have moved.
expect(firstDragGesturePosition,
- isNot(infoBearer.value.globalGesturePosition));
+ isNot(magnifierInfo.value.globalGesturePosition));
await gesture.up();
await tester.pump();
@@ -12182,9 +12182,9 @@
magnifierBuilder: (
_,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer> localInfoBearer
+ ValueNotifier<MagnifierInfo> localMagnifierInfo
) {
- infoBearer = localInfoBearer;
+ magnifierInfo = localMagnifierInfo;
return fakeMagnifier;
},
),
@@ -12214,7 +12214,7 @@
expect(controller.selection.extentOffset, isTargetPlatformAndroid ? 7 : 5);
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
- final Offset firstLongPressGesturePosition = infoBearer.value.globalGesturePosition;
+ final Offset firstLongPressGesturePosition = magnifierInfo.value.globalGesturePosition;
// Move the gesture to 'h' on Android to update the magnifier and select 'ghi'.
// Move the gesture to 'h' on iOS to update the magnifier and move the cursor to 'h'.
@@ -12224,7 +12224,7 @@
expect(controller.selection.extentOffset, isTargetPlatformAndroid ? 11 : 9);
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
// Expect the position the magnifier gets to have moved.
- expect(firstLongPressGesturePosition, isNot(infoBearer.value.globalGesturePosition));
+ expect(firstLongPressGesturePosition, isNot(magnifierInfo.value.globalGesturePosition));
// End the long press to hide the magnifier.
await gesture.up();
diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart
index 71bd089..2054c0b 100644
--- a/packages/flutter/test/widgets/editable_text_test.dart
+++ b/packages/flutter/test/widgets/editable_text_test.dart
@@ -12919,7 +12919,7 @@
editableText.magnifierConfiguration.magnifierBuilder(
context,
MagnifierController(),
- ValueNotifier<MagnifierOverlayInfoBearer>(MagnifierOverlayInfoBearer.empty)
+ ValueNotifier<MagnifierInfo>(MagnifierInfo.empty)
),
isNull,
);
diff --git a/packages/flutter/test/widgets/selectable_region_test.dart b/packages/flutter/test/widgets/selectable_region_test.dart
index e534f9d..42f749c 100644
--- a/packages/flutter/test/widgets/selectable_region_test.dart
+++ b/packages/flutter/test/widgets/selectable_region_test.dart
@@ -1101,7 +1101,7 @@
}, skip: kIsWeb); // [intended] Web uses its native context menu.
group('magnifier', () {
- late ValueNotifier<MagnifierOverlayInfoBearer> infoBearer;
+ late ValueNotifier<MagnifierInfo> magnifierInfo;
final Widget fakeMagnifier = Container(key: UniqueKey());
testWidgets('Can drag handles to show, unshow, and update magnifier',
@@ -1114,9 +1114,9 @@
magnifierConfiguration: TextMagnifierConfiguration(
magnifierBuilder: (_,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer>
- localInfoBearer) {
- infoBearer = localInfoBearer;
+ ValueNotifier<MagnifierInfo>
+ localMagnifierInfo) {
+ magnifierInfo = localMagnifierInfo;
return fakeMagnifier;
},
),
@@ -1151,14 +1151,14 @@
// Expect the magnifier to show and then store it's position.
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
final Offset firstDragGesturePosition =
- infoBearer.value.globalGesturePosition;
+ magnifierInfo.value.globalGesturePosition;
await gesture.moveTo(textOffsetToPosition(paragraph, text.length));
await tester.pump();
// Expect the position the magnifier gets to have moved.
expect(firstDragGesturePosition,
- isNot(infoBearer.value.globalGesturePosition));
+ isNot(magnifierInfo.value.globalGesturePosition));
// Lift the pointer and expect the magnifier to disappear.
await gesture.up();
diff --git a/packages/flutter/test/widgets/selectable_text_test.dart b/packages/flutter/test/widgets/selectable_text_test.dart
index a364667..173140e 100644
--- a/packages/flutter/test/widgets/selectable_text_test.dart
+++ b/packages/flutter/test/widgets/selectable_text_test.dart
@@ -5153,7 +5153,7 @@
});
group('magnifier', () {
- late ValueNotifier<MagnifierOverlayInfoBearer> infoBearer;
+ late ValueNotifier<MagnifierInfo> magnifierInfo;
final Widget fakeMagnifier = Container(key: UniqueKey());
testWidgets(
@@ -5166,9 +5166,9 @@
magnifierBuilder: (
_,
MagnifierController controller,
- ValueNotifier<MagnifierOverlayInfoBearer> localInfoBearer
+ ValueNotifier<MagnifierInfo> localMagnifierInfo
) {
- infoBearer = localInfoBearer;
+ magnifierInfo = localMagnifierInfo;
return fakeMagnifier;
},
)
@@ -5209,14 +5209,14 @@
await tester.pump();
expect(find.byKey(fakeMagnifier.key!), findsOneWidget);
- firstDragGesturePosition = infoBearer.value.globalGesturePosition;
+ firstDragGesturePosition = magnifierInfo.value.globalGesturePosition;
await gesture.moveTo(textOffsetToPosition(tester, testValue.length));
await tester.pump();
// Expect the position the magnifier gets to have moved.
expect(firstDragGesturePosition,
- isNot(infoBearer.value.globalGesturePosition));
+ isNot(magnifierInfo.value.globalGesturePosition));
await gesture.up();
await tester.pump();
diff --git a/packages/flutter/test/widgets/text_selection_test.dart b/packages/flutter/test/widgets/text_selection_test.dart
index a683a44..9bd61f9 100644
--- a/packages/flutter/test/widgets/text_selection_test.dart
+++ b/packages/flutter/test/widgets/text_selection_test.dart
@@ -1256,7 +1256,7 @@
tester,
magnifierConfiguration: TextMagnifierConfiguration(
shouldDisplayHandlesInMagnifier: false,
- magnifierBuilder: (BuildContext context, MagnifierController controller, ValueNotifier<MagnifierOverlayInfoBearer>? notifier) {
+ magnifierBuilder: (BuildContext context, MagnifierController controller, ValueNotifier<MagnifierInfo>? notifier) {
return SizedBox.shrink(
key: magnifierKey,
);
@@ -1266,7 +1266,7 @@
expect(find.byKey(magnifierKey), findsNothing);
- final MagnifierOverlayInfoBearer info = MagnifierOverlayInfoBearer(
+ final MagnifierInfo info = MagnifierInfo(
globalGesturePosition: Offset.zero,
caretRect: Offset.zero & const Size(5.0, 20.0),
fieldBounds: Offset.zero & const Size(200.0, 50.0),