Как установить список данных из API для радиокнопок и Dropbox? - PullRequest
0 голосов
/ 12 января 2020

Я новичок, чтобы трепетать. Мне нужно разобрать json, который приведен ниже. Мне нужно установить гендерный список на radiobutton и documentlist на раскрывающийся список . Я получаю данные из API и установить для sharedPreference. Но я получаю только последнее значение индекса, т.е. Другое и Паспорт . Как я могу установить половой список для radiobutton, а список документов для раскрывающегося списка с defaultText «Выберите личность». Я создал pojo из здесь . Я реализовал следующим образом:

Мои данные API:

{
"status": "success",
"message": "Data Fetched",
"data": {
    "genderlist": [
        {
            "id": 1,
            "name": "Male",
            "status": 1
        },
        {
            "id": 2,
            "name": "Female",
            "status": 1
        },
        {
            "id": 3,
            "name": "Other",
            "status": 1
        }
    ],
    "docuemntlist": [
        {
            "id": 1,
            "name": "National Id",
            "status": 1
        },
        {
            "id": 2,
            "name": "Passport",
            "status": 1
        }
    ]
}
}

Я получил API следующим образом:

 Future<JoinDataResponse> getDocs() async {
 var jsonResponse;
 JoinDataResponse joinDataResponse;
 var response = await http.get(
  "URL");
  if (response.statusCode == 200) {
  jsonResponse = json.decode(response.body);

 if (jsonResponse != null) {
  joinDataResponse = new JoinDataResponse.fromJson(jsonResponse);
  return joinDataResponse;
} else {
  return null;
}
} else {
jsonResponse = json.decode(response.body.toString());
joinDataResponse = new JoinDataResponse.fromJson(jsonResponse);
print("forget outside 200");
return joinDataResponse;
}
}

Моя функция getAPi

 void getDocuments() async {
JoinDataResponse response = await getDocs();
if (response != null && response.data != null) {
  SharedPreferences sharedPreferences =
      await SharedPreferences.getInstance();

  List<Genderlist> genderList = response.data.genderlist;
  List<Docuemntlist> docsList = response.data.docuemntlist;

  for (int i = 0; i < genderList.length; i++) {
    int id = genderList[i].id;
    String gender = genderList[i].name;
    sharedPreferences.setString("gender", gender);
    print(gender);
  }

  for (int i = 0; i < docsList.length; i++) {
    String docs = docsList[i].name;
    sharedPreferences.setString("docs", docs);
    print(docs);
  }
  print(sharedPreferences.getString("gender"));
  print(sharedPreferences.getString("docs"));
}
}

1 Ответ

0 голосов
/ 13 января 2020
Map apiData = {},documentValue;
  String genderValue = 'Male';

  @override
  void initState() {
    super.initState();
    getApiData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
            color: Colors.white,
            padding: EdgeInsets.all(15),
            child: ListView(shrinkWrap: true, children: [
              Column(
                mainAxisSize: MainAxisSize.min,
                children: apiData['data']['genderlist']
                    .map<Widget>((g) => ListTile(
                        leading: Radio(
                            groupValue: genderValue,
                            value: g['name'].toString(),
                            onChanged: (newValue) {
                              setState(() {
                                genderValue = newValue;
                              });
                            }),
                        title: Text(g['name'].toString()),
                        onTap: () {
                          setState(() {
                            genderValue = g['name'].toString();
                          });
                        }))
                    .toList(),
              ),
              DropdownButton(
                hint:Text('Select Identity'),
                value:documentValue,
                iconSize: 24,
                elevation: 16,
                onChanged: (newValue) {
                  setState(() {
                    documentValue = newValue;
                  });
                },
                items:
                    apiData['data']['documentlist'].map<DropdownMenuItem<Map>>((m) {
                  return DropdownMenuItem<Map>(
                    value: m,
                    child: Text(m['name'].toString()),
                  );
                }).toList(),
              )
            ])));
  }

  void getApiData() {
//Use your code here to get data from the api/internet...

    apiData = {
      "status": "success",
      "message": "Data Fetched",
      "data": {
        "genderlist": [
          {"id": 1, "name": "Male", "status": 1},
          {"id": 2, "name": "Female", "status": 1},
          {"id": 3, "name": "Other", "status": 1}
        ],
        "documentlist": [
          {"id": 1, "name": "National Id", "status": 1},
          {"id": 2, "name": "Passport", "status": 1}
        ]
      }
    };
  }

Pic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...