如何使用FutureBuilder在动态样式中创建动态表单

时间:2019-01-22 08:20:28

标签: flutter flutter-layout

我想创建动态表单并在提交表单后获取数据。我有一个API,并且对此API提出了疑问。在应用程序中,用户将回答问题并将结果保存到API。如何创建动态表单并检索用户输入。请帮忙。

FutureBuilder<List<ConditionType>>(
        future: _api.getConditionTypes(job.sectorId),
        builder: (context, snapshot) {
//Create Form
}

2 个答案:

答案 0 :(得分:0)

尝试使用json_to_form,如果您可以共享响应的结构,则可以帮助我调整自己项目所需的插件。我应该提到的是,通过此实现,尽管DropDownButton可以保存值,但在显示值时往往会出现问题。

答案 1 :(得分:0)

我将Json变换制作对象的模型,然后发出请求:

class Model {
  String projectName;
  String datePlan;
  String activityName;
  String hours;

  TimeSheetModel({this.projectName, this.datePlan, this.activityName, this.hours});

  TimeSheetModel.fromJson(Map<String, dynamic> json){
    projectName = json["ProjectName"];
    datePlan = json["DatePlan"];
    activityName = json["ActivityName"];
    hours = json["Hours"];
  }

  Map toMap() {
    var map = new Map<String, dynamic>();
    map["ProjectName"] = projectName;
    map["DatePlan"] = datePlan;
    map["ActivityName"] = activityName;
    map["Hours"] = hours;
    return map;
  }

}

fromJson方法将Json数据转换为GET请求的对象,然后toMap将您的对象转换为POST或PUT请求的Json。

发出GET请求:


  getProjects() async {
    var url = 'url';
    var res = await http
        .get(Uri.encodeFull(url), headers: {"Accept": "application/json", 
        "charset": "UTF-8"});
    data = json.decode(res.body);
    setState(() {
      Model data = Model.fromJson(resBody);
    });
  }

发出POST请求:

  post() async {
    var url = 'url';
    http.post(url, body:
    data.toMap()).then((response) {
      print("Response status: ${response.statusCode}");
      print("Response body: ${response.body}");
    });
  }