Skip to main content

Form Input Widget on Flutter Android - Text, Slider, Switch, Date Picker, Buttons & Check Box

 Learn how you can use the different Form Input Widget on Flutter Android - Text, Slider, Switch, Date Picker, Buttons & Check Box

This Application will give a basic idea like how you can create different widgets for the form panel designing.


Video Tutorial




import 'package:flutter/material.dart';
import 'package:intl/intl.dart' as intl;

class FormWidgetsDemo extends StatefulWidget {
  const FormWidgetsDemo({super.key});

  @override
  State createState() => _FormWidgetsDemoState();
}

class _FormWidgetsDemoState extends State {
  final _formKey = GlobalKey();
  DateTime date = DateTime.now();
  double maxValue = 0;
  bool? checkBoxFeature = false;
  bool sliderFeature = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Hakeem Innovation Technology'),
      ),
      body: Form(
        key: _formKey,
        child: Scrollbar(
          child: Align(
            alignment: Alignment.topCenter,
            child: Card(
              child: SingleChildScrollView(
                padding: const EdgeInsets.all(16),
                child: ConstrainedBox(
                  constraints: const BoxConstraints(maxWidth: 400),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: [
                      ...[
                        TextFormField(
                            decoration: const InputDecoration(
                          border: OutlineInputBorder(),
                          filled: true,
                          hintText: 'Text Field',
                          labelText: 'Title',
                        )),
                        TextFormField(
                          decoration: const InputDecoration(
                            border: OutlineInputBorder(),
                            filled: true,
                            hintText: 'Text Field Multi line...',
                            labelText: 'Description',
                          ),
                          maxLines: 3,
                        ),
                        _FormDatePicker(
                          date: date,
                          onChanged: (value) {
                            setState(() {
                              date = value;
                            });
                          },
                        ),
                        Column(
                          mainAxisAlignment: MainAxisAlignment.start,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: [
                                Text(
                                  'Slider ',
                                  style: Theme.of(context).textTheme.bodyLarge,
                                ),
                              ],
                            ),
                            Text(
                              maxValue.toStringAsFixed(0),
                              style: Theme.of(context).textTheme.titleMedium,
                            ),
                            Slider(
                              min: 0,
                              max: 100,
                              divisions: 50,
                              value: maxValue,
                              onChanged: (value) {
                                setState(() {
                                  maxValue = value;
                                });
                              },
                            ),
                          ],
                        ),
                        Row(
                          mainAxisAlignment: MainAxisAlignment.start,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: [
                            Checkbox(
                              value: checkBoxFeature,
                              onChanged: (checked) {
                                setState(() {
                                  checkBoxFeature = checked;
                                });
                              },
                            ),
                            Text('CheckBox',
                                style: Theme.of(context).textTheme.titleMedium),
                          ],
                        ),
                        Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: [
                            Text('Switch',
                                style: Theme.of(context).textTheme.bodyLarge),
                            Switch(
                              value: sliderFeature,
                              onChanged: (enabled) {
                                setState(() {
                                  sliderFeature = enabled;
                                });
                              },
                            ),
                          ],
                        ),
                      ].expand(
                        (widget) => [
                          widget,
                          const SizedBox(
                            height: 15,
                          )
                        ],
                      ),
                      ElevatedButton(
                          onPressed: () {},
                          child: const Text('Elevated Button')),
                      ElevatedButton.icon(
                          icon: const Icon(Icons.email),
                          onPressed: () {},
                          label: const Text('Elevated Button Icon')),
                      IconButton(
                        onPressed: () {},
                        icon: const Icon(Icons.email),
                      ),
                      TextButton(
                          onPressed: () {}, child: const Text('Text Button')),
                    ],
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

class _FormDatePicker extends StatefulWidget {
  final DateTime date;
  final ValueChanged onChanged;

  const _FormDatePicker({
    required this.date,
    required this.onChanged,
  });

  @override
  State<_formdatepicker> createState() => _FormDatePickerState();
}

class _FormDatePickerState extends State<_formdatepicker> {
  @override
  Widget build(BuildContext context) {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            Text(
              'Date',
              style: Theme.of(context).textTheme.bodyLarge,
            ),
            Text(
              intl.DateFormat.yMd().format(widget.date),
              style: Theme.of(context).textTheme.titleMedium,
            ),
          ],
        ),
        TextButton(
          child: const Text('Edit'),
          onPressed: () async {
            var newDate = await showDatePicker(
              context: context,
              initialDate: widget.date,
              firstDate: DateTime(1900),
              lastDate: DateTime(2100),
            );

            // Don't change the date if the date picker returns null.
            if (newDate == null) {
              return;
            }

            widget.onChanged(newDate);
          },
        )
      ],
    );
  }
}

     
  

Comments

Popular posts from this blog

Gradle project sync failed. Basic functionality (e.g, editing, debugging) will not work properly.

Gradle is an open source build tool which help us to accelerate developer productivity. Go to Gradle Services website(http://services.gradle.org/distributions/) and download the latest version Download the latest version gradle-4.7-rc-1-all.zip ( Latest version while writing this article) and you can download greater than 4.7 if available and make sure the zip file contains "all" keyword (gradle-*.*-rc-*-all.zip). Go to your download location and unzip the downloaded file Android Studio > File >  Settings > Build, Execution, Deployment  Gradle Project-level settings -> Select Use local gradle distribution -> Select the unzip folder of downloaded gradle version -> Click OK button to exit from the Settings window. Please Wait until Gradle build completes and your problem have been resolved.   If gradle build failed, follow few more steps to get resolved Final step to resolve this error Go to your project -> Gradle script -...

Foofle.com is a Alternate Way to visit Google.com

Google the internet search engine giant have bought so many domain for Google.com which are very similar to Google keywords. When i was typing Google in keyboard i made a spell mistake then i hit the enter button at the time i got the Google page but i know i have made a mistake then i started thinking how this Google is very smart.The Google looked the very nearer Keywords in keyboard and registered their domain which are very nearer to their Google Keyword similarly i tried other one also, Here is the list of alternate ways to visit Google.com without typing them. http://www.gogole.com http://www.foofle.com http://www.googlr.com http://www.gogle.com Check It out By your self.

Feed Burner Is Not Updating your Blog Articles - TroubleShoot

Issue : Your feed filesize is larger than 512K. You need to reduce its size in order for FeedBurner to process it. Tips for controlling feed file size with Blogger can be found in Tech Tips on FeedBurner Forums, our support site . Feed burner tool only keeps the last 30 recent articles, articles images and adsense (If you have enable this) and all this things should be within 512K Size then there is no problem for you and if its exceeds the limit more than 512K then Feed burner will stop updating your feeds. How to Troubleshoot this Feed Issue Go to Feedburner.com and click on the feedlink >Navigate to Troubleshootize Tab > Click the Resync Now Button. If you see the above issue then here is a solution for you Edit your feed details from this http://myblogname.com/atom.xml or http://myblogname.com/feeds/posts/default to like this http://myblogname.com/feeds/posts/default?max- results=15 Save the feed details and again go to troubleshootize Tab > Click the Resyn Now button and...