import
'package:flutter/material.dart'
;
void
main() => runApp(
new
MyApp());
class
MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class
_MyAppState extends State<MyApp> {
List<DynamicWidget> listDynamic = [];
List<String> data = [];
Icon floatingIcon =
new
Icon(Icons.add);
addDynamic() {
if
(data.length != 0) {
floatingIcon =
new
Icon(Icons.add);
data = [];
listDynamic = [];
}
if
(listDynamic.length >= 5) {
return
;
}
listDynamic.add(
new
DynamicWidget());
setState(() {});
}
submitData() {
floatingIcon =
new
Icon(Icons.arrow_back);
data = [];
listDynamic.forEach((widget) => data.add(widget.controller.text));
setState(() {});
print(data.length);
}
@override
Widget build(BuildContext context) {
Widget result =
new
Flexible(
flex: 1,
child:
new
Card(
child: ListView.builder(
itemCount: data.length,
itemBuilder: (_, index) {
return
new
Padding(
padding:
new
EdgeInsets.all(10.0),
child:
new
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new
Container(
margin:
new
EdgeInsets.only(left: 10.0),
child:
new
Text(
"${index + 1} : ${data[index]}"
),
),
new
Divider()
],
),
);
},
),
));
Widget dynamicTextField =
new
Flexible(
flex: 2,
child:
new
ListView.builder(
itemCount: listDynamic.length,
itemBuilder: (_, index) => listDynamic[index],
),
);
Widget submitButton =
new
Container(
child:
new
RaisedButton(
onPressed: submitData,
child:
new
Padding(
padding:
new
EdgeInsets.all(16.0),
child:
new
Text(
'Submit Data'
),
),
),
);
return
new
MaterialApp(
home:
new
Scaffold(
appBar:
new
AppBar(
title:
new
Text(
'Dynamic App'
),
),
body:
new
Container(
margin:
new
EdgeInsets.all(10.0),
child:
new
Column(
children: <Widget>[
data.length == 0 ? dynamicTextField : result,
data.length == 0 ? submitButton :
new
Container(),
],
),
),
floatingActionButton:
new
FloatingActionButton(
onPressed: addDynamic,
child: floatingIcon,
),
),
);
}
}
class
DynamicWidget extends StatelessWidget {
TextEditingController controller =
new
TextEditingController();
@override
Widget build(BuildContext context){
return
Container(
margin:
new
EdgeInsets.all(8.0),
child:
new
TextField(
controller: controller,
decoration:
new
InputDecoration(hintText:
'Enter Data '
),
),
);
}
}