A flutter package for building card based forms.

Overview

Card Settings

Awesome Flutter Pub Package GitHub stars GitHub forks GitHub repo size

CodeFactor Coverage Status Open Bugs Enhancement Requests Closed Issues

Buy Me A Coffee PRs Welcome Contributors License

NOTE: THIS IS EFFECTIVELY NULLSAFE BUT CANNOT REFLECT THIS UNTIL cupertino_settings IS UPGRADED.

A flutter package for building settings forms. This includes a library of pre-built form field widgets. It supports both Material and Cupertino style.

Screenshot

This package consists of a CardSettings layout wrapper and a series of form field options including:

  • Text Fields
    • CardSettingsText - Basic text field
    • CardSettingsParagraph - Multiline text field with a counter
    • CardSettingsEmail - A text field pre-configured for email input
    • CardSettingsPassword - A text field pre-configured for passwords
    • CardSettingsPhone - A masked phone entry field (US style currently)
  • Numeric Fields
    • CardSettingsDouble - Field for double precision numbers
    • CardSettingsInt - Field for integer numbers
    • CardSettingsCurrency - Field for currency entry
    • CardSettingsSwitch - Field for boolean state
  • Pickers
    • CardSettingsListPicker - Picker list of arbitrary options
    • CardSettingsNumberPicker - Picker list of numbers in a given range
    • CardSettingsRadioPicker - Single items picker with radio buttons
    • CardSettingsSelectionPicker - Single selection from a list with optional icons
    • CardSettingsCheckboxPicker - Select multiples from a list of available options
    • CardSettingsColorPicker - Picker for colors with three flavors: RGB, Material, and Block
    • CardSettingsDatePicker - Date Picker
    • CardSettingsTimePicker - Time Picker
    • CardSettingsDateTimePicker - Combo Date and Time Picker
    • CardSettingsFilePicker - Upload a file from the device
  • Informational Sections
    • CardSettingsHeader - A control to put a header between form sections
    • CardSettingsInstructions - Informational read-only text
  • Actions
    • CardSettingsButton - Actions buttons for the form

All fields support validate, onChange, onSaved, autovalidate, and visible.

The package also includes these additonal items:

  • CardSettingsField - The base layout widget. You can use this to build custom fields
  • Converters - a set of utility functions to assist in converting data into and out of the fields

Simple Example

