Skip to content

Commit

Permalink
Put AppInputDecoration in separate file.
Browse files Browse the repository at this point in the history
  • Loading branch information
elibon99 committed Dec 14, 2023
1 parent 7ea025f commit e607d0a
Show file tree
Hide file tree
Showing 22 changed files with 107 additions and 90 deletions.
2 changes: 1 addition & 1 deletion lib/fido/views/add_fingerprint_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import '../../app/message.dart';
import '../../app/models.dart';
import '../../desktop/models.dart';
import '../../fido/models.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../../widgets/utf8_utils.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/fido/views/locked_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import '../../app/views/app_page.dart';
import '../../app/views/graphics.dart';
import '../../app/views/message_page.dart';
import '../../core/state.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../features.dart' as features;
import '../models.dart';
Expand Down
2 changes: 1 addition & 1 deletion lib/fido/views/pin_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import '../../app/message.dart';
import '../../app/models.dart';
import '../../app/state.dart';
import '../../desktop/models.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../models.dart';
Expand Down
2 changes: 1 addition & 1 deletion lib/fido/views/rename_fingerprint_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../app/message.dart';
import '../../app/models.dart';
import '../../desktop/models.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../../widgets/utf8_utils.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/oath/views/add_account_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import '../../desktop/models.dart';
import '../../exception/apdu_exception.dart';
import '../../exception/cancellation_exception.dart';
import '../../management/models.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/choice_filter_chip.dart';
import '../../widgets/file_drop_target.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/oath/views/manage_password_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../../app/message.dart';
import '../../app/models.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/focus_utils.dart';
import '../../widgets/responsive_dialog.dart';
Expand Down
2 changes: 1 addition & 1 deletion lib/oath/views/oath_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import '../../app/views/app_page.dart';
import '../../app/views/graphics.dart';
import '../../app/views/message_page.dart';
import '../../core/state.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_form_field.dart';
import '../features.dart' as features;
import '../keys.dart' as keys;
Expand Down
2 changes: 1 addition & 1 deletion lib/oath/views/rename_account_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import '../../app/models.dart';
import '../../app/state.dart';
import '../../desktop/models.dart';
import '../../exception/cancellation_exception.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/focus_utils.dart';
import '../../widgets/responsive_dialog.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/oath/views/unlock_form.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../../app/message.dart';
import '../../app/models.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../keys.dart' as keys;
import '../models.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/otp/views/configure_chalresp_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import '../../app/models.dart';
import '../../app/state.dart';
import '../../core/models.dart';
import '../../core/state.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../keys.dart' as keys;
Expand Down
1 change: 1 addition & 0 deletions lib/otp/views/configure_hotp_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import '../../app/state.dart';
import '../../core/models.dart';
import '../../core/state.dart';
import '../../oath/models.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/choice_filter_chip.dart';
import '../../widgets/responsive_dialog.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/otp/views/configure_static_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import '../../app/message.dart';
import '../../app/models.dart';
import '../../app/state.dart';
import '../../core/state.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/choice_filter_chip.dart';
import '../../widgets/responsive_dialog.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/otp/views/configure_yubiotp_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import '../../app/models.dart';
import '../../app/state.dart';
import '../../core/models.dart';
import '../../core/state.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/choice_filter_chip.dart';
import '../../widgets/responsive_dialog.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/piv/views/authentication_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../app/models.dart';
import '../../core/models.dart';
import '../../exception/cancellation_exception.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../keys.dart' as keys;
Expand Down
1 change: 1 addition & 0 deletions lib/piv/views/generate_key_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import '../../app/message.dart';
import '../../app/models.dart';
import '../../app/state.dart';
import '../../core/models.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/choice_filter_chip.dart';
import '../../widgets/responsive_dialog.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/piv/views/import_file_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../app/message.dart';
import '../../app/models.dart';
import '../../app/state.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../keys.dart' as keys;
Expand Down
1 change: 1 addition & 0 deletions lib/piv/views/manage_key_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import '../../app/message.dart';
import '../../app/models.dart';
import '../../app/state.dart';
import '../../core/models.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/choice_filter_chip.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/piv/views/manage_pin_puk_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../../app/message.dart';
import '../../app/models.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../keys.dart' as keys;
Expand Down
1 change: 1 addition & 0 deletions lib/piv/views/pin_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../../app/models.dart';
import '../../exception/cancellation_exception.dart';
import '../../widgets/app_input_decoration.dart';
import '../../widgets/app_text_field.dart';
import '../../widgets/responsive_dialog.dart';
import '../keys.dart' as keys;
Expand Down
86 changes: 86 additions & 0 deletions lib/widgets/app_input_decoration.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import 'package:flutter/material.dart';

