Toujo
Toujo

Reputation: 335

How to display JSON nested ArrayList item in flutter?

I can successfully display PartnerName, PartnerAddress which are in PartnerData[]. Now inside PartnerData there is another ArrayList DayList[] how can I print those arrayList data DayName,TimeFrom etc etc??

{
    "Status": "1",
    "Message": "",
    "Data": {
        "EncDietId": "pEl2B9kuumKRxIxLJO76eQ==",
        "DietName": "dietcian2",
        "Email": null,
        "Phone": null,
        "AlternatePhone": null,
        "Image": "http://myapi/Doctor/65AUCUE8RTD2UKBRV.jpg",
        "Description": null,
        "Fee": null,
        "DiscountedFee": null,
        "BookingFee": null,
        "VisitDay": null,
        "TimeFrom": null,
        "TimeTo": null
    },
    "PartnerData": [
        {
            "PartnerId": "13",
            "EncPartnerId": "65gtodyhbtdInTsJWr1ZkA==",
            "PartnerName": "Rasomoy pvt. Hospital",
            "PartnerAddress": "Kol,Kol,Kol,Wb",
            "Fee": "1200",
            "DiscountedFee": "900",
            "BookingFee": "500",
            "DayList": [
                {
                    "DayName": "Wednesday",
                    "TimeFrom": "10:00",
                    "TimeTo": "16:00"
                },
                {
                    "DayName": "Friday",
                    "TimeFrom": "10:00",
                    "TimeTo": "16:00"
                },
                {
                    "DayName": "Saturday",
                    "TimeFrom": "10:00",
                    "TimeTo": "16:00"
                }
            ]
        }
     ]
    }

My Api

 Future<List<PartnerDatum>> dietcianDetailsApi() async {
var jsonResponse;

  var response = await http.post(
      Uri.parse("http://ggmyapin/api/api/Diet"),
      body: ({
        'EncId': encDietcianIdRef,
      }));
  if (response.statusCode == 200) {
    print("Correct");
    print(response.body);
    jsonResponse = json.decode(response.body.toString());
    print(jsonResponse);
      DietDetailsModel dataModel = dietDetailsModelFromJson(response.body);
    print(dataModel.partnerData.length);
    for (final item in dataModel.partnerData) 
    print(item.partnerName);

    List<PartnerDatum> arrData =dataModel.partnerData;
    return arrData;

  } else {
    print("Wrong Url");
    print(response.body);
    throw Exception("Faild to fetch");
  }

}

Displying in ListView. For now Successfully can display data PartnerName which are in PartnerData[] . I'm trying to display DayList[] data too. What will be the syntax for this?

  Container(
                  height: blockSizeVertical*30,//38
                  child: FutureBuilder(
                    future: dietcianDetailsApi(),
                    builder: (BuildContext context, AsyncSnapshot snapshot) {
                      // if (snapshot.connectionState !=ConnectionState.done) {
                      //   return CircularProgressIndicator();
                      // }
                      if (snapshot.hasError) {
                        return Text("Somthing went wrong");
                      }

                      if (snapshot.hasData) {
                        return ListView.builder(
                             scrollDirection: Axis.horizontal,
                              physics: BouncingScrollPhysics(),
                            shrinkWrap: true,
                            itemCount: snapshot.data.length,
                            itemBuilder: (BuildContext context, int index) =>
                              Container(
                                decoration: BoxDecoration(
                                color: Colors.white,
                                borderRadius: BorderRadius.circular(10),
                              ),
                              width: blockSizeHorizontal*80,
                              margin: EdgeInsets.all(10),




                              child: Stack(children: [
                    Column(
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [




                        SizedBox(height: blockSizeVertical*0.5),



                          Text(
                            'PartnerName :  ${snapshot.data[index].partnerName}',
                            style: TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: blockSizeHorizontal*3.5,
                              fontFamily: 'Poppins',
                              color: Theme.of(context).primaryColor,
                            ),
                            textAlign: TextAlign.center,
                          ),

Model Class

    // To parse this JSON data, do
//
//     final dietDetailsModel = dietDetailsModelFromJson(jsonString);

import 'package:meta/meta.dart';
import 'dart:convert';

DietDetailsModel dietDetailsModelFromJson(String str) => DietDetailsModel.fromJson(json.decode(str));

String dietDetailsModelToJson(DietDetailsModel data) => json.encode(data.toJson());

class DietDetailsModel {
    DietDetailsModel({
        required this.status,
        required this.message,
        required this.data,
        required this.partnerData,
    });

    String status;
    String message;
    Data data;
    List<PartnerDatum> partnerData;

    factory DietDetailsModel.fromJson(Map<String, dynamic> json) => DietDetailsModel(
        status: json["Status"],
        message: json["Message"],
        data: Data.fromJson(json["Data"]),
        partnerData: List<PartnerDatum>.from(json["PartnerData"].map((x) => PartnerDatum.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "Status": status,
        "Message": message,
        "Data": data.toJson(),
        "PartnerData": List<dynamic>.from(partnerData.map((x) => x.toJson())),
    };
}

class Data {
    Data({
        required this.encDietId,
        required this.dietName,
        required this.email,
        required this.phone,
        required this.alternatePhone,
        required this.image,
        required this.description,
        required this.fee,
        required this.discountedFee,
        required this.bookingFee,
        required this.visitDay,
        required this.timeFrom,
        required this.timeTo,
    });

    String encDietId;
    String dietName;
    dynamic email;
    dynamic phone;
    dynamic alternatePhone;
    String image;
    dynamic description;
    dynamic fee;
    dynamic discountedFee;
    dynamic bookingFee;
    dynamic visitDay;
    dynamic timeFrom;
    dynamic timeTo;

    factory Data.fromJson(Map<String, dynamic> json) => Data(
        encDietId: json["EncDietId"],
        dietName: json["DietName"],
        email: json["Email"],
        phone: json["Phone"],
        alternatePhone: json["AlternatePhone"],
        image: json["Image"],
        description: json["Description"],
        fee: json["Fee"],
        discountedFee: json["DiscountedFee"],
        bookingFee: json["BookingFee"],
        visitDay: json["VisitDay"],
        timeFrom: json["TimeFrom"],
        timeTo: json["TimeTo"],
    );

    Map<String, dynamic> toJson() => {
        "EncDietId": encDietId,
        "DietName": dietName,
        "Email": email,
        "Phone": phone,
        "AlternatePhone": alternatePhone,
        "Image": image,
        "Description": description,
        "Fee": fee,
        "DiscountedFee": discountedFee,
        "BookingFee": bookingFee,
        "VisitDay": visitDay,
        "TimeFrom": timeFrom,
        "TimeTo": timeTo,
    };
}

class PartnerDatum {
    PartnerDatum({
        required this.partnerId,
        required this.encPartnerId,
        required this.partnerName,
        required this.partnerAddress,
        required this.fee,
        required this.discountedFee,
        required this.bookingFee,
        required this.dayList,
    });

    String partnerId;
    String encPartnerId;
    String partnerName;
    String partnerAddress;
    String fee;
    String discountedFee;
    String bookingFee;
    List<DayList> dayList;

    factory PartnerDatum.fromJson(Map<String, dynamic> json) => PartnerDatum(
        partnerId: json["PartnerId"],
        encPartnerId: json["EncPartnerId"],
        partnerName: json["PartnerName"],
        partnerAddress: json["PartnerAddress"],
        fee: json["Fee"],
        discountedFee: json["DiscountedFee"],
        bookingFee: json["BookingFee"],
        dayList: List<DayList>.from(json["DayList"].map((x) => DayList.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "PartnerId": partnerId,
        "EncPartnerId": encPartnerId,
        "PartnerName": partnerName,
        "PartnerAddress": partnerAddress,
        "Fee": fee,
        "DiscountedFee": discountedFee,
        "BookingFee": bookingFee,
        "DayList": List<dynamic>.from(dayList.map((x) => x.toJson())),
    };
}

class DayList {
    DayList({
        required this.dayName,
        required this.timeFrom,
        required this.timeTo,
    });

    String dayName;
    String timeFrom;
    String timeTo;

    factory DayList.fromJson(Map<String, dynamic> json) => DayList(
        dayName: json["DayName"],
        timeFrom: json["TimeFrom"],
        timeTo: json["TimeTo"],
    );

    Map<String, dynamic> toJson() => {
        "DayName": dayName,
        "TimeFrom": timeFrom,
        "TimeTo": timeTo,

    };
    }

Upvotes: 0

Views: 273

Answers (1)

Ravindra S. Patil
Ravindra S. Patil

Reputation: 14785

try below code hope its helpful to you

You can use string indexes to access these properties:

print(result['PartnerData'][0]['PartnerName']);        // Rasomoy pvt. Hospital
print(result['PartnerData'][0]['PartnerAddress']);   // Kol,Kol,Kol,Wb

Now go to Flutter documentation here:

The documentation also refers to the such model classes here :

Upvotes: 2

Related Questions