Skip to content

Commit

Permalink
feature: Add option supportedModes
Browse files Browse the repository at this point in the history
  • Loading branch information
defuncart committed Feb 24, 2024
1 parent b0467ef commit e8a1d2e
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 43 deletions.
1 change: 1 addition & 0 deletions feedback/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class _MyAppState extends State<MyApp> {
],
localeOverride: const Locale('en'),
mode: FeedbackMode.draw,
supportedModes: FeedbackMode.values,
pixelRatio: 1,
child: MaterialApp(
title: 'Feedback Demo',
Expand Down
7 changes: 7 additions & 0 deletions feedback/lib/src/better_feedback.dart
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ class BetterFeedback extends StatefulWidget {
this.localizationsDelegates,
this.localeOverride,
this.mode = FeedbackMode.draw,
this.supportedModes = FeedbackMode.values,
this.pixelRatio = 3.0,
}) : assert(
pixelRatio > 0,
Expand Down Expand Up @@ -166,6 +167,11 @@ class BetterFeedback extends StatefulWidget {
/// See [FeedbackMode] for other options.
final FeedbackMode mode;

/// Set the default supported modes.
/// By default all modes will be supported.
/// See [FeedbackMode] for more info.
final List<FeedbackMode> supportedModes;

/// The pixelRatio describes the scale between
/// the logical pixels and the size of the output image.
/// Specifying 1.0 will give you a 1:1 mapping between
Expand Down Expand Up @@ -233,6 +239,7 @@ class _BetterFeedbackState extends State<BetterFeedback> {
isFeedbackVisible: controller.isVisible,
drawColors: FeedbackTheme.of(context).drawColors,
mode: widget.mode,
supportedModes: widget.supportedModes,
pixelRatio: widget.pixelRatio,
feedbackBuilder:
widget.feedbackBuilder ?? simpleFeedbackBuilder,
Expand Down
88 changes: 47 additions & 41 deletions feedback/lib/src/controls_column.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class ControlsColumn extends StatelessWidget {
ControlsColumn({
super.key,
required this.mode,
required this.supportedModes,
required this.activeColor,
required this.onColorChanged,
required this.onUndo,
Expand All @@ -33,6 +34,7 @@ class ControlsColumn extends StatelessWidget {
final List<Color> colors;
final Color activeColor;
final FeedbackMode mode;
final List<FeedbackMode> supportedModes;

@override
Widget build(BuildContext context) {
Expand All @@ -54,50 +56,54 @@ class ControlsColumn extends StatelessWidget {
icon: const Icon(Icons.close),
onPressed: onCloseFeedback,
),
_ColumnDivider(),
RotatedBox(
quarterTurns: 1,
child: MaterialButton(
key: const ValueKey<String>('navigate_button'),
onPressed: isNavigatingActive
? null
: () => onControlModeChanged(FeedbackMode.navigate),
disabledTextColor:
FeedbackTheme.of(context).activeFeedbackModeColor,
child: Text(FeedbackLocalizations.of(context).navigate),
if (supportedModes.contains(FeedbackMode.navigate)) ...[
_ColumnDivider(),
RotatedBox(
quarterTurns: 1,
child: MaterialButton(
key: const ValueKey<String>('navigate_button'),
onPressed: isNavigatingActive
? null
: () => onControlModeChanged(FeedbackMode.navigate),
disabledTextColor:
FeedbackTheme.of(context).activeFeedbackModeColor,
child: Text(FeedbackLocalizations.of(context).navigate),
),
),
),
_ColumnDivider(),
RotatedBox(
quarterTurns: 1,
child: MaterialButton(
key: const ValueKey<String>('draw_button'),
minWidth: 20,
onPressed: isNavigatingActive
? () => onControlModeChanged(FeedbackMode.draw)
: null,
disabledTextColor:
FeedbackTheme.of(context).activeFeedbackModeColor,
child: Text(FeedbackLocalizations.of(context).draw),
],
if (supportedModes.contains(FeedbackMode.draw)) ...[
_ColumnDivider(),
RotatedBox(
quarterTurns: 1,
child: MaterialButton(
key: const ValueKey<String>('draw_button'),
minWidth: 20,
onPressed: isNavigatingActive
? () => onControlModeChanged(FeedbackMode.draw)
: null,
disabledTextColor:
FeedbackTheme.of(context).activeFeedbackModeColor,
child: Text(FeedbackLocalizations.of(context).draw),
),
),
),
IconButton(
key: const ValueKey<String>('undo_button'),
icon: const Icon(Icons.undo),
onPressed: isNavigatingActive ? null : onUndo,
),
IconButton(
key: const ValueKey<String>('clear_button'),
icon: const Icon(Icons.delete),
onPressed: isNavigatingActive ? null : onClearDrawing,
),
for (final color in colors)
_ColorSelectionIconButton(
key: ValueKey<Color>(color),
color: color,
onPressed: isNavigatingActive ? null : onColorChanged,
isActive: activeColor == color,
IconButton(
key: const ValueKey<String>('undo_button'),
icon: const Icon(Icons.undo),
onPressed: isNavigatingActive ? null : onUndo,
),
IconButton(
key: const ValueKey<String>('clear_button'),
icon: const Icon(Icons.delete),
onPressed: isNavigatingActive ? null : onClearDrawing,
),
for (final color in colors)
_ColorSelectionIconButton(
key: ValueKey<Color>(color),
color: color,
onPressed: isNavigatingActive ? null : onColorChanged,
isActive: activeColor == color,
),
],
],
),
);
Expand Down
9 changes: 8 additions & 1 deletion feedback/lib/src/feedback_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import 'package:feedback/feedback.dart';
import 'package:feedback/src/controls_column.dart';
import 'package:feedback/src/scale_and_fade.dart';
import 'package:feedback/src/feedback_bottom_sheet.dart';
import 'package:feedback/src/paint_on_background.dart';
import 'package:feedback/src/painter.dart';
import 'package:feedback/src/scale_and_clip.dart';
import 'package:feedback/src/scale_and_fade.dart';
import 'package:feedback/src/screenshot.dart';
import 'package:feedback/src/theme/feedback_theme.dart';
import 'package:feedback/src/utilities/back_button_interceptor.dart';
Expand All @@ -25,6 +25,7 @@ class FeedbackWidget extends StatefulWidget {
required this.isFeedbackVisible,
required this.drawColors,
required this.mode,
required this.supportedModes,
required this.pixelRatio,
required this.feedbackBuilder,
}) : assert(
Expand All @@ -36,6 +37,7 @@ class FeedbackWidget extends StatefulWidget {

final bool isFeedbackVisible;
final FeedbackMode mode;
final List<FeedbackMode> supportedModes;
final double pixelRatio;
final Widget child;
final List<Color> drawColors;
Expand Down Expand Up @@ -82,6 +84,7 @@ class FeedbackWidgetState extends State<FeedbackWidget>
@override
void initState() {
super.initState();

BackButtonInterceptor.add(backButtonIntercept);
}

Expand Down Expand Up @@ -110,6 +113,9 @@ class FeedbackWidgetState extends State<FeedbackWidget>
super.didUpdateWidget(oldWidget);
// update feedback mode with the initial value
mode = widget.mode;
if (!widget.supportedModes.contains(mode)) {
mode = widget.supportedModes.first;
}
if (oldWidget.isFeedbackVisible != widget.isFeedbackVisible &&
oldWidget.isFeedbackVisible == false) {
// Feedback is now visible,
Expand Down Expand Up @@ -223,6 +229,7 @@ class FeedbackWidgetState extends State<FeedbackWidget>
minScale: .7,
child: ControlsColumn(
mode: mode,
supportedModes: widget.supportedModes,
activeColor: painterController.drawColor,
colors: widget.drawColors,
onColorChanged: (color) {
Expand Down
4 changes: 3 additions & 1 deletion feedback/test/controls_column_test.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import 'package:feedback/src/controls_column.dart';
import 'package:feedback/src/feedback_mode.dart';
import 'package:feedback/src/l18n/localization.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
Widget create({
Color? activeColor,
FeedbackMode? mode,
List<FeedbackMode>? supportedModes,
ValueChanged<Color>? onColorChanged,
VoidCallback? onUndo,
ValueChanged<FeedbackMode>? onControlModeChanged,
Expand All @@ -19,6 +20,7 @@ void main() {
child: ControlsColumn(
activeColor: activeColor ?? Colors.red,
mode: mode ?? FeedbackMode.draw,
supportedModes: supportedModes ?? FeedbackMode.values,
colors:
colors ?? [Colors.red, Colors.green, Colors.blue, Colors.yellow],
onClearDrawing: onClearDrawing ?? () {},
Expand Down

0 comments on commit e8a1d2e

Please sign in to comment.