Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
014b441d
Unverified
Commit
014b441d
authored
Dec 01, 2022
by
Justin McCandless
Committed by
GitHub
Dec 01, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "iOS 16 context menu (#115805)" (#116312)
This reverts commit
1cb16a1e
.
parent
e9353274
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
26 additions
and
112 deletions
+26
-112
text_selection_toolbar.dart
...ges/flutter/lib/src/cupertino/text_selection_toolbar.dart
+8
-36
text_selection_toolbar_button.dart
...tter/lib/src/cupertino/text_selection_toolbar_button.dart
+16
-29
text_field_test.dart
packages/flutter/test/cupertino/text_field_test.dart
+2
-6
text_selection_toolbar_test.dart
...s/flutter/test/cupertino/text_selection_toolbar_test.dart
+0
-41
No files found.
packages/flutter/lib/src/cupertino/text_selection_toolbar.dart
View file @
014b441d
...
@@ -5,13 +5,11 @@
...
@@ -5,13 +5,11 @@
import
'dart:collection'
;
import
'dart:collection'
;
import
'dart:ui'
as
ui
;
import
'dart:ui'
as
ui
;
import
'package:flutter/foundation.dart'
show
Brightness
,
clampDouble
;
import
'package:flutter/foundation.dart'
show
clampDouble
;
import
'package:flutter/rendering.dart'
;
import
'package:flutter/rendering.dart'
;
import
'package:flutter/widgets.dart'
;
import
'package:flutter/widgets.dart'
;
import
'colors.dart'
;
import
'text_selection_toolbar_button.dart'
;
import
'text_selection_toolbar_button.dart'
;
import
'theme.dart'
;
// Values extracted from https://developer.apple.com/design/resources/.
// Values extracted from https://developer.apple.com/design/resources/.
// The height of the toolbar, including the arrow.
// The height of the toolbar, including the arrow.
...
@@ -31,27 +29,9 @@ const double _kArrowScreenPadding = 26.0;
...
@@ -31,27 +29,9 @@ const double _kArrowScreenPadding = 26.0;
// Values extracted from https://developer.apple.com/design/resources/.
// Values extracted from https://developer.apple.com/design/resources/.
const
Radius
_kToolbarBorderRadius
=
Radius
.
circular
(
8
);
const
Radius
_kToolbarBorderRadius
=
Radius
.
circular
(
8
);
const
CupertinoDynamicColor
_kToolbarDividerColor
=
CupertinoDynamicColor
.
withBrightness
(
// Colors extracted from https://developer.apple.com/design/resources/.
// This value was extracted from a screenshot of iOS 16.0.3, as light mode
// TODO(LongCatIsLooong): https://github.com/flutter/flutter/issues/41507.
// didn't appear in the Apple design resources assets linked below.
const
Color
_kToolbarDividerColor
=
Color
(
0xFF808080
);
color:
Color
(
0xFFB6B6B6
),
// Color extracted from https://developer.apple.com/design/resources/.
// TODO(LongCatIsLooong): https://github.com/flutter/flutter/issues/41507.
darkColor:
Color
(
0xFF808080
),
);
// These values were extracted from a screenshot of iOS 16.0.3, as light mode
// didn't appear in the Apple design resources assets linked above.
final
BoxDecoration
_kToolbarShadow
=
BoxDecoration
(
borderRadius:
const
BorderRadius
.
all
(
_kToolbarBorderRadius
),
boxShadow:
<
BoxShadow
>[
BoxShadow
(
color:
CupertinoColors
.
black
.
withOpacity
(
0.1
),
blurRadius:
16.0
,
offset:
Offset
(
0
,
_kToolbarArrowSize
.
height
/
2
),
),
],
);
/// The type for a Function that builds a toolbar's container with the given
/// The type for a Function that builds a toolbar's container with the given
/// child.
/// child.
...
@@ -139,23 +119,14 @@ class CupertinoTextSelectionToolbar extends StatelessWidget {
...
@@ -139,23 +119,14 @@ class CupertinoTextSelectionToolbar extends StatelessWidget {
// Builds a toolbar just like the default iOS toolbar, with the right color
// Builds a toolbar just like the default iOS toolbar, with the right color
// background and a rounded cutout with an arrow.
// background and a rounded cutout with an arrow.
static
Widget
_defaultToolbarBuilder
(
BuildContext
context
,
Offset
anchor
,
bool
isAbove
,
Widget
child
)
{
static
Widget
_defaultToolbarBuilder
(
BuildContext
context
,
Offset
anchor
,
bool
isAbove
,
Widget
child
)
{
final
Widget
outputChild
=
_CupertinoTextSelectionToolbarShape
(
return
_CupertinoTextSelectionToolbarShape
(
anchor:
anchor
,
anchor:
anchor
,
isAbove:
isAbove
,
isAbove:
isAbove
,
child:
DecoratedBox
(
child:
DecoratedBox
(
decoration:
const
BoxDecoration
(
decoration:
const
BoxDecoration
(
color:
_kToolbarDividerColor
),
color:
_kToolbarDividerColor
,
),
child:
child
,
child:
child
,
),
),
);
);
if
(
CupertinoTheme
.
brightnessOf
(
context
)
==
Brightness
.
dark
)
{
return
outputChild
;
}
return
DecoratedBox
(
decoration:
_kToolbarShadow
,
child:
outputChild
,
);
}
}
@override
@override
...
@@ -255,6 +226,7 @@ class _RenderCupertinoTextSelectionToolbarShape extends RenderShiftedBox {
...
@@ -255,6 +226,7 @@ class _RenderCupertinoTextSelectionToolbarShape extends RenderShiftedBox {
super
.
child
,
super
.
child
,
);
);
@override
@override
bool
get
isRepaintBoundary
=>
true
;
bool
get
isRepaintBoundary
=>
true
;
...
@@ -513,7 +485,7 @@ class _CupertinoTextSelectionToolbarContentState extends State<_CupertinoTextSel
...
@@ -513,7 +485,7 @@ class _CupertinoTextSelectionToolbarContentState extends State<_CupertinoTextSel
onPressed:
_handleNextPage
,
onPressed:
_handleNextPage
,
text:
'▶'
,
text:
'▶'
,
),
),
nextButtonDisabled:
const
CupertinoTextSelectionToolbarButton
.
text
(
nextButtonDisabled:
CupertinoTextSelectionToolbarButton
.
text
(
text:
'▶'
,
text:
'▶'
,
),
),
children:
widget
.
children
,
children:
widget
.
children
,
...
...
packages/flutter/lib/src/cupertino/text_selection_toolbar_button.dart
View file @
014b441d
...
@@ -18,17 +18,7 @@ const TextStyle _kToolbarButtonFontStyle = TextStyle(
...
@@ -18,17 +18,7 @@ const TextStyle _kToolbarButtonFontStyle = TextStyle(
// Colors extracted from https://developer.apple.com/design/resources/.
// Colors extracted from https://developer.apple.com/design/resources/.
// TODO(LongCatIsLooong): https://github.com/flutter/flutter/issues/41507.
// TODO(LongCatIsLooong): https://github.com/flutter/flutter/issues/41507.
const
CupertinoDynamicColor
_kToolbarBackgroundColor
=
CupertinoDynamicColor
.
withBrightness
(
const
Color
_kToolbarBackgroundColor
=
Color
(
0xEB202020
);
// This value was extracted from a screenshot of iOS 16.0.3, as light mode
// didn't appear in the Apple design resources assets linked above.
color:
Color
(
0xEB202020
),
darkColor:
Color
(
0xEBF7F7F7
),
);
const
CupertinoDynamicColor
_kToolbarTextColor
=
CupertinoDynamicColor
.
withBrightness
(
color:
CupertinoColors
.
black
,
darkColor:
CupertinoColors
.
white
,
);
// Eyeballed value.
// Eyeballed value.
const
EdgeInsets
_kToolbarButtonPadding
=
EdgeInsets
.
symmetric
(
vertical:
16.0
,
horizontal:
18.0
);
const
EdgeInsets
_kToolbarButtonPadding
=
EdgeInsets
.
symmetric
(
vertical:
16.0
,
horizontal:
18.0
);
...
@@ -43,17 +33,22 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
...
@@ -43,17 +33,22 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
this
.
onPressed
,
this
.
onPressed
,
required
Widget
this
.
child
,
required
Widget
this
.
child
,
})
:
assert
(
child
!=
null
),
})
:
assert
(
child
!=
null
),
text
=
null
,
buttonItem
=
null
;
buttonItem
=
null
;
/// Create an instance of [CupertinoTextSelectionToolbarButton] whose child is
/// Create an instance of [CupertinoTextSelectionToolbarButton] whose child is
/// a [Text] widget styled like the default iOS text selection toolbar button.
/// a [Text] widget styled like the default iOS text selection toolbar button.
const
CupertinoTextSelectionToolbarButton
.
text
({
CupertinoTextSelectionToolbarButton
.
text
({
super
.
key
,
super
.
key
,
this
.
onPressed
,
this
.
onPressed
,
required
this
.
text
,
required
String
text
,
})
:
buttonItem
=
null
,
})
:
buttonItem
=
null
,
child
=
null
;
child
=
Text
(
text
,
overflow:
TextOverflow
.
ellipsis
,
style:
_kToolbarButtonFontStyle
.
copyWith
(
color:
onPressed
!=
null
?
CupertinoColors
.
white
:
CupertinoColors
.
inactiveGray
,
),
);
/// Create an instance of [CupertinoTextSelectionToolbarButton] from the given
/// Create an instance of [CupertinoTextSelectionToolbarButton] from the given
/// [ContextMenuButtonItem].
/// [ContextMenuButtonItem].
...
@@ -64,7 +59,6 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
...
@@ -64,7 +59,6 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
required
ContextMenuButtonItem
this
.
buttonItem
,
required
ContextMenuButtonItem
this
.
buttonItem
,
})
:
assert
(
buttonItem
!=
null
),
})
:
assert
(
buttonItem
!=
null
),
child
=
null
,
child
=
null
,
text
=
null
,
onPressed
=
buttonItem
.
onPressed
;
onPressed
=
buttonItem
.
onPressed
;
/// {@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child}
/// {@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child}
...
@@ -85,10 +79,6 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
...
@@ -85,10 +79,6 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
/// {@endtemplate}
/// {@endtemplate}
final
ContextMenuButtonItem
?
buttonItem
;
final
ContextMenuButtonItem
?
buttonItem
;
/// The text used in the button's label when using
/// [CupertinoTextSelectionToolbarButton.text].
final
String
?
text
;
/// Returns the default button label String for the button of the given
/// Returns the default button label String for the button of the given
/// [ContextMenuButtonItem]'s [ContextMenuButtonType].
/// [ContextMenuButtonItem]'s [ContextMenuButtonType].
static
String
getButtonLabel
(
BuildContext
context
,
ContextMenuButtonItem
buttonItem
)
{
static
String
getButtonLabel
(
BuildContext
context
,
ContextMenuButtonItem
buttonItem
)
{
...
@@ -115,15 +105,12 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
...
@@ -115,15 +105,12 @@ class CupertinoTextSelectionToolbarButton extends StatelessWidget {
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
final
Widget
child
=
this
.
child
??
Text
(
final
Widget
child
=
this
.
child
??
Text
(
text
??
getButtonLabel
(
context
,
buttonItem
!),
getButtonLabel
(
context
,
buttonItem
!),
overflow:
TextOverflow
.
ellipsis
,
overflow:
TextOverflow
.
ellipsis
,
style:
_kToolbarButtonFontStyle
.
copyWith
(
style:
_kToolbarButtonFontStyle
.
copyWith
(
color:
onPressed
!=
null
color:
onPressed
!=
null
?
CupertinoColors
.
white
:
CupertinoColors
.
inactiveGray
,
?
_kToolbarTextColor
:
CupertinoColors
.
inactiveGray
,
),
),
);
);
return
CupertinoButton
(
return
CupertinoButton
(
borderRadius:
null
,
borderRadius:
null
,
color:
_kToolbarBackgroundColor
,
color:
_kToolbarBackgroundColor
,
...
...
packages/flutter/test/cupertino/text_field_test.dart
View file @
014b441d
...
@@ -1523,11 +1523,7 @@ void main() {
...
@@ -1523,11 +1523,7 @@ void main() {
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
Text
text
=
tester
.
widget
<
Text
>(
find
.
text
(
'Paste'
));
Text
text
=
tester
.
widget
<
Text
>(
find
.
text
(
'Paste'
));
const
CupertinoDynamicColor
toolbarTextColor
=
CupertinoDynamicColor
.
withBrightness
(
expect
(
text
.
style
!.
color
,
CupertinoColors
.
white
);
color:
CupertinoColors
.
black
,
darkColor:
CupertinoColors
.
white
,
);
expect
(
text
.
style
!.
color
,
toolbarTextColor
);
expect
(
text
.
style
!.
fontSize
,
14
);
expect
(
text
.
style
!.
fontSize
,
14
);
expect
(
text
.
style
!.
letterSpacing
,
-
0.15
);
expect
(
text
.
style
!.
letterSpacing
,
-
0.15
);
expect
(
text
.
style
!.
fontWeight
,
FontWeight
.
w400
);
expect
(
text
.
style
!.
fontWeight
,
FontWeight
.
w400
);
...
@@ -1559,7 +1555,7 @@ void main() {
...
@@ -1559,7 +1555,7 @@ void main() {
text
=
tester
.
widget
<
Text
>(
find
.
text
(
'Paste'
));
text
=
tester
.
widget
<
Text
>(
find
.
text
(
'Paste'
));
// The toolbar buttons' text are still the same style.
// The toolbar buttons' text are still the same style.
expect
(
text
.
style
!.
color
,
toolbarTextColor
);
expect
(
text
.
style
!.
color
,
CupertinoColors
.
white
);
expect
(
text
.
style
!.
fontSize
,
14
);
expect
(
text
.
style
!.
fontSize
,
14
);
expect
(
text
.
style
!.
letterSpacing
,
-
0.15
);
expect
(
text
.
style
!.
letterSpacing
,
-
0.15
);
expect
(
text
.
style
!.
fontWeight
,
FontWeight
.
w400
);
expect
(
text
.
style
!.
fontWeight
,
FontWeight
.
w400
);
...
...
packages/flutter/test/cupertino/text_selection_toolbar_test.dart
View file @
014b441d
...
@@ -60,11 +60,6 @@ class TestBox extends SizedBox {
...
@@ -60,11 +60,6 @@ class TestBox extends SizedBox {
static
const
double
itemWidth
=
100.0
;
static
const
double
itemWidth
=
100.0
;
}
}
const
CupertinoDynamicColor
_kToolbarBackgroundColor
=
CupertinoDynamicColor
.
withBrightness
(
color:
Color
(
0xEB202020
),
darkColor:
Color
(
0xEBF7F7F7
),
);
void
main
(
)
{
void
main
(
)
{
TestWidgetsFlutterBinding
.
ensureInitialized
();
TestWidgetsFlutterBinding
.
ensureInitialized
();
...
@@ -267,40 +262,4 @@ void main() {
...
@@ -267,40 +262,4 @@ void main() {
expect
(
find
.
text
(
'Paste'
),
findsNothing
);
expect
(
find
.
text
(
'Paste'
),
findsNothing
);
expect
(
find
.
text
(
'Select all'
),
findsNothing
);
expect
(
find
.
text
(
'Select all'
),
findsNothing
);
},
skip:
kIsWeb
);
// [intended] We do not use Flutter-rendered context menu on the Web.
},
skip:
kIsWeb
);
// [intended] We do not use Flutter-rendered context menu on the Web.
testWidgets
(
'draws dark buttons in dark mode and light button in light mode'
,
(
WidgetTester
tester
)
async
{
for
(
final
Brightness
brightness
in
Brightness
.
values
)
{
await
tester
.
pumpWidget
(
CupertinoApp
(
home:
Center
(
child:
Builder
(
builder:
(
BuildContext
context
)
{
return
MediaQuery
(
data:
MediaQuery
.
of
(
context
).
copyWith
(
platformBrightness:
brightness
),
child:
CupertinoTextSelectionToolbar
(
anchorAbove:
const
Offset
(
100.0
,
0.0
),
anchorBelow:
const
Offset
(
100.0
,
0.0
),
children:
<
Widget
>[
CupertinoTextSelectionToolbarButton
.
text
(
onPressed:
()
{},
text:
'Button'
,
),
],
),
);
},
),
),
),
);
final
Finder
buttonFinder
=
find
.
byType
(
CupertinoButton
);
expect
(
find
.
byType
(
CupertinoButton
),
findsOneWidget
);
final
CupertinoButton
button
=
tester
.
widget
(
buttonFinder
);
expect
(
button
.
color
,
_kToolbarBackgroundColor
,
);
}
},
skip:
kIsWeb
);
// [intended] We do not use Flutter-rendered context menu on the Web.
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment