在Flutter有很多方法可以提交用户输入的数据。但最常用的方法是使用TextFields 。但是使用TextFields有一个缺点,它需要您在Flutter创建的每个文本字段的控制器。所以克服使用表单。在flutter形式不需要任何textController来存储数据。它只是需要1个GlobalKey被设置为FormState。
注意:下面的代码没有提交按钮,因为这里没有要求。读者可以将自己的功能添加到表单中,并使用以下代码作为模板。
源代码:
Dart
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "FormValidation",
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
final GlobalKey _formKey = GlobalKey();
String email = "";
String password = "";
void _submit() {
// you can write your
// own code according to
// whatever you want to submit;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Form Validation"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Form(
key: _formKey,
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'E-Mail'),
keyboardType: TextInputType.emailAddress,
onFieldSubmitted: (value) {
setState(() {
email = value;
});
},
validator: (value) {
if (value.isEmpty || !value.contains('@')) {
return 'Invalid email!';
}
},
),
// this is where the
// input goes
TextFormField(
decoration: InputDecoration(labelText: 'password'),
keyboardType: TextInputType.visiblePassword,
obscureText: true,
validator: (value) {
if (value.isEmpty && value.length < 7) {
return 'Invalid password!';
}
},
onFieldSubmitted: (value) {
setState(() {
password = value;
});
},
),
RaisedButton(
onPressed: _submit,
child: Text("submit"),
),
],
),
),
// this is where
// the form field
// are defined
SizedBox(
height: 20,
),
Column(
children: [
email.isEmpty ? Text("No data") : Text(email),
SizedBox(
height: 10,
),
password.isEmpty ? Text("No Data") : Text(password),
],
)
],
),
),
);
}
}
输出:
完整源代码位于:- https://github.com/codec-akash/FormData