Flutter 如何在颤振中单击按钮添加字段
单击“添加”按钮时如何添加文本字段。它位于应用程序栏中。当我点击add按钮时,它将添加四个字段,我已经在我尝试过的示例代码中创建了这四个字段。所以请任何人帮忙。你的帮助可以让我开心:) 在这段代码中有四个类似的字段_buildidentificationtype1、\u builddocumentnumber1、\u buildexpirydate1、\u buildissuingauthority1 我想在单击add按钮时生成这四个字段Flutter 如何在颤振中单击按钮添加字段,flutter,flutter-layout,flutter-sliver,generate,form-fields,Flutter,Flutter Layout,Flutter Sliver,Generate,Form Fields,单击“添加”按钮时如何添加文本字段。它位于应用程序栏中。当我点击add按钮时,它将添加四个字段,我已经在我尝试过的示例代码中创建了这四个字段。所以请任何人帮忙。你的帮助可以让我开心:) 在这段代码中有四个类似的字段_buildidentificationtype1、\u builddocumentnumber1、\u buildexpirydate1、\u buildissuingauthority1 我想在单击add按钮时生成这四个字段 import 'dart:io'; import 'p
import 'dart:io';
import 'package:datetime_picker_formfield/datetime_picker_formfield.dart';
import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:image_picker/image_picker.dart';
import 'package:intl/intl.dart';
import 'package:tudo/src/modules/bsp_signup/bsp_licensed_signup_terms/bsp_licensed_signup_terms_page.dart';
import 'package:tudo/src/modules/bsp_signup/bsp_signup_common_model.dart';
import 'package:tudo/src/styles/colors.dart';
import 'package:tudo/src/utils/navigation_helper.dart';
import 'package:tudo/src/utils/validator.dart';
import 'package:tudo/src/widgets/tudo_selection_widget/TudoConditionWidget.dart';
import 'package:tudo/src/widgets/tudo_text_widget/TudoTextWidget.dart';
class BspUnlicensedSignupPage extends StatefulWidget {
static const String routeName = "/bspUnlicensedSignup";
final BspSignupCommonModel bspSignupCommonModel;
BspUnlicensedSignupPage({
Key key,
@required this.bspSignupCommonModel,
}) : super(key: key);
@override
_BspUnlicensedSignupPageState createState() =>
_BspUnlicensedSignupPageState();
}
class _BspUnlicensedSignupPageState extends State<BspUnlicensedSignupPage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
List<Object> images = List<Object>();
Future<File> _imageFile;
@override
void initState() {
super.initState();
debugPrint(
'BSP SIGNUP DATA: ${widget.bspSignupCommonModel.businessPhoneNo}');
debugPrint('BSP SIGNUP DATA: ${widget.bspSignupCommonModel.businessYear}');
debugPrint(
'BSP SIGNUP DATA: ${widget.bspSignupCommonModel.numberofEmployees}');
debugPrint('BSP SIGNUP DATA: ${widget.bspSignupCommonModel.businessType}');
debugPrint(
'BSP SIGNUP DATA: ${widget.bspSignupCommonModel.businessLegalName}');
setState(() {
images.add("Add Image");
images.add("Add Image");
images.add("Add Image");
images.add("Add Image");
images.add("Add Image");
});
}
bool informationislegitimate = false;
DateTime expirydate1 = DateTime.now();
DateTime expirydate2 = DateTime.now();
final format = DateFormat("yyyy-MM-dd");
final format2 = DateFormat("yyyy-MM-dd");
final TextEditingController clrbusinesslicense = TextEditingController();
final TextEditingController clrbusinesslicense2 = TextEditingController();
final TextEditingController clrissuingauthority = TextEditingController();
final TextEditingController clrissuingauthority2 = TextEditingController();
String _licenseno;
String _licenseno2;
String illusingauthority;
String illusingauthority2;
List<String> _type2 = <String>[
'Passport',
'Driving License',
'Voter ID card',
'Ration Card',
'Aadhar'
'Other Id'
];
String type2 = 'Passport';
List<String> _type = <String>[
'Passport',
'Driving License',
'Voter ID card',
'Ration Card',
'Aadhar'
'Other Id'
];
String type = 'Passport';
Map<String, String> _formdata = {};
var _myPets = List<Widget>();
int _index = 1;
void _add() {
int keyValue = _index;
_myPets = List.from(_myPets)
..add(Column(
key: Key("${keyValue}"),
children: <Widget>[
ListTile(
leading: Text('Pet $_index : '),
title: TextField(
onChanged: (val) => _formdata['pet${keyValue - 1}'] = val,
),
),
ListTile(
leading: Text('Name of Pet $_index : '),
title: TextField(
onChanged: (val) {
_formdata['name${keyValue - 1}'] = val;
},
),
),
],
));
setState(() => ++_index);
}
Widget _buildidentificationtype1() {
return FormBuilder(
autovalidate: true,
child: FormBuilderCustomField(
attribute: "Identification type",
validators: [FormBuilderValidators.required()],
formField: FormField(
builder: (FormFieldState<dynamic> field) {
return InputDecorator(
decoration: InputDecoration(
prefixIcon: Icon(Icons.location_on),
labelText: 'Select Personal Identification type',
errorText: field.errorText,
),
isEmpty: type == '',
child: new DropdownButtonHideUnderline(
child: new DropdownButton(
value: type,
isDense: true,
onChanged: (String newValue) {
setState(() {
type = newValue;
field.didChange(newValue);
});
},
items: _type.map(
(String value) {
return new DropdownMenuItem(
value: value,
child: new Text(value),
);
},
).toList(),
),
),
);
},
)),
);
}
Widget _builddocumentnumber1() {
return new TudoTextWidget(
controller: clrbusinesslicense,
prefixIcon: Icon(FontAwesomeIcons.idCard),
labelText: "Business License No",
hintText: "Business License No",
validator: Validators().validateLicenseno,
onSaved: (val) {
_licenseno = val;
},
);
}
Widget _buildexpirydate1() {
return FormField(builder: (FormFieldState state) {
return DateTimeField(
decoration: InputDecoration(
labelText: expirydate1.toString(),
prefixIcon: Icon(Icons.date_range)),
format: format,
onShowPicker: (context, currentValue) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: expirydate1,
firstDate: DateTime(1900),
lastDate: DateTime.now());
if (picked != null && picked != expirydate1)
setState(() {
expirydate1 = picked;
print(expirydate1);
});
},
);
});
}
Widget _buildissuingauthority1() {
return new TudoTextWidget(
prefixIcon: Icon(FontAwesomeIcons.idCard),
labelText: "Photo Identification issuing authority ",
hintText: "Photo Identification issuing authority ",
validator: (val) => Validators.validateName(val, "Issuing Authority"),
onSaved: (val) {
illusingauthority = val;
},
controller: clrissuingauthority,
);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text("BSP Unlicensed Signup"),
leading: IconButton(
icon: Icon(Icons.arrow_back_ios),
onPressed: () {
NavigationHelper.navigatetoBack(context);
},
),
actions: <Widget>[IconButton(icon: Icon(Icons.add), onPressed: _add)],
centerTitle: true,
),
body: Container(
height: double.infinity,
width: double.infinity,
child: Form(
autovalidate: true,
key: _formKey,
child: Stack(
children: <Widget>[
// Background(),
SingleChildScrollView(
padding: const EdgeInsets.all(30.0),
child: new Container(
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildidentificationtype1(),
_builddocumentnumber1(),
_buildexpirydate1(),
_buildissuingauthority1(),
],
),
),
),
],
),
),
),
);
}
}
导入'dart:io';
导入“包:datetime_picker_formfield/datetime_picker_formfield.dart”;
进口“包装:颤振/材料.省道”;
导入“包:flatter_form_builder/flatter_form_builder.dart”;
导入“package:font_awesome_flatter/font_awesome_flatter.dart”;
导入“包:image_picker/image_picker.dart”;
导入“包:intl/intl.dart”;
导入“包:tudo/src/modules/bsp_-signup/bsp_-licensed_-signup_-terms/bsp_-licensed_-signup_-terms/bsp_-signed_-terms_-page.dart”;
导入“包:tudo/src/modules/bsp_signup/bsp_signup_common_model.dart”;
导入“package:tudo/src/style/colors.dart”;
导入“package:tudo/src/utils/navigation_helper.dart”;
导入“package:tudo/src/utils/validator.dart”;
导入“package:tudo/src/widgets/tudo_selection_widget/TudoConditionWidget.dart”;
导入“包:tudo/src/widgets/tudo_text_widget/TudoTextWidget.dart”;
类BSPUnlicedSignupPage扩展StatefulWidget{
静态常量字符串routeName=“/bspunlessedsignup”;
最终BspSignupCommonModel BspSignupCommonModel;
BSP未经许可的SignupPage({
关键点,
@需要此.bspSignupCommonModel,
}):super(key:key);
@凌驾
_BSUnlicensedSignupPageState createState()=>
_BSPNalizedSignupPageState();
}
类bspuunlicensedSignupPageState扩展状态{
最终的GlobalKey _formKey=GlobalKey();
列表图像=列表();
未来图像文件;
@凌驾
void initState(){
super.initState();
调试打印(
'BSP注册数据:${widget.bspSignupCommonModel.businessPhoneNo}');
debugPrint('BSP注册数据:${widget.bspSignupCommonModel.businessYear}');
调试打印(
'BSP注册数据:${widget.bspSignupCommonModel.numberofEmployees}');
debugPrint('BSP注册数据:${widget.bspSignupCommonModel.businessType}');
调试打印(
'BSP注册数据:${widget.bspSignupCommonModel.businessLegalName}');
设置状态(){
图像。添加(“添加图像”);
图像。添加(“添加图像”);
图像。添加(“添加图像”);
图像。添加(“添加图像”);
图像。添加(“添加图像”);
});
}
bool informationisregimitate=false;
DateTime expireydate1=DateTime.now();
DateTime expireydate2=DateTime.now();
最终格式=日期格式(“yyyy-MM-dd”);
最终格式2=日期格式(“yyyy-MM-dd”);
最终TextEditingController clrbusinesslicense=TextEditingController();
最终文本编辑控制器clrbusinesslicense2=文本编辑控制器();
最终TextEditingController CLRISSINGAUTHORITY=TextEditingController();
最终TextEditingController CLRISSINGAUTHORITY2=TextEditingController();
字符串\u许可证编号;
字符串许可证2;
字符串幻觉权限;
字符串illusingauthority2;
列表类型2=[
“护照”,
“驾驶执照”,
"选民身份证",,
“配给卡”,
“阿达尔”
“其他Id”
];
字符串类型2='Passport';
列表类型=[
“护照”,
“驾驶执照”,
"选民身份证",,
“配给卡”,
“阿达尔”
“其他Id”
];
字符串类型='Passport';
映射_formdata={};
var_myPets=List();
int_指数=1;
void_add(){
int keyValue=_索引;
_myPets=列表。从(\u myPets)
…添加(第列)(
key:key(“${keyValue}”),
儿童:[
列表砖(
前导:文本('Pet$\索引:'),
标题:文本字段(
一旦更改:(val)=>_formdata['pet${keyValue-1}']=val,
),
),
列表砖(
前导:文本('Pet$_索引的名称:'),
标题:文本字段(
一旦更改:(val){
_formdata['name${keyValue-1}']=val;
},
),
),
],
));
设置状态(()=>++\u索引);
}
小部件_buildidentificationtype1(){
返回表单生成器(
自动验证:true,
子项:FormBuilderCustomField(
属性:“标识类型”,
验证器:[FormBuilderValidators.required()],
formField:formField(
生成器:(FormFieldState字段){
返回输入装饰器(
装饰:输入装饰(
前缀图标:图标(图标位置打开),
labelText:“选择个人标识类型”,
errorText:field.errorText,
),
isEmpty:type=='',
子项:新的下拉按钮hideUnderline(
孩子:新的下拉按钮(
值:类型,
是的,
onChanged:(字符串newValue){
设置状态(){
类型=新值;
字段.didChange(newValue);
});
},
项目:\ u type.map(
(字符串值){
返回新的DropdownMenuItem(
价值:价值,
子项:新文本(值),
);
},
).toList(),
),
),
);
},
)),
);
}
小部件_builddocumentnumber1(){
返回新的TudoTextWidget(
控制器:CLR商业许可证,
前缀:图标(FontAwesomeIcons.idCard),
labelText:“营业执照编号”,
hintText:“营业执照编号”,
validator:Validators().validateLicenseno,
保存:(val){
_许可证编号=val;
},
);
}
小部件_buildexpirydate1(){
返回表单字段(生成器)
//initialize with false
isClicked = false;
_add() {
setState(() {
isClicked = true;
})
}
isClicked ? _buildidentificationtype1() : Container(),
isClicked ? _builddocumentnumber1() : Container(),
isClicked ? _buildexpirydate1() : Container(),
isClicked ? _buildissuingauthority1() : Container(),
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Item> itemList = [
Item("ID1", "First product"),
Item("ID2", "Second product"),
];
Map<String, int> quantities = {};
void takeNumber(String text, String itemId) {
try {
int number = int.parse(text);
quantities[itemId] = number;
print(quantities);
} on FormatException {}
}
Widget singleItemList(int index) {
Item item = itemList[index];
return Container(
decoration: BoxDecoration(
color: Colors.white,
),
child: Row(
children: [
Expanded(flex: 1, child: Text("${index + 1}")),
Expanded(
flex: 3,
child: TextField(
keyboardType: TextInputType.number,
onChanged: (text) {
takeNumber(text, item.id);
},
decoration: InputDecoration(
labelText: "Qty",
),
),
),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Demo")),
body: Center(
child: ListView.builder(
shrinkWrap: true,
itemCount: itemList.length,
itemBuilder: (context, index) {
if (itemList.isEmpty) {
return CircularProgressIndicator();
} else {
return singleItemList(index);
}
}),
),
);
}
}
class Item {
final String id;
final String name;
Item(this.id, this.name);
}