问题描述
您好,我有一个地址页面,其中包含用户的详细信息。还有一种形式,它提供了所有必要的验证,我想获取用户提供的所有详细信息并将其存储在列表中,以便我可以使用该列表并将其存储在数据库中。但是每当我尝试将这些元素添加到列表中并打印相同的内容时,列表就会显示为空。
这是我的代码。
TextFormField(
decoration: Inputdecoration(
hintText: 'Enter your Name'),maxLength: 20,validator: (String value) {
address.clear();
if (value.isEmpty) {
return 'Name is required';
}
return null;
},onSaved: (String value) {
_name = value;
address.add(value);
},),RaisedButton(
color: Colors.red,child: Text('Proceed to order',style: TextStyle(color: Colors.white),onpressed: (){
if(_formKey.currentState.validate()) {
print("address" + address.toString());
switch(widget.font) {
case'a': {
Navigator.push(context,MaterialPageRoute(builder: (context)=>Onlinepage()));
/*Navigator.push(context,MaterialPageRoute(builder: (context)=>Onlinepage()));*/
}
break;
case 'b': {
Navigator.push(context,MaterialPageRoute(builder: (context)=>Codpage(address:address,orderListFinal:widget.orderListFinal,total:widget.total)));
}
break;
这是输出 I / Flutter(19488):地址[] 下面是整个代码
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:Flutter/material.dart';
import 'package:Flutter/services.dart';
import 'package:Fluttertoast/Fluttertoast.dart';
import 'package:kartofill/Homepagewithprice/Codpage.dart';
import 'package:kartofill/Homepagewithprice/Onlinepage.dart';
var address = [];
class Deliveryaddresspage extends StatefulWidget {
var total;
List orderListFinal = [];
var font;
Deliveryaddresspage({this.font,this.orderListFinal,this.total});
@override
_DeliveryaddresspageState createState() => _DeliveryaddresspageState();
}
class _DeliveryaddresspageState extends State<Deliveryaddresspage> {
String _name;
String _pincode;
String _address1;
String _address2;
String _address3;
String _phoneNumber;
@override
void initState() {
// Todo: implement initState
super.initState();
}
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: Row(
children: <Widget>[
Expanded(
child: RaisedButton(
color: Colors.red,total:widget.total)));
}
break;
default: {
Fluttertoast
.showToast(
msg: "Please Select any one of the above options",toastLength: Toast
.LENGTH_SHORT,gravity: ToastGravity
.CENTER,timeInSecForIosWeb: 1,backgroundColor: Colors
.red,textColor: Colors
.white,fontSize: 16.0
);
}
break;
}
}
},)
],appBar: AppBar(
title: Text('KartOfill'),backgroundColor: Colors.red,body: SingleChildScrollView(
child: Container(
width: MediaQuery.of(context).size.width,child: Form(
key: _formKey,child: Padding(
padding: const EdgeInsets.all(8.0),child: Column(
children: <Widget>[
Center(child: Text('Delivery Address',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 25),)),SizedBox(height: MediaQuery.of(context).size.height*.001,TextFormField(
decoration: Inputdecoration(
hintText: 'Enter your Name'),TextFormField(
decoration: Inputdecoration(hintText: 'Enter 10 digit phone Number'),maxLength: 10,keyboardType: TextInputType.number,inputFormatters: [
new BlacklistingTextInputFormatter(
new RegExp(
'[\\.|\\,|\\-|\\ ]'))
],validator: (String value) {
if (value.isEmpty) {
return 'Phone number is required';
}
if( value.length < 10 || !RegExp(r'^[0-9]+$').hasMatch(value))
{
return 'Please enter correct 10 digit phone number';
}
return null;
},onSaved: (String value) {
_phoneNumber = value;
},TextFormField(
decoration: Inputdecoration(hintText: 'Address 1'),validator: (String value) {
if (value.isEmpty) {
return 'Address is required';
}
return null;
},onSaved: (String value) {
_address1 = value;
},TextFormField(
decoration: Inputdecoration(hintText: 'Address 2'),onSaved: (String value) {
_address2 = value;
},TextFormField(
decoration: Inputdecoration(hintText: 'Address 3'),onSaved: (String value) {
_address3 = value;
},TextFormField(
decoration: Inputdecoration(labelText: 'Pincode'),maxLength: 6,validator: (String value) {
if (value.isEmpty ) {
return 'Pincode is required';
}
else if (value.length < 6 || !RegExp(r'^[0-9]+$').hasMatch(value)){
return 'Please enter correct pincode';
}
return null;
},onSaved: (String value) {
_pincode = value;
},],);
}
}
解决方法
尝试使用onChanged:(){}
代替onSaved