All fields in this package are compatible with the standard Flutter Form widget. Simply wrap the CardSettings control in a form and use it as you normally would with the form functionality.

  String title = "Spheria";
  String author = "Cody Leet";
  String url = "http://www.codyleet.com/spheria";

  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
      body: Form(
        key: _formKey,
        child: CardSettings(
          children: <CardSettingsSection>[
            CardSettingsSection(
              header: CardSettingsHeader(
                label: 'Favorite Book',
              ),
              children: <CardSettingsWidget>[
                CardSettingsText(
                  label: 'Title',
                  initialValue: title,
                  validator: (value) {
                    if (value == null || value.isEmpty) return 'Title is required.';
                  },
                  onSaved: (value) => title = value,
                ),
                CardSettingsText(
                  label: 'URL',
                  initialValue: url,
                  validator: (value) {
                    if (!value.startsWith('http:')) return 'Must be a valid website.';
                  },
                  onSaved: (value) => url = value,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

If you would like separate cards for each section, then use the .sectioned constructor:

        child: CardSettings.sectioned(
          ...
        ),

See the full demo example here.

Theming

The style of the widgets can be either Material or Cupertino. There is a toggle on the CardSettings widget to globally change the style:

  return CardSettings(
    showMaterialonIOS: true, // default is false
  );

This also exists on each field widget, in case you want to control this more granularly.

If you are using the Material design style, then the MaterialApp theme takes effect. This example shows what global theme values to set to determine how the various elements appear.

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Card Settings Example',
      home: new HomePage(),
      theme: ThemeData(
        primaryColor: Colors.teal, // app header background
        secondaryHeaderColor: Colors.indigo[400], // card header background
        cardColor: Colors.white, // card field background
        backgroundColor: Colors.indigo[100], // app background color
        buttonColor: Colors.lightBlueAccent[100], // button background color
        textTheme: TextTheme(
          button: TextStyle(color: Colors.deepPurple[900]), // button text
          subtitle1: TextStyle(color: Colors.grey[800]), // input text
          headline6: TextStyle(color: Colors.white), // card header text
        ),
        primaryTextTheme: TextTheme(
          headline6: TextStyle(color: Colors.lightBlue[50]), // app header text
        ),
        inputDecorationTheme: InputDecorationTheme(
          labelStyle: TextStyle(color: Colors.indigo[400]), // style for labels
        ),
      ),
    );
  }
}

Or if you want to apply a different theme to the CardSettings hierarchy only, you can wrap it in a Theme widget like so:

  Theme(
    data: Theme.of(context).copyWith(
      primaryTextTheme: TextTheme(
        headline6: TextStyle(color: Colors.lightBlue[50]), // app header text
      ),
      inputDecorationTheme: InputDecorationTheme(
        labelStyle: TextStyle(color: Colors.deepPurple), // style for labels
      ),
    ),
    child: CardSettings(
      ...
    ),
  )

Please see https://pub.dev/packages/flutter_material_pickers#-readme-tab- for information on how to theme the dialog popups.

Card Style

By default, in Material mode, the content is inside a Card or Cards (if sectioned).

Carded

If you would rather just have a flat style with no border, set cardless to false.

Cardless

  return CardSettings(
    cardless: true; // default is false
  );

This has no effect in Cupertino mode, as that doesn't have a card to begin with.

You can also change the actual card styleing through the theme for example:

Custom

  cardTheme: CardTheme(
    shape: RoundedRectangleBorder(
      side: BorderSide(width: 2, color: Colors.orange),
      borderRadius: BorderRadius.circular(20),
    ),
  ),

Global Properties

The CardSettings widget implements a few global settings that all child fields can inherit. Currently it supports only label customization.

Labels

You can control how the labels are rendered with four properties:

  CardSettings(
    labelAlign: TextAlign.right, // change the label alignment
    labelWidth: 120.0, // change how wide the label portion is
    labelSuffix: ':', // add an optional tag after the label
    labelPadding: 10.0, // control the spacing between the label and the content
    contentAlign: TextAlign.left, // alignment of the entry widgets
    icon: Icon(Icons.person), // puts and option icon to the left of the label
    requiredIndicator: Text('*', style: TextStyle(color: Colors.red)), // puts an optional indicator to the right of the label
  )

The labelAlign and contentAlign properties are also available on each field, so you can override the global setting for individual fields.

  CardSettingsText(
    label: 'Last Name',
    labelAlign: TextAlign.left,
    contentAlign: TextAlign.right,
  )

Headers

CardSettingsHeader provides properties to set the color, height, and label alignment. However, if you wish to completely override the default header style and replace it with something custom, you can use the child property to pass in your own widget tree:

header: CardSettingsHeader(
  child: Container(
    height: 80,
    child: Row(
      children: [
        Expanded(child: Divider(color: Colors.purple, thickness: 5)),
        Text('Custom Header', style: TextStyle(fontSize: 20)),
        Expanded(child: Divider(color: Colors.purple, thickness: 5)),
      ],
    ),
  ),
),

Dynamic Visibility

Each field implements a visible property that you can use to control the visibility based on the value of other fields. In this example, the switch field controls the visibility of the text field:

  bool _ateOut = false;

  CardSettingsSwitch(
    label: 'Ate out?',
    initialValue: _ateOut,
    onChanged: (value) => setState(() => _ateOut = value),
  ),

  CardSettingsText(
    label: 'Restaurant',
    visible: _ateOut,
  ),

Masking

The CardSettingsText widget has an inputMask property that forces entered text to conform to a given pattern. This is built upon the flutter_masked_text package and as such masks are formatted with the following characters:

  • 0: accept numbers
  • A: accept letters
  • @: accept numbers and letters
  • *: accept any character

So for example, phone number would be '(000) 000-0000'.

Note: CardSettingsPhone is a convenience widget that is pre-configured to use this pattern.

Caution: flutter_masked_text is a controller and as such, you will not be able to use an inputMask and a custom controller at the same time. This might be rectified in the future.

Orientation

This suite allows for orientation switching. To configure this, build different layouts depending on the orientation provided by MediaQuery.

You might want to have different fields in each layout, or a different field order. So that Flutter doesn't get confused tracking state under this circumstance, you must provide a unique state key for each individual field, using the same key in each layout.

@override
Widget build(BuildContext context) {

  final GlobalKey<FormState> _emailKey = GlobalKey<FormState>();
  var orientation = MediaQuery.of(context).orientation;

  return Form
    key: _formKey,(
    child: (orientation == Orientation.portraitUp)
        ? CardSettings(children: <Widget>[
              // Portrait layout here
              CardSettingsEmail(key: _emailKey)
            ])
        : CardSettings(children: <Widget>[
              // Landscape layout here
              CardSettingsEmail(key: _emailKey)
            ]);
    },
  );
}

You may have multiple fields on the same row in landscape orientation. This normally requires the use of container widgets to provide the layout inside the row. Instead, you can use the CardFieldLayout helper widget to streamline this. It will by default make it's children equally spaced, but you can provide an array of flex values to control the relative sizes.

// equally spaced example
CardSettings(
  children: <Widget>[
    CardFieldLayout(children: <Widget>[
      CardSettingsEmail(),
      CardSettingsPassword(),
    ]),
  ],
);
// relative width example
CardSettings(
  children: <Widget>[
    CardFieldLayout_FractionallySpaced(
      children: <Widget>[
        CardSettingsEmail(),
        CardSettingsPassword(),
      ],
      flexValues: [2, 1], // 66% and 33% widths
    ),
  ],
);

Custom Fields

The CardSettingsField is the basis of all other fields and can be used to build unique fields outside of this library. Its purpose is to govern layout with consistent decorations. The best way to make a custom field is to inherit from FormField<T>, which will manage the state of your field. The cleanest example of this is the CardSettingsSwitch widget. All you have to do is provide your custom widgets in the content property.

Custom Widgets

If you wish to provide a custom widget that is not a field type layout, you need to implement the CardSettingsWidget interface as so:

class CardSettingsHeader extends StatelessWidget implements CardSettingsWidget {
  ...
}

Screenshots

Material Cupertino
Screenshot Screenshot
:-------------------------: :-------------------------:
Screenshot Screenshot
:-------------------------: :-------------------------:
Screenshot Screenshot

Dependencies

This widget set relies on these external third-party components:

Changelog

Please see the Changelog page to know what's recently changed.

Contributions

If you find a bug or want a feature, but don't know how to fix/implement it, please fill an issue.

If you fixed a bug or implemented a new feature, please send a pull request. Please include a note about your change in CHANGELOG.md with your pull request.

Comments
  • Null safety and Flutter 2.0 support

    Null safety and Flutter 2.0 support

    Good morning,

    it will be beautiful if this package can support Flutter 2.0 and null safety. It is also needed to update dependencies on order to achieve that.

    Is there any planning about this new migration?

    Thank you

    opened by enricobenedos 24
  • Version 1.4.1 the validation still broken

    Version 1.4.1 the validation still broken

    As the subject, for now the validation wont work with material on both ios and android, i tried to download and debug it but it seem fine the validator instance is there, the form is fine but validator always return true no matter what... can you please take a look at this? much appriciated

    opened by iHunterX 14
  • Autovalidate error on non stable channels

    Autovalidate error on non stable channels

    ./../../../flutter/.pub-cache/hosted/pub.flutter-io.cn/card_settings-1.13.0+hotfix.1/lib/widgets/picker_
        fields/card_settings_radio_picker.dart:15:7: Error: The non-abstract class 'CardSettingsRadioPicker' is
        missing implementations for these members:
         - ICommonFieldProperties.autovalidate
        Try to either
         - provide an implementation,
         - inherit an implementation from a superclass or mixin,
         - mark the class as abstract, or
         - provide a 'noSuchMethod' implementation.
    
        class CardSettingsRadioPicker extends FormField<String>
              ^^^^^^^^^^^^^^^^^^^^^^^
        ../../../../flutter/.pub-cache/hosted/pub.flutter-io.cn/card_settings-1.13.0+hotfix.1/lib/interfaces/comm
        on_field_properties.dart:19:14: Context: 'ICommonFieldProperties.autovalidate' is defined here.
          final bool autovalidate = null;
                     ^^^^^^^^^^^^
        ../../../../flutter/.pub-cache/hosted/pub.flutter-io.cn/card_settings-1.13.0+hotfix.1/lib/widgets/picker_
        fields/card_settings_selection_picker.dart:15:7: Error: The non-abstract class
        'CardSettingsSelectionPicker' is missing implementations for these members:
         - ICommonFieldProperties.autovalidate
        Try to either
         - provide an implementation,
         - inherit an implementation from a superclass or mixin,
         - mark the class as abstract, or
         - provide a 'noSuchMethod' implementation.
    
        class CardSettingsSelectionPicker extends FormField<String>
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        ../../../../flutter/.pub-cache/hosted/pub.flutter-io.cn/card_settings-1.13.0+hotfix.1/lib/interfaces/comm
        on_field_properties.dart:19:14: Context: 'ICommonField
    
    → flutter doctor                                                                   ⎇  master ✘ ^#!+?|3cf94c6
    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel dev, 1.22.0-12.0.pre, on Mac OS X 10.15.6 19G2021, locale en-CN)
    [✗] Android toolchain - develop for Android devices
        ✗ Unable to locate Android SDK.
          Install Android Studio from: https://developer.android.com/studio/index.html
          On first launch it will assist you in installing the Android SDK components.
          (or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions).
          If the Android SDK has been installed to a custom location, set ANDROID_SDK_ROOT to that location.
          You may also want to add it to your PATH environment variable.
    
     
    [✓] Xcode - develop for iOS and macOS (Xcode 12.0)
    [!] Android Studio (not installed)
    [✓] Connected device (2 available)
    
    ! Doctor found issues in 2 categories.
    

    Can u help to fix it since I am not able to build with flutter master channel, also I believe it will broken up eventually when flutter upgrade version.

    bug 
    opened by jinfagang 10
  • Incompatible intl version

    Incompatible intl version

    Hi, sorry to bother you, but I get this message when trying to build my apk:

    ERR : Because every version of card_settings depends on intl ^0.15.7 and every version of flutter_localizations from sdk depends on intl 0.15.6, card_settings is incompatible with flutter_localizations from sdk.

    Do you mind downgrading the intl version or is there another solution ?

    bug 
    opened by arthurgustin 8
  • Some missing features (for me)

    Some missing features (for me)

    I really like the look and ease of this package, and got it looking fairly good, but ran into a few little limitations that might keep me from replacing my standard Material Input fields. First problem is I didn't have access to the field's controller which I use to load the data from Firestore after the page is loaded, so I can't just use initalValue to populate it. Should be simple to have an option property to link it to a saved controller. I also needed to option to override the default CardSettingsField's label TextStyle from the themedata to a custom one for some of the input field labels that need it. Also shouldn't be hard, I can see where I'd do it in buildLabel() with an optional labelTextStyle in there. I particularly needed it for the CardSettingsHeader where I really needed to change the text color because it didn't show up with the Header background color I have. It would also be nice to be able to align the input fields to the right, instead of it hugging the label on the left. Most of the fields would look much better right justified in my opinion, but should be a choice.. I could think of a few other things to improve this great component, but these are my more critical needs so I can use it throughout my app. One part I was trying to figure out it how to make a height field with feet and inches together, not with feet as a decimal, but I can probably figure out how to make a custom CardSettings component for that. Anyways, thanks.. If you wanted me to help make those changes, I could, but I wouldn't want to impose on your code....

    opened by Skquark 8
  • Error on Build

    Error on Build

    FAILURE: Build failed with an exception.

    • What went wrong: A problem occurred configuring root project 'file_picker'.

    SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

    researching 
    opened by graemebond 7
  • Not all theme styles are respected

    Not all theme styles are respected

    Hello,

    first, kudos to this awesome library. it helps a lot.

    I just noticed that not all theme styles are respected. I set the default font familiy to Calibri Light, but the value text is still set to .SF UI Text for Cupertino

    image

    bug 
    opened by esskar 7
  •  Getter not found: 'obscuringCharacter' when building for windows desktop

    Getter not found: 'obscuringCharacter' when building for windows desktop

    Error: Getter not found: 'obscuringCharacter'. _show ? widget.secret : RenderEditable.obscuringCharacter * widget.secret.length, When running flutter run -d windows.

    This seems to be originating from a dependency on the package https://pub.dev/packages/flutter_cupertino_settings. However, they recently fixed this issue. That can be seen here.

    I also noticed that the card_settings package supposedly fixed this issue already as well in this update

    Can you guys help me understand why I am getting this compiler error still then?

    My flutter doctor says this: `[√] Flutter (Channel master, 1.19.0-3.0.pre.13, on Microsoft Windows [Version 10.0.18362.836], locale en-US)

    [√] Android toolchain - develop for Android devices (Android SDK version 28.0.3) [√] Chrome - develop for the web [√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.6.0) [√] Android Studio (version 3.0) [!] IntelliJ IDEA Ultimate Edition (version 2018.3) X Flutter plugin not installed; this adds Flutter specific functionality. [√] VS Code (version 1.45.1) [√] Connected device (3 available) `

    and I am using card_settings version ^1.9.3

    opened by nirvan-odb 7
  • Freeze during scrolling

    Freeze during scrolling

    Hi, Thank you so much for the amazing set of widgets.

    I have a minor problem, there seems to be a bug in CardSettingsNumberPicker where if you try to scroll during another scroll animation, the entire scroll box would freeze. (Although the "Cancel" and "Ok" buttons are still clickable and operating).

    I believe this is the same issues as https://github.com/flutter/flutter/issues/14452 and https://github.com/flutter/flutter/issues/11433 . The latter issue has also provided a screen recording to replicate the exact same issue that I have with CardSettingsNumberPicker.

    The error message is 'package:flutter/src/widgets/scrollable.dart': Failed assertion: line 496 pos 12: '_hold == null': is not true..

    I was wondering if there are any solutions for this problem?

    researching 
    opened by eastrd 7
  • A RenderFlex overflowed on the right.

    A RenderFlex overflowed on the right.

    I am using the recent version of the package and running in to right overflow issue.

    Similar Issue: https://github.com/codegrue/card_settings/issues/20

    But I am not using any check for orientation. Just a single layout.

    Code Used:

    Form(
            key: _formKey,
            child: CardSettings(
              children: <Widget>[
                CardSettingsHeader(label: 'Profile Details'),
                CardSettingsText(
                  label: 'Display Name',
                  autovalidate: _autoValidate,
                  initialValue: user.displayName,
                  validator: (value) {
                    if (value == null || value.isEmpty) return 'Name is required.';
                  },
                  onSaved: (value) => displayName = value,
                ),
                CardSettingsText(
                  label: 'City',
                  autovalidate: _autoValidate,
                  initialValue: user.city,
                  validator: (value) {
                    if (value == null || value.isEmpty) return 'City is required.';
                  },
                  onSaved: (value) => city = value,
                ),
                CardSettingsText(
                  label: 'Phone Number',
                  autovalidate: _autoValidate,
                  initialValue: user.phone,
                  keyboardType: TextInputType.phone,
                  onSaved: (value) => phoneNumber = value,
                  validator: (value) {
                    if (value != null && value.toString().length != 10)
                      return 'Incomplete Phone Number';
                    return null;
                  },
                ),
                CardSettingsSwitch(
                  label: 'Display Phone Number in Profile?',
                  autovalidate: _autoValidate,
                  initialValue: user.canShowPhone,
                  onSaved: (value) => canShowPhone = value,
                ),
                CardSettingsButton(
                  label: 'SAVE',
                  onPressed: _savePressed,
                  backgroundColor: Colors.lightGreenAccent,
                  textColor: Colors.black,
                ),
                CardSettingsButton(
                  label: 'RESET',
                  onPressed: () {
                    _formKey.currentState.reset();
                  },
                  backgroundColor: Colors.redAccent,
                  textColor: Colors.white,
                ),
              ],
            ),
          );
    

    Exception Stack:

    I/flutter (25293): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
    I/flutter (25293): The following message was thrown during layout:
    I/flutter (25293): A RenderFlex overflowed by 108 pixels on the right.
    I/flutter (25293): 
    I/flutter (25293): The overflowing RenderFlex has an orientation of Axis.horizontal.
    I/flutter (25293): The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
    I/flutter (25293): black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
    I/flutter (25293): Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
    I/flutter (25293): RenderFlex to fit within the available space instead of being sized to their natural size.
    I/flutter (25293): This is considered an error condition because it indicates that there is content that cannot be
    I/flutter (25293): seen. If the content is legitimately bigger than the available space, consider clipping it with a
    I/flutter (25293): ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,
    I/flutter (25293): like a ListView.
    I/flutter (25293): The specific RenderFlex in question is:
    I/flutter (25293):   RenderFlex#263a7 relayoutBoundary=up23 OVERFLOWING
    I/flutter (25293):   creator: Row ← Padding ← ConstrainedBox ← Container ← Row ← Column ← Padding ← DecoratedBox ←
    I/flutter (25293):   Container ← CardSettingsField ← CardSettingsSwitch ← Column ← ⋯
    I/flutter (25293):   parentData: offset=Offset(0.0, 0.0) (can use size)
    I/flutter (25293):   constraints: BoxConstraints(w=114.0, 0.0<=h<=Infinity)
    I/flutter (25293):   size: Size(114.0, 23.0)
    I/flutter (25293):   direction: horizontal
    I/flutter (25293):   mainAxisAlignment: start
    I/flutter (25293):   mainAxisSize: max
    I/flutter (25293):   crossAxisAlignment: center
    I/flutter (25293):   textDirection: ltr
    I/flutter (25293):   verticalDirection: down
    I/flutter (25293): ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤
    I/flutter (25293): ════════════════════════════════════════════════════════════════════════════════════════════════════
    
    bug question researching 
    opened by Purus 7
  • Feature request: Use controller with CardSettingsPhone

    Feature request: Use controller with CardSettingsPhone

    My function creating a phone field is the following:

    static Widget nullablePhoneFormField(TextEditingController controller, String label) {
         return CardSettingsPhone(
           label: label,
           controller: controller,
           validator: (val) {},
         );
       }
    

    Here is the console output:

    I/flutter (  618): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
    I/flutter (  618): The following assertion was thrown building CardSettingsPhone(dirty):
    I/flutter (  618): 'package:card_settings/widgets/text_fields/card_settings_text.dart': Failed assertion: line 55 pos
    I/flutter (  618): 16: 'controller == null || inputMask == null': is not true.
    

    A workaround is to instanciate my CardSettingsPhone like this:

    static Widget nullablePhoneFormField(TextEditingController controller, String label) {
         return CardSettingsPhone(
           label: label,
           initialValue: controller.text == "" ? null : int.parse(controller.text),
           onChanged: (int intVal) {
             controller.text = intVal.toString();
           },
           onSaved: (int intVal) {
             controller.text = intVal.toString();
           },
           validator: (val) {},
         );
       }
    

    But I don't really like it and sometimes the last characters are not updated and I don't understand why...

    enhancement question wontfix 
    opened by arthurgustin 7
  • How to disable submission or revert to initValue the CardSettingsText() ?

    How to disable submission or revert to initValue the CardSettingsText() ?

    How to disable submission or revert to initValue the cardsettingstext? When input value is not valid , submission still works. I have a situation when input text should not empty, but after validation the submission still works and as result the inputfield stays empty.

    opened by visign3d 3
  • new feature: set focus field on tap label

    new feature: set focus field on tap label

    Hi, Is it possible to focus field when the user tap on the label field? currently the field focus is only activated when the user taps the textfield editing area.

    thanks.

    opened by robertoltrocha 0
Owner
CodeGrue
Technologist, Hobbyist, Gamer, Author
CodeGrue
ID-Card - A Simple ID Card Project Using Flutter

ID-CARD A new Flutter project.A simple demonstration of my time in the Dart lang

edwromero 0 Jan 26, 2022
A simple Flutter component capable of using JSON Schema to declaratively build and customize web forms.

A simple Flutter component capable of using JSON Schema to declaratively build and customize web forms.

null 3 Oct 2, 2022
A Dart package that detects credit card types based on their prefixes

credit_card_type_detector | Credit Card Type Detector A Dart package that detects credit card types based on the current credit card number patterns T

Tanner Davis 22 Jan 4, 2023
Flutter package - Animated Flip Card

Animated Flip Card Animated Flip Card package lets you add an animated flip card to your Flutter app that hide and show more informations. Features Th

Ulfhrafn 8 Dec 4, 2022
A flutter port of Cardidy, a package to validate or identify card numbers & cvv with ease.

Flutter Cardidy A plugin to validate or identify card numbers & cvv with ease. This flutter package will help you validate card numbers or CVVs and id

Heyramb Narayan Goyal 1 Nov 28, 2021
A Flutter package to easily create a Credit Card in your application.

Awesome Card A flutter package to create a Credit Card widget in your application. Stay tuned for the latest updates: ?? Screenshots ⚙️ Installation I

Vivek Kaushik 142 Dec 1, 2022
A simple package that provides you with some widgets and cutom clippers which implements the shape of a coupon card.

Coupon UI Kit A simple package that provides you with some widgets and cutom clippers which implements the shape of a coupon card. The example contain

AbdulMuaz Aqeel 15 Dec 20, 2022
Flutter Credit Card Input form

This package provides visually beautiful UX through animation of credit card information input form. Preview Installing Add dependency to pubspec.yaml

Jeongtae Kim 426 Jan 5, 2023
Flutterwave landing page animated card deck implemented with Flutter

The Flutterwave animated card deck in Flutterwave's landing page implemented with Flutter.

null 38 Nov 10, 2022
This is my card using flutter

Mi Card Our Goal Now that you've seen how to create a Flutter app entirely from scratch, we're going to go further and learn more about how to design

Joshua Uzor 5 Dec 18, 2021
Flutter - Special animated flip card

special_card Flutter UI Design | Animated Flip Card. Demo for the app: animated-flip-card.mp4 Getting Started This project is a starting point for a F

Ulfhrafn 2 Dec 4, 2022
Flutter Card Management App(UI/UX)

Flutter Card Managing App - Cardy Bank I uploaded on youtube!! Thanks to Watch Introduction I'm working on a project to launch a simple brand. I tried

Lomio 8 Oct 31, 2022
Credit Card UI For Flutter

TP1 FLUTTER CREDIT CARD UI FIRST step : must enter the number of credit card then the expired date SECONDE step : you enter the CVV in the back of the

null 0 Nov 8, 2021
Mi-card-app flutter project

my_card_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

null 1 Dec 2, 2021
A flutter widget where a card is expanded ontap.

Expansion card This package provides an easy implementation of a Expansion type card where you can also add gif at the background. How to use import '

null 127 Dec 6, 2022
Find out under which card the Flutter logo is hiding.

Flutter Card Flip Game Find out under which card the Flutter logo is hiding. Game Rules The purpose of this game is for the player to find out under w

Nickolas Chong 0 Dec 30, 2021
Scratch card widget which temporarily hides content from user.

scratcher Scratch card widget which temporarily hides content from user. Features Android and iOS support Cover content with full color or custom imag

Kamil Rykowski 405 Dec 27, 2022
This is simple Ninja ID Card App Code ;)

ninjacard A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if thi

Saini Madhu 4 Oct 17, 2022
Flutter is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, desktop, and embedded devices from a single codebase.

flutter_quize A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

IQBAL HASAN 3 Aug 24, 2022