Skip to content

Commit f7012db

Browse files
authored
Move Feedback to widgets layer (flutter#148523)
Currently, `Feedback` exists in the Material layer. However, not only is `Feedback` not material-opinionated, but it is an abstract class that defines its functionality depending on the user's platform. It makes sense that `Feedback` should exist in the widgets layer instead. This makes it easier to incorporate platform specific `Feedback` updates as they arrive, fixing issues like flutter#148391. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [Features we expect every widget to implement]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat [Data Driven Fixes]: https://github.com/flutter/flutter/wiki/Data-driven-Fixes
1 parent adc9307 commit f7012db

28 files changed

+37
-43
lines changed

packages/flutter/lib/material.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ export 'src/material/expand_icon.dart';
8484
export 'src/material/expansion_panel.dart';
8585
export 'src/material/expansion_tile.dart';
8686
export 'src/material/expansion_tile_theme.dart';
87-
export 'src/material/feedback.dart';
8887
export 'src/material/filled_button.dart';
8988
export 'src/material/filled_button_theme.dart';
9089
export 'src/material/filter_chip.dart';

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:flutter/rendering.dart';
1111
import 'package:flutter/widgets.dart';
1212

1313
import 'debug.dart';
14-
import 'feedback.dart';
1514
import 'ink_highlight.dart';
1615
import 'material.dart';
1716
import 'material_state.dart';

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:flutter/rendering.dart';
1111

1212
import 'adaptive_text_selection_toolbar.dart';
1313
import 'desktop_text_selection.dart';
14-
import 'feedback.dart';
1514
import 'magnifier.dart';
1615
import 'text_selection.dart';
1716
import 'theme.dart';

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import 'color_scheme.dart';
1515
import 'colors.dart';
1616
import 'debug.dart';
1717
import 'desktop_text_selection.dart';
18-
import 'feedback.dart';
1918
import 'input_decorator.dart';
2019
import 'magnifier.dart';
2120
import 'material_localizations.dart';

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import 'colors.dart';
1717
import 'curves.dart';
1818
import 'debug.dart';
1919
import 'dialog.dart';
20-
import 'feedback.dart';
2120
import 'icon_button.dart';
2221
import 'icons.dart';
2322
import 'ink_well.dart';

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:flutter/services.dart';
1111
import 'package:flutter/widgets.dart';
1212

1313
import 'colors.dart';
14-
import 'feedback.dart';
1514
import 'text_theme.dart';
1615
import 'theme.dart';
1716
import 'tooltip_theme.dart';

packages/flutter/lib/src/material/feedback.dart renamed to packages/flutter/lib/src/widgets/feedback.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
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/semantics.dart';
78
import 'package:flutter/services.dart';
8-
import 'package:flutter/widgets.dart';
99

10-
import 'theme.dart';
10+
import 'framework.dart';
11+
import 'gesture_detector.dart';
1112

1213
/// Provides platform-specific acoustic and/or haptic feedback for certain
1314
/// actions.
@@ -92,7 +93,7 @@ abstract final class Feedback {
9293
/// [GestureTapCallback].
9394
static Future<void> forTap(BuildContext context) async {
9495
context.findRenderObject()!.sendSemanticsEvent(const TapSemanticEvent());
95-
switch (_platform(context)) {
96+
switch (defaultTargetPlatform) {
9697
case TargetPlatform.android:
9798
case TargetPlatform.fuchsia:
9899
return SystemSound.play(SystemSoundType.click);
@@ -119,7 +120,7 @@ abstract final class Feedback {
119120
return null;
120121
}
121122
return () {
122-
Feedback.forTap(context);
123+
forTap(context);
123124
callback();
124125
};
125126
}
@@ -135,7 +136,7 @@ abstract final class Feedback {
135136
/// executing a [GestureLongPressCallback].
136137
static Future<void> forLongPress(BuildContext context) {
137138
context.findRenderObject()!.sendSemanticsEvent(const LongPressSemanticsEvent());
138-
switch (_platform(context)) {
139+
switch (defaultTargetPlatform) {
139140
case TargetPlatform.android:
140141
case TargetPlatform.fuchsia:
141142
return HapticFeedback.vibrate();
@@ -167,6 +168,4 @@ abstract final class Feedback {
167168
callback();
168169
};
169170
}
170-
171-
static TargetPlatform _platform(BuildContext context) => Theme.of(context).platform;
172171
}

packages/flutter/lib/widgets.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export 'src/widgets/draggable_scrollable_sheet.dart';
5151
export 'src/widgets/dual_transition_builder.dart';
5252
export 'src/widgets/editable_text.dart';
5353
export 'src/widgets/fade_in_image.dart';
54+
export 'src/widgets/feedback.dart';
5455
export 'src/widgets/focus_manager.dart';
5556
export 'src/widgets/focus_scope.dart';
5657
export 'src/widgets/focus_traversal.dart';

packages/flutter/test/material/bottom_navigation_bar_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import 'package:flutter_test/flutter_test.dart';
1717
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
1818
import 'package:vector_math/vector_math_64.dart' show Vector3;
1919

20+
import '../widgets/feedback_tester.dart';
2021
import '../widgets/semantics_tester.dart';
21-
import 'feedback_tester.dart';
2222

2323
void main() {
2424
testWidgets('BottomNavigationBar callback test', (WidgetTester tester) async {

packages/flutter/test/material/calendar_date_picker_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
77
import 'package:flutter/services.dart';
88
import 'package:flutter_test/flutter_test.dart';
99

10-
import 'feedback_tester.dart';
10+
import '../widgets/feedback_tester.dart';
1111

1212
void main() {
1313
TestWidgetsFlutterBinding.ensureInitialized();

0 commit comments

Comments
 (0)