Flutter 中的表单验证(17)

作者 : 慕源网 本文共3903个字,预计阅读时间需要10分钟 发布时间: 2021-11-16 共889人阅读

介绍

在本文中,我们将学习如何在 Flutter 中应用表单验证。对于表单验证,我们将使用 flutter_form_builder ,它为我们提供了创建表单组件的语法,并减少了构建表单、验证字段、对更改做出反应以及以地图的形式收集表单值的样板需求。那么,让我们开始在 Flutter 中实现表单验证。

输出

编程步骤

第1步

第一步也是最基本的步骤是在 Flutter 中创建一个新应用程序。如果你是 Flutter 的初学者,那么你可以查看我的博客Create a first app in Flutter。我创建了一个名为“flutter_form_validation”的应用程序。

第2步

我们需要添加一个表单构建器插件,它为我们提供表单验证。为此,打开项目中的 pubspec.yaml 文件并将以下依赖项添加到其中。

dependencies:  
 flutter:  
   sdk: flutter  
 cupertino_icons: ^0.1.2  
 flutter_form_builder: ^3.4.1  

第 3 步

现在,转到 main.dart 并导入表单构建器包。

import 'package:flutter_form_builder/flutter_form_builder.dart';  

第4步

现在,我们将实现所有类型的表单验证控制器,以了解如何将验证应用于表单控制器。以下是以编程方式实现的。

import 'package:flutter/material.dart';    
import 'package:flutter_form_builder/flutter_form_builder.dart';    
import 'package:intl/intl.dart';    
     
void main() => runApp(MyApp());    
     
class MyApp extends StatelessWidget {    
 @override    
 Widget build(BuildContext context) {    
   return MaterialApp(    
     theme: ThemeData(    
       primarySwatch: Colors.purple,    
     ),    
     home: MyHomePage(),    
   );    
 }    
}    
     
class MyHomePage extends StatefulWidget {    
 @override    
 _MyHomePageState createState() => _MyHomePageState();    
}    
     
class _MyHomePageState extends State<MyHomePage> {    
 var data;    
 bool autoValidate = true;    
 bool readOnly = false;    
 bool showSegmentedControl = true;    
 final GlobalKey<FormBuilderState> _fbKey = GlobalKey<FormBuilderState>();    
     
 @override    
 Widget build(BuildContext context) {    
   return Scaffold(    
     appBar: AppBar(    
       title: Text("Flutter Form Validation"),    
     ),    
     body: Padding(    
       padding: EdgeInsets.all(10),    
       child: SingleChildScrollView(    
         child: Column(    
           children: <Widget>[    
             FormBuilder(    
               key: _fbKey,    
               initialValue: {    
                 'date': DateTime.now(),    
                 'accept_terms': false,    
               },    
               autovalidate: true,    
               child: Column(    
                 children: <Widget>[    
                   FormBuilderTextField(    
                     attribute: 'text',    
                     validators: [FormBuilderValidators.required()],    
                     decoration: InputDecoration(labelText: "Full Name"),    
                   ),    
                   FormBuilderDateTimePicker(    
                     attribute: "date",    
                     inputType: InputType.date,    
                     validators: [FormBuilderValidators.required()],    
                     format: DateFormat("dd-MM-yyyy"),    
                     decoration: InputDecoration(labelText: "Date of Birth"),    
                   ),    
                   FormBuilderDropdown(    
                     attribute: "gender",    
                     decoration: InputDecoration(labelText: "Gender"),    
                     // initialValue: 'Male',    
                     hint: Text('Select Gender'),    
                     validators: [FormBuilderValidators.required()],    
                     items: ['Male', 'Female', 'Other']    
                         .map((gender) => DropdownMenuItem(    
                             value: gender, child: Text("$gender")))    
                         .toList(),    
                   ),    
                   FormBuilderTextField(    
                     attribute: "age",    
                     decoration: InputDecoration(labelText: "Age"),    
                     keyboardType: TextInputType.number,    
                     validators: [    
                       FormBuilderValidators.numeric(),    
                       FormBuilderValidators.max(70),    
                     ],    
                   ),    
                   FormBuilderSlider(    
                     attribute: "slider",    
                     validators: [FormBuilderValidators.min(6)],    
                     min: 0.0,    
                     max: 10.0,    
                     initialValue: 1.0,    
                     divisions: 20,    
                     decoration: InputDecoration(    
                         labelText: "Number of Family Members"),    
                   ),    
                   FormBuilderSegmentedControl(    
                     decoration: InputDecoration(labelText: "Rating"),    
                     attribute: "movie_rating",    
                     options: List.generate(5, (i) => i + 1)    
                         .map(    
                             (number) => FormBuilderFieldOption(value: number))    
                         .toList(),    
                   ),    
                   FormBuilderStepper(    
                     decoration: InputDecoration(labelText: "Stepper"),    
                     attribute: "stepper",    
                     initialValue: 10,    
                     step: 1,    
                   ),    
                   FormBuilderCheckboxList(    
                     decoration:    
                         InputDecoration(labelText: "Languages you know"),    
                     attribute: "languages",    
                     initialValue: ["English"],    
                     options: [    
                       FormBuilderFieldOption(value: "English"),    
                       FormBuilderFieldOption(value: "Hindi"),    
                       FormBuilderFieldOption(value: "Other")    
                     ],    
                   ),    
                   FormBuilderSignaturePad(    
                     decoration: InputDecoration(labelText: "Signature"),    
                     attribute: "signature",    
                     height: 100,    
                   ),    
                   FormBuilderRate(    
                     decoration: InputDecoration(labelText: "Rate this site"),    
                     attribute: "rate",    
                     iconSize: 32.0,    
                     initialValue: 1,    
                     max: 5,    
                   ),    
                   FormBuilderCheckbox(    
                     attribute: 'accept_terms',    
                     label: Text(    
                         "I have read and agree to the terms and conditions"),    
                     validators: [    
                       FormBuilderValidators.requiredTrue(    
                         errorText:    
                             "You must accept terms and conditions to continue",    
                       ),    
                     ],    
                   ),    
                 ],    
               ),    
             ),    
             Row(    
               children: <Widget>[    
                 MaterialButton(    
                   child: Text("Submit"),    
                   onPressed: () {    
                     _fbKey.currentState.save();    
                     if (_fbKey.currentState.validate()) {    
                       print(_fbKey.currentState.value);    
                     }    
                   },    
                 ),    
                 MaterialButton(    
                   child: Text("Reset"),    
                   onPressed: () {    
                     _fbKey.currentState.reset();    
                   },    
                 ),    
               ],    
             )    
           ],    
         ),    
       ),    
     ),    
   );    
 }    
} 

第 5 步

太好了,你已经完成了 Flutter 中的表单验证。在设备或模拟器中运行此项目并检查输出。

结论

在本文中,我们学习了如何在 Flutter 中实现表单验证。您可以在插件的官方文档中查看更多验证。

参考

慕源网 » Flutter 中的表单验证(17)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录