class AppInputDecoration extends InputDecoration {
final List<Widget>? suffixIcons;

const AppInputDecoration({
// allow multiple suffixIcons
this.suffixIcons,
// forward other TextField parameters
super.icon,
super.iconColor,
super.label,
super.labelText,
super.labelStyle,
super.floatingLabelStyle,
super.helperText,
super.helperStyle,
super.helperMaxLines,
super.hintText,
super.hintStyle,
super.hintTextDirection,
super.hintMaxLines,
super.hintFadeDuration,
super.error,
super.errorText,
super.errorStyle,
super.errorMaxLines,
super.floatingLabelBehavior,
super.floatingLabelAlignment,
super.isCollapsed,
super.isDense,
super.contentPadding,
super.prefixIcon,
super.prefixIconConstraints,
super.prefix,
super.prefixText,
super.prefixStyle,
super.prefixIconColor,
super.suffixIcon,
super.suffix,
super.suffixText,
super.suffixStyle,
super.suffixIconColor,
super.suffixIconConstraints,
super.counter,
super.counterText,
super.counterStyle,
super.filled,
super.fillColor,
super.focusColor,
super.hoverColor,
super.errorBorder,
super.focusedBorder,
super.focusedErrorBorder,
super.disabledBorder,
super.enabledBorder,
super.border,
super.enabled = true,
super.semanticCounterText,
super.alignLabelWithHint,
super.constraints,
}) : assert(!(suffixIcon != null && suffixIcons != null),
'Declaring both suffixIcon and suffixIcons is not supported.');

@override
Widget? get suffixIcon {
final hasError = errorText != null;

if (hasError || suffixIcons != null) {
final errorIcon = hasError ? const Icon(Icons.error_outlined) : null;

final existingSuffixIcon = super.suffixIcon;

return Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
children: [
if (suffixIcons != null) ...suffixIcons!,
if (existingSuffixIcon != null) existingSuffixIcon,
if (errorIcon != null) ...[errorIcon, const SizedBox(width: 8.0)],
],
);
}

return super.suffixIcon;
}
}
85 changes: 1 addition & 84 deletions lib/widgets/app_text_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,90 +16,7 @@

import 'package:flutter/material.dart';

class AppInputDecoration extends InputDecoration {
final List<Widget>? suffixIcons;

const AppInputDecoration({
// allow multiple suffixIcons
this.suffixIcons,
// forward other TextField parameters
super.icon,
super.iconColor,
super.label,
super.labelText,
super.labelStyle,
super.floatingLabelStyle,
super.helperText,
super.helperStyle,
super.helperMaxLines,
super.hintText,
super.hintStyle,
super.hintTextDirection,
super.hintMaxLines,
super.hintFadeDuration,
super.error,
super.errorText,
super.errorStyle,
super.errorMaxLines,
super.floatingLabelBehavior,
super.floatingLabelAlignment,
super.isCollapsed,
super.isDense,
super.contentPadding,
super.prefixIcon,
super.prefixIconConstraints,
super.prefix,
super.prefixText,
super.prefixStyle,
super.prefixIconColor,
super.suffixIcon,
super.suffix,
super.suffixText,
super.suffixStyle,
super.suffixIconColor,
super.suffixIconConstraints,
super.counter,
super.counterText,
super.counterStyle,
super.filled,
super.fillColor,
super.focusColor,
super.hoverColor,
super.errorBorder,
super.focusedBorder,
super.focusedErrorBorder,
super.disabledBorder,
super.enabledBorder,
super.border,
super.enabled = true,
super.semanticCounterText,
super.alignLabelWithHint,
super.constraints,
}) : assert(!(suffixIcon != null && suffixIcons != null),
'Declaring both suffixIcon and suffixIcons is not supported.');

@override
Widget? get suffixIcon {
final hasError = errorText != null;

if (hasError || suffixIcons != null) {
final errorIcon = hasError ? const Icon(Icons.error_outlined) : null;

final existingSuffixIcon = super.suffixIcon;

return Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
children: [
if (suffixIcons != null) ...suffixIcons!,
if (existingSuffixIcon != null) existingSuffixIcon,
if (errorIcon != null) ...[errorIcon, const SizedBox(width: 8.0)],
],
);
}

return super.suffixIcon;
}
}
import 'app_input_decoration.dart';

/// TextField without autocorrect and suggestions
class AppTextField extends TextField {
Expand Down
2 changes: 1 addition & 1 deletion lib/widgets/app_text_form_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import 'package:flutter/material.dart';

import 'app_text_field.dart';
import 'app_input_decoration.dart';

/// TextFormField without autocorrect and suggestions
class AppTextFormField extends TextFormField {
Expand Down

0 comments on commit e607d0a

Please sign in to comment.