Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit c74a646

Browse files
authored
Clean up ClipboardStatusNotifier (#98951)
* Clean up ClipboardStatusNotifier * fix * fix test * more refactaaaaagit add .
1 parent 1178c8e commit c74a646

11 files changed

+72
-162
lines changed

packages/flutter/lib/src/cupertino/desktop_text_selection.dart

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5+
import 'package:flutter/foundation.dart';
56
import 'package:flutter/gestures.dart';
67
import 'package:flutter/rendering.dart';
78
import 'package:flutter/widgets.dart';
@@ -48,15 +49,15 @@ class _CupertinoDesktopTextSelectionControls extends TextSelectionControls {
4849
Offset selectionMidpoint,
4950
List<TextSelectionPoint> endpoints,
5051
TextSelectionDelegate delegate,
51-
ClipboardStatusNotifier clipboardStatus,
52+
ValueListenable<ClipboardStatus>? clipboardStatus,
5253
Offset? lastSecondaryTapDownPosition,
5354
) {
5455
return _CupertinoDesktopTextSelectionControlsToolbar(
5556
clipboardStatus: clipboardStatus,
5657
endpoints: endpoints,
5758
globalEditableRegion: globalEditableRegion,
58-
handleCut: canCut(delegate) ? () => handleCut(delegate, clipboardStatus) : null,
59-
handleCopy: canCopy(delegate) ? () => handleCopy(delegate, clipboardStatus) : null,
59+
handleCut: canCut(delegate) ? () => handleCut(delegate) : null,
60+
handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null,
6061
handlePaste: canPaste(delegate) ? () => handlePaste(delegate) : null,
6162
handleSelectAll: canSelectAll(delegate) ? () => handleSelectAll(delegate) : null,
6263
selectionMidpoint: selectionMidpoint,
@@ -98,7 +99,7 @@ class _CupertinoDesktopTextSelectionControlsToolbar extends StatefulWidget {
9899
required this.lastSecondaryTapDownPosition,
99100
}) : super(key: key);
100101

101-
final ClipboardStatusNotifier? clipboardStatus;
102+
final ValueListenable<ClipboardStatus>? clipboardStatus;
102103
final List<TextSelectionPoint> endpoints;
103104
final Rect globalEditableRegion;
104105
final VoidCallback? handleCopy;
@@ -114,8 +115,6 @@ class _CupertinoDesktopTextSelectionControlsToolbar extends StatefulWidget {
114115
}
115116

116117
class _CupertinoDesktopTextSelectionControlsToolbarState extends State<_CupertinoDesktopTextSelectionControlsToolbar> {
117-
ClipboardStatusNotifier? _clipboardStatus;
118-
119118
void _onChangedClipboardStatus() {
120119
setState(() {
121120
// Inform the widget that the value of clipboardStatus has changed.
@@ -125,46 +124,28 @@ class _CupertinoDesktopTextSelectionControlsToolbarState extends State<_Cupertin
125124
@override
126125
void initState() {
127126
super.initState();
128-
if (widget.handlePaste != null) {
129-
_clipboardStatus = widget.clipboardStatus ?? ClipboardStatusNotifier();
130-
_clipboardStatus!.addListener(_onChangedClipboardStatus);
131-
_clipboardStatus!.update();
132-
}
127+
widget.clipboardStatus?.addListener(_onChangedClipboardStatus);
133128
}
134129

135130
@override
136131
void didUpdateWidget(_CupertinoDesktopTextSelectionControlsToolbar oldWidget) {
137132
super.didUpdateWidget(oldWidget);
138133
if (oldWidget.clipboardStatus != widget.clipboardStatus) {
139-
if (_clipboardStatus != null) {
140-
_clipboardStatus!.removeListener(_onChangedClipboardStatus);
141-
_clipboardStatus!.dispose();
142-
}
143-
_clipboardStatus = widget.clipboardStatus ?? ClipboardStatusNotifier();
144-
_clipboardStatus!.addListener(_onChangedClipboardStatus);
145-
if (widget.handlePaste != null) {
146-
_clipboardStatus!.update();
147-
}
134+
oldWidget.clipboardStatus?.removeListener(_onChangedClipboardStatus);
135+
widget.clipboardStatus?.addListener(_onChangedClipboardStatus);
148136
}
149137
}
150138

151139
@override
152140
void dispose() {
153141
super.dispose();
154-
// When used in an Overlay, this can be disposed after its creator has
155-
// already disposed _clipboardStatus.
156-
if (_clipboardStatus != null && !_clipboardStatus!.disposed) {
157-
_clipboardStatus!.removeListener(_onChangedClipboardStatus);
158-
if (widget.clipboardStatus == null) {
159-
_clipboardStatus!.dispose();
160-
}
161-
}
142+
widget.clipboardStatus?.removeListener(_onChangedClipboardStatus);
162143
}
163144

164145
@override
165146
Widget build(BuildContext context) {
166147
// Don't render the menu until the state of the clipboard is known.
167-
if (widget.handlePaste != null && _clipboardStatus!.value == ClipboardStatus.unknown) {
148+
if (widget.handlePaste != null && widget.clipboardStatus?.value == ClipboardStatus.unknown) {
168149
return const SizedBox(width: 0.0, height: 0.0);
169150
}
170151

@@ -206,7 +187,7 @@ class _CupertinoDesktopTextSelectionControlsToolbarState extends State<_Cupertin
206187
addToolbarButton(localizations.copyButtonLabel, widget.handleCopy!);
207188
}
208189
if (widget.handlePaste != null
209-
&& _clipboardStatus!.value == ClipboardStatus.pasteable) {
190+
&& widget.clipboardStatus?.value == ClipboardStatus.pasteable) {
210191
addToolbarButton(localizations.pasteButtonLabel, widget.handlePaste!);
211192
}
212193
if (widget.handleSelectAll != null) {

packages/flutter/lib/src/cupertino/text_selection.dart

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'dart:math' as math;
66

7+
import 'package:flutter/foundation.dart';
78
import 'package:flutter/rendering.dart';
89
import 'package:flutter/widgets.dart';
910

@@ -37,7 +38,7 @@ class _CupertinoTextSelectionControlsToolbar extends StatefulWidget {
3738
required this.textLineHeight,
3839
}) : super(key: key);
3940

40-
final ClipboardStatusNotifier? clipboardStatus;
41+
final ValueListenable<ClipboardStatus>? clipboardStatus;
4142
final List<TextSelectionPoint> endpoints;
4243
final Rect globalEditableRegion;
4344
final VoidCallback? handleCopy;
@@ -52,8 +53,6 @@ class _CupertinoTextSelectionControlsToolbar extends StatefulWidget {
5253
}
5354

5455
class _CupertinoTextSelectionControlsToolbarState extends State<_CupertinoTextSelectionControlsToolbar> {
55-
ClipboardStatusNotifier? _clipboardStatus;
56-
5756
void _onChangedClipboardStatus() {
5857
setState(() {
5958
// Inform the widget that the value of clipboardStatus has changed.
@@ -63,47 +62,28 @@ class _CupertinoTextSelectionControlsToolbarState extends State<_CupertinoTextSe
6362
@override
6463
void initState() {
6564
super.initState();
66-
if (widget.handlePaste != null) {
67-
_clipboardStatus = widget.clipboardStatus ?? ClipboardStatusNotifier();
68-
_clipboardStatus!.addListener(_onChangedClipboardStatus);
69-
_clipboardStatus!.update();
70-
}
65+
widget.clipboardStatus?.addListener(_onChangedClipboardStatus);
7166
}
7267

7368
@override
7469
void didUpdateWidget(_CupertinoTextSelectionControlsToolbar oldWidget) {
7570
super.didUpdateWidget(oldWidget);
7671
if (oldWidget.clipboardStatus != widget.clipboardStatus) {
77-
if (_clipboardStatus != null) {
78-
_clipboardStatus!.removeListener(_onChangedClipboardStatus);
79-
_clipboardStatus!.dispose();
80-
}
81-
_clipboardStatus = widget.clipboardStatus ?? ClipboardStatusNotifier();
82-
_clipboardStatus!.addListener(_onChangedClipboardStatus);
83-
if (widget.handlePaste != null) {
84-
_clipboardStatus!.update();
85-
}
72+
oldWidget.clipboardStatus?.removeListener(_onChangedClipboardStatus);
73+
widget.clipboardStatus?.addListener(_onChangedClipboardStatus);
8674
}
8775
}
8876

8977
@override
9078
void dispose() {
9179
super.dispose();
92-
// When used in an Overlay, this can be disposed after its creator has
93-
// already disposed _clipboardStatus.
94-
if (_clipboardStatus != null && !_clipboardStatus!.disposed) {
95-
_clipboardStatus!.removeListener(_onChangedClipboardStatus);
96-
if (widget.clipboardStatus == null) {
97-
_clipboardStatus!.dispose();
98-
}
99-
}
80+
widget.clipboardStatus?.removeListener(_onChangedClipboardStatus);
10081
}
10182

10283
@override
10384
Widget build(BuildContext context) {
10485
// Don't render the menu until the state of the clipboard is known.
105-
if (widget.handlePaste != null
106-
&& _clipboardStatus!.value == ClipboardStatus.unknown) {
86+
if (widget.handlePaste != null && widget.clipboardStatus?.value == ClipboardStatus.unknown) {
10787
return const SizedBox(width: 0.0, height: 0.0);
10888
}
10989

@@ -157,7 +137,7 @@ class _CupertinoTextSelectionControlsToolbarState extends State<_CupertinoTextSe
157137
addToolbarButton(localizations.copyButtonLabel, widget.handleCopy!);
158138
}
159139
if (widget.handlePaste != null
160-
&& _clipboardStatus!.value == ClipboardStatus.pasteable) {
140+
&& widget.clipboardStatus?.value == ClipboardStatus.pasteable) {
161141
addToolbarButton(localizations.pasteButtonLabel, widget.handlePaste!);
162142
}
163143
if (widget.handleSelectAll != null) {
@@ -229,15 +209,15 @@ class CupertinoTextSelectionControls extends TextSelectionControls {
229209
Offset selectionMidpoint,
230210
List<TextSelectionPoint> endpoints,
231211
TextSelectionDelegate delegate,
232-
ClipboardStatusNotifier clipboardStatus,
212+
ValueListenable<ClipboardStatus>? clipboardStatus,
233213
Offset? lastSecondaryTapDownPosition,
234214
) {
235215
return _CupertinoTextSelectionControlsToolbar(
236216
clipboardStatus: clipboardStatus,
237217
endpoints: endpoints,
238218
globalEditableRegion: globalEditableRegion,
239-
handleCut: canCut(delegate) ? () => handleCut(delegate, clipboardStatus) : null,
240-
handleCopy: canCopy(delegate) ? () => handleCopy(delegate, clipboardStatus) : null,
219+
handleCut: canCut(delegate) ? () => handleCut(delegate) : null,
220+
handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null,
241221
handlePaste: canPaste(delegate) ? () => handlePaste(delegate) : null,
242222
handleSelectAll: canSelectAll(delegate) ? () => handleSelectAll(delegate) : null,
243223
selectionMidpoint: selectionMidpoint,

packages/flutter/lib/src/material/desktop_text_selection.dart

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5+
import 'package:flutter/foundation.dart';
56
import 'package:flutter/rendering.dart';
67
import 'package:flutter/services.dart';
78
import 'package:flutter/widgets.dart';
@@ -34,15 +35,15 @@ class _DesktopTextSelectionControls extends TextSelectionControls {
3435
Offset selectionMidpoint,
3536
List<TextSelectionPoint> endpoints,
3637
TextSelectionDelegate delegate,
37-
ClipboardStatusNotifier clipboardStatus,
38+
ValueListenable<ClipboardStatus>? clipboardStatus,
3839
Offset? lastSecondaryTapDownPosition,
3940
) {
4041
return _DesktopTextSelectionControlsToolbar(
4142
clipboardStatus: clipboardStatus,
4243
endpoints: endpoints,
4344
globalEditableRegion: globalEditableRegion,
44-
handleCut: canCut(delegate) ? () => handleCut(delegate, clipboardStatus) : null,
45-
handleCopy: canCopy(delegate) ? () => handleCopy(delegate, clipboardStatus) : null,
45+
handleCut: canCut(delegate) ? () => handleCut(delegate) : null,
46+
handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null,
4647
handlePaste: canPaste(delegate) ? () => handlePaste(delegate) : null,
4748
handleSelectAll: canSelectAll(delegate) ? () => handleSelectAll(delegate) : null,
4849
selectionMidpoint: selectionMidpoint,
@@ -94,7 +95,7 @@ class _DesktopTextSelectionControlsToolbar extends StatefulWidget {
9495
required this.lastSecondaryTapDownPosition,
9596
}) : super(key: key);
9697

97-
final ClipboardStatusNotifier? clipboardStatus;
98+
final ValueListenable<ClipboardStatus>? clipboardStatus;
9899
final List<TextSelectionPoint> endpoints;
99100
final Rect globalEditableRegion;
100101
final VoidCallback? handleCopy;
@@ -110,8 +111,6 @@ class _DesktopTextSelectionControlsToolbar extends StatefulWidget {
110111
}
111112

112113
class _DesktopTextSelectionControlsToolbarState extends State<_DesktopTextSelectionControlsToolbar> {
113-
ClipboardStatusNotifier? _clipboardStatus;
114-
115114
void _onChangedClipboardStatus() {
116115
setState(() {
117116
// Inform the widget that the value of clipboardStatus has changed.
@@ -121,46 +120,28 @@ class _DesktopTextSelectionControlsToolbarState extends State<_DesktopTextSelect
121120
@override
122121
void initState() {
123122
super.initState();
124-
if (widget.handlePaste != null) {
125-
_clipboardStatus = widget.clipboardStatus ?? ClipboardStatusNotifier();
126-
_clipboardStatus!.addListener(_onChangedClipboardStatus);
127-
_clipboardStatus!.update();
128-
}
123+
widget.clipboardStatus?.addListener(_onChangedClipboardStatus);
129124
}
130125

131126
@override
132127
void didUpdateWidget(_DesktopTextSelectionControlsToolbar oldWidget) {
133128
super.didUpdateWidget(oldWidget);
134129
if (oldWidget.clipboardStatus != widget.clipboardStatus) {
135-
if (_clipboardStatus != null) {
136-
_clipboardStatus!.removeListener(_onChangedClipboardStatus);
137-
_clipboardStatus!.dispose();
138-
}
139-
_clipboardStatus = widget.clipboardStatus ?? ClipboardStatusNotifier();
140-
_clipboardStatus!.addListener(_onChangedClipboardStatus);
141-
if (widget.handlePaste != null) {
142-
_clipboardStatus!.update();
143-
}
130+
oldWidget.clipboardStatus?.removeListener(_onChangedClipboardStatus);
131+
widget.clipboardStatus?.addListener(_onChangedClipboardStatus);
144132
}
145133
}
146134

147135
@override
148136
void dispose() {
149137
super.dispose();
150-
// When used in an Overlay, this can be disposed after its creator has
151-
// already disposed _clipboardStatus.
152-
if (_clipboardStatus != null && !_clipboardStatus!.disposed) {
153-
_clipboardStatus!.removeListener(_onChangedClipboardStatus);
154-
if (widget.clipboardStatus == null) {
155-
_clipboardStatus!.dispose();
156-
}
157-
}
138+
widget.clipboardStatus?.removeListener(_onChangedClipboardStatus);
158139
}
159140

160141
@override
161142
Widget build(BuildContext context) {
162143
// Don't render the menu until the state of the clipboard is known.
163-
if (widget.handlePaste != null && _clipboardStatus!.value == ClipboardStatus.unknown) {
144+
if (widget.handlePaste != null && widget.clipboardStatus?.value == ClipboardStatus.unknown) {
164145
return const SizedBox(width: 0.0, height: 0.0);
165146
}
166147

@@ -197,7 +178,7 @@ class _DesktopTextSelectionControlsToolbarState extends State<_DesktopTextSelect
197178
addToolbarButton(localizations.copyButtonLabel, widget.handleCopy!);
198179
}
199180
if (widget.handlePaste != null
200-
&& _clipboardStatus!.value == ClipboardStatus.pasteable) {
181+
&& widget.clipboardStatus?.value == ClipboardStatus.pasteable) {
201182
addToolbarButton(localizations.pasteButtonLabel, widget.handlePaste!);
202183
}
203184
if (widget.handleSelectAll != null) {

0 commit comments

Comments
 (0)