Skip to content

Commit e8a1d2e

Browse files
committed
feature: Add option supportedModes
1 parent b0467ef commit e8a1d2e

File tree

5 files changed

+66
-43
lines changed

5 files changed

+66
-43
lines changed

feedback/example/lib/main.dart

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class _MyAppState extends State<MyApp> {
6060
],
6161
localeOverride: const Locale('en'),
6262
mode: FeedbackMode.draw,
63+
supportedModes: FeedbackMode.values,
6364
pixelRatio: 1,
6465
child: MaterialApp(
6566
title: 'Feedback Demo',

feedback/lib/src/better_feedback.dart

+7
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class BetterFeedback extends StatefulWidget {
111111
this.localizationsDelegates,
112112
this.localeOverride,
113113
this.mode = FeedbackMode.draw,
114+
this.supportedModes = FeedbackMode.values,
114115
this.pixelRatio = 3.0,
115116
}) : assert(
116117
pixelRatio > 0,
@@ -166,6 +167,11 @@ class BetterFeedback extends StatefulWidget {
166167
/// See [FeedbackMode] for other options.
167168
final FeedbackMode mode;
168169

170+
/// Set the default supported modes.
171+
/// By default all modes will be supported.
172+
/// See [FeedbackMode] for more info.
173+
final List<FeedbackMode> supportedModes;
174+
169175
/// The pixelRatio describes the scale between
170176
/// the logical pixels and the size of the output image.
171177
/// Specifying 1.0 will give you a 1:1 mapping between
@@ -233,6 +239,7 @@ class _BetterFeedbackState extends State<BetterFeedback> {
233239
isFeedbackVisible: controller.isVisible,
234240
drawColors: FeedbackTheme.of(context).drawColors,
235241
mode: widget.mode,
242+
supportedModes: widget.supportedModes,
236243
pixelRatio: widget.pixelRatio,
237244
feedbackBuilder:
238245
widget.feedbackBuilder ?? simpleFeedbackBuilder,

feedback/lib/src/controls_column.dart

+47-41
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class ControlsColumn extends StatelessWidget {
1212
ControlsColumn({
1313
super.key,
1414
required this.mode,
15+
required this.supportedModes,
1516
required this.activeColor,
1617
required this.onColorChanged,
1718
required this.onUndo,
@@ -33,6 +34,7 @@ class ControlsColumn extends StatelessWidget {
3334
final List<Color> colors;
3435
final Color activeColor;
3536
final FeedbackMode mode;
37+
final List<FeedbackMode> supportedModes;
3638

3739
@override
3840
Widget build(BuildContext context) {
@@ -54,50 +56,54 @@ class ControlsColumn extends StatelessWidget {
5456
icon: const Icon(Icons.close),
5557
onPressed: onCloseFeedback,
5658
),
57-
_ColumnDivider(),
58-
RotatedBox(
59-
quarterTurns: 1,
60-
child: MaterialButton(
61-
key: const ValueKey<String>('navigate_button'),
62-
onPressed: isNavigatingActive
63-
? null
64-
: () => onControlModeChanged(FeedbackMode.navigate),
65-
disabledTextColor:
66-
FeedbackTheme.of(context).activeFeedbackModeColor,
67-
child: Text(FeedbackLocalizations.of(context).navigate),
59+
if (supportedModes.contains(FeedbackMode.navigate)) ...[
60+
_ColumnDivider(),
61+
RotatedBox(
62+
quarterTurns: 1,
63+
child: MaterialButton(
64+
key: const ValueKey<String>('navigate_button'),
65+
onPressed: isNavigatingActive
66+
? null
67+
: () => onControlModeChanged(FeedbackMode.navigate),
68+
disabledTextColor:
69+
FeedbackTheme.of(context).activeFeedbackModeColor,
70+
child: Text(FeedbackLocalizations.of(context).navigate),
71+
),
6872
),
69-
),
70-
_ColumnDivider(),
71-
RotatedBox(
72-
quarterTurns: 1,
73-
child: MaterialButton(
74-
key: const ValueKey<String>('draw_button'),
75-
minWidth: 20,
76-
onPressed: isNavigatingActive
77-
? () => onControlModeChanged(FeedbackMode.draw)
78-
: null,
79-
disabledTextColor:
80-
FeedbackTheme.of(context).activeFeedbackModeColor,
81-
child: Text(FeedbackLocalizations.of(context).draw),
73+
],
74+
if (supportedModes.contains(FeedbackMode.draw)) ...[
75+
_ColumnDivider(),
76+
RotatedBox(
77+
quarterTurns: 1,
78+
child: MaterialButton(
79+
key: const ValueKey<String>('draw_button'),
80+
minWidth: 20,
81+
onPressed: isNavigatingActive
82+
? () => onControlModeChanged(FeedbackMode.draw)
83+
: null,
84+
disabledTextColor:
85+
FeedbackTheme.of(context).activeFeedbackModeColor,
86+
child: Text(FeedbackLocalizations.of(context).draw),
87+
),
8288
),
83-
),
84-
IconButton(
85-
key: const ValueKey<String>('undo_button'),
86-
icon: const Icon(Icons.undo),
87-
onPressed: isNavigatingActive ? null : onUndo,
88-
),
89-
IconButton(
90-
key: const ValueKey<String>('clear_button'),
91-
icon: const Icon(Icons.delete),
92-
onPressed: isNavigatingActive ? null : onClearDrawing,
93-
),
94-
for (final color in colors)
95-
_ColorSelectionIconButton(
96-
key: ValueKey<Color>(color),
97-
color: color,
98-
onPressed: isNavigatingActive ? null : onColorChanged,
99-
isActive: activeColor == color,
89+
IconButton(
90+
key: const ValueKey<String>('undo_button'),
91+
icon: const Icon(Icons.undo),
92+
onPressed: isNavigatingActive ? null : onUndo,
93+
),
94+
IconButton(
95+
key: const ValueKey<String>('clear_button'),
96+
icon: const Icon(Icons.delete),
97+
onPressed: isNavigatingActive ? null : onClearDrawing,
10098
),
99+
for (final color in colors)
100+
_ColorSelectionIconButton(
101+
key: ValueKey<Color>(color),
102+
color: color,
103+
onPressed: isNavigatingActive ? null : onColorChanged,
104+
isActive: activeColor == color,
105+
),
106+
],
101107
],
102108
),
103109
);

feedback/lib/src/feedback_widget.dart

+8-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import 'package:feedback/feedback.dart';
44
import 'package:feedback/src/controls_column.dart';
5-
import 'package:feedback/src/scale_and_fade.dart';
65
import 'package:feedback/src/feedback_bottom_sheet.dart';
76
import 'package:feedback/src/paint_on_background.dart';
87
import 'package:feedback/src/painter.dart';
98
import 'package:feedback/src/scale_and_clip.dart';
9+
import 'package:feedback/src/scale_and_fade.dart';
1010
import 'package:feedback/src/screenshot.dart';
1111
import 'package:feedback/src/theme/feedback_theme.dart';
1212
import 'package:feedback/src/utilities/back_button_interceptor.dart';
@@ -25,6 +25,7 @@ class FeedbackWidget extends StatefulWidget {
2525
required this.isFeedbackVisible,
2626
required this.drawColors,
2727
required this.mode,
28+
required this.supportedModes,
2829
required this.pixelRatio,
2930
required this.feedbackBuilder,
3031
}) : assert(
@@ -36,6 +37,7 @@ class FeedbackWidget extends StatefulWidget {
3637

3738
final bool isFeedbackVisible;
3839
final FeedbackMode mode;
40+
final List<FeedbackMode> supportedModes;
3941
final double pixelRatio;
4042
final Widget child;
4143
final List<Color> drawColors;
@@ -82,6 +84,7 @@ class FeedbackWidgetState extends State<FeedbackWidget>
8284
@override
8385
void initState() {
8486
super.initState();
87+
8588
BackButtonInterceptor.add(backButtonIntercept);
8689
}
8790

@@ -110,6 +113,9 @@ class FeedbackWidgetState extends State<FeedbackWidget>
110113
super.didUpdateWidget(oldWidget);
111114
// update feedback mode with the initial value
112115
mode = widget.mode;
116+
if (!widget.supportedModes.contains(mode)) {
117+
mode = widget.supportedModes.first;
118+
}
113119
if (oldWidget.isFeedbackVisible != widget.isFeedbackVisible &&
114120
oldWidget.isFeedbackVisible == false) {
115121
// Feedback is now visible,
@@ -223,6 +229,7 @@ class FeedbackWidgetState extends State<FeedbackWidget>
223229
minScale: .7,
224230
child: ControlsColumn(
225231
mode: mode,
232+
supportedModes: widget.supportedModes,
226233
activeColor: painterController.drawColor,
227234
colors: widget.drawColors,
228235
onColorChanged: (color) {

feedback/test/controls_column_test.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import 'package:feedback/src/controls_column.dart';
22
import 'package:feedback/src/feedback_mode.dart';
33
import 'package:feedback/src/l18n/localization.dart';
4-
import 'package:flutter_test/flutter_test.dart';
54
import 'package:flutter/material.dart';
5+
import 'package:flutter_test/flutter_test.dart';
66

77
void main() {
88
Widget create({
99
Color? activeColor,
1010
FeedbackMode? mode,
11+
List<FeedbackMode>? supportedModes,
1112
ValueChanged<Color>? onColorChanged,
1213
VoidCallback? onUndo,
1314
ValueChanged<FeedbackMode>? onControlModeChanged,
@@ -19,6 +20,7 @@ void main() {
1920
child: ControlsColumn(
2021
activeColor: activeColor ?? Colors.red,
2122
mode: mode ?? FeedbackMode.draw,
23+
supportedModes: supportedModes ?? FeedbackMode.values,
2224
colors:
2325
colors ?? [Colors.red, Colors.green, Colors.blue, Colors.yellow],
2426
onClearDrawing: onClearDrawing ?? () {},

0 commit comments

Comments
 (0)