TextFromField

TextFormField是继承了TextFiled,

TextFormField一般是放在Form里面使用,可以使用GlobalKey进行控制:

 

 

首先在类里面声明GlobalKey,如:

final globalKeyValue=GlobalKey<FormState>();

其次在Form里面加入 key:GlobalKey,如:

key: globalKeyValue,

再次在TextFormFiled里面定义onSave(){}和validate(){}

onSaved: (value){username=value;},
validator: validateUsername,
String validateUsername(value){
if(value.isEmpty){return 'Username is required';}else{return null;}
}

最后在使用下面这两句就直接调用了TextFormField内部定义的onSave(){}和validate(){}:

globalKeyValue.currentState.save();
globalKeyValue.currentState.validate();



附上一个示例:
import 'package:flutter/material.dart';

void main()=>runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}

class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
final globalKeyValue=GlobalKey<FormState>();
String username,password;
bool boolSwich=false;
String validateUsername(value){
if(value.isEmpty){return 'Username is required';}else{return null;}
}
String validatePassword(value){
if(value.isEmpty){return 'passWord is required';}else{return null;}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('FormDemo'),),
body: Form(
key: globalKeyValue,
child: Column(
children: <Widget>[
SizedBox(height: 5,),
TextFormField(
validator: validatePassword,
autovalidate: boolSwich,
onSaved: (value){username=value;},
decoration: InputDecoration(
contentPadding: EdgeInsets.all(5),
fillColor: Colors.orangeAccent,
filled: true,
labelText: '输入标签',
hintText: '输入用户名',
helperText: '',
),
),
SizedBox(height: 5,),
TextFormField(
obscureText: true,
validator: validateUsername,
autovalidate: boolSwich,
onSaved: (value){password=value;},
decoration: InputDecoration(
contentPadding: EdgeInsets.all(5),
fillColor: Colors.orangeAccent,
filled: true,
labelText: '输入标签',
hintText: '输入密码',
helperText: '',
),
),
Container(
padding: EdgeInsets.only(left: 18,right: 18),
width: double.infinity,
child: RaisedButton(
color: Colors.orangeAccent,
highlightColor: Colors.red,
child: Icon(Icons.save),
onPressed: (){
globalKeyValue.currentState.save();
globalKeyValue.currentState.validate();
debugPrint('username:$username');
debugPrint('password:$password');
boolSwich=true;
}
),
),
],
),
),
);
}
}
 
posted @ 2019-05-10 11:38  braveheart007  阅读(368)  评论(0编辑  收藏  举报