json_to_form
json_to_form copied to clipboard
Issue while getting the data from elastic search and bind it to dropdown.Please help!
I am trying to get the data from elasticsearch and I am trying to bind the same to the dynamic dropdown but I am facing issues. The widgets and data from for loop is not rendering as desired. Can you please help me with this ?
import 'dart:convert'; import 'package:flutter/material.dart'; import './JsonLib/json_schema.dart'; import './ElasticHttpLib/console_http_transport.dart';
class AllFields extends StatefulWidget { AllFields({Key key}) : super(key: key); // This widget is the home page of your application. It is stateful, meaning // that it has a State object (defined below) that contains fields that affect // how it looks.
// This class is the configuration for the state. It holds the values (in this // case the title) provided by the parent (in this case the App widget) and // used by the build method of the State. Fields in a Widget subclass are // always marked "final".
@override _AllFields createState() => new _AllFields(); }
class _AllFields extends State<AllFields> { List data; static List runtime; String form;
Future
// bucket aggregation
final rs3 = await client.search(
'_module', '_doc', null,
aggregations: {
'dropdown': {
'terms': {'field': 'reasonForReporting', 'size': 10}
}
}).then((response) {
setState(() {
var res = response.aggregations['dropdown'].buckets.toList();
data = res;
runtime = data;
});
}).catchError((e) {
print(e);
});
}
@override void initState() { getResponse(); super.initState(); }
@override void didChangeDependencies() { getResponse();
super.didChangeDependencies();
}
dynamic response;
@override Widget build(BuildContext context) { // This method is rerun every time setState is called, for instance as done // by the _incrementCounter method above. // // The Flutter framework has been optimized to make rerunning build methods // fast, so that you can just rebuild anything that needs updating rather // than having to individually change instances of widgets. if (runtime != null) { form = json.encode({ 'title': 'Test Form Json Schema', 'description': 'My Description', 'autoValidated': true, 'fields': [ { 'key': 'input1', 'type': 'Input', 'label': 'Hi Group', 'placeholder': "Hi Group flutter", 'value': '', 'required': true }, { 'key': 'password1', 'type': 'Password', 'label': 'Password', 'required': true }, { 'key': 'email1', 'type': 'Email', 'label': 'Email test', 'placeholder': "hola a todos" }, { 'key': 'tareatext1', 'type': 'TareaText', 'label': 'TareaText test', 'placeholder': "hola a todos" }, { 'key': 'radiobutton1', 'type': 'RadioButton', 'label': 'Radio Button tests', 'value': 2, 'items': [ { 'label': "product 1", 'value': 1, }, { 'label': "product 2", 'value': 2, }, { 'label': "product 3", 'value': 3, } ] }, { 'key': 'switch1', 'type': 'Switch', 'label': 'Switch test', 'value': false, }, { 'key': 'checkbox1', 'type': 'Checkbox', 'label': 'Checkbox test', 'items': [ { 'label': "product 1", 'value': true, }, { 'label': "product 2", 'value': false, }, { 'label': "product 3", 'value': false, } ] }, { 'key': 'select1', 'type': 'Select', 'label': 'Select value', 'value': 'product 1', 'items': [ { 'label': "product 1", 'value': "product 1", }, { 'label': "product 2", 'value': "product 2", }, { 'label': "product 3", 'value': "product 3", }, { for (int i = 0; i < runtime.length; i++) { 'label': runtime[i].key.toString(), 'value': runtime[i].key.toString(), } } ] }, ] });
return new Scaffold(
appBar: new AppBar(
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
title: new Text("All Fields"),
),
body: new SingleChildScrollView(
child: new Container(
// Center is a layout widget. It takes a single child and positions it
// in the middle of the parent.
child: new Column(children: <Widget>[
new JsonSchema(
form: form,
onChanged: (dynamic response) {
this.response = response;
print(response);
},
actionSave: (data) {
print(data);
},
buttonSave: new Container(
height: 40.0,
color: Colors.blueAccent,
child: Center(
child: Text("Send",
style: TextStyle(
color: Colors.white, fontWeight: FontWeight.bold)),
),
),
),
]),
),
),
);
} else {
return new Scaffold(
appBar: new AppBar(
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
title: new Text("All Fields"),
));
}
} }