тройной оператор флаттера работает не так, как ожидалось

#flutter #dart #flutter-layout #flutter-dependencies

Вопрос:

ОБНОВЛЕНИЕ : Я работал с эмулятором и обнаружил, что результат отображается, во второй раз я открываю вкладку, но в первый раз она пуста.

Я пытаюсь запустить определенную функцию с помощью тернарного оператора в панели вкладок, однако она отлично работает для «Домашней птицы» и не работает нормально для двух других условий, может кто-нибудь, пожалуйста, помогите мне с тем, что я здесь делаю неправильно?

Я застрял здесь на довольно долгое время. Я использую троичный оператор для проверки трех уровней, может ли это быть проблемой? Я попытался использовать if-else, но это не принимает leadSubType в качестве значения, которое уже объявлено в классе.

 TabBarView(
          children: [
            Container(
              child: FutureBuilder(
                future: getLeadPersonalDetails(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  late var leadData =
                      (snapshot.data as List<LeadModel>).toList();
                  switch (snapshot.connectionState) {
                    case ConnectionState.none:
                      return new Text('Loading...');
                    case ConnectionState.waiting:
                      return new Center(
                        child: Text("Loading Data.."),
                      );
                    default:
                      if (snapshot.hasError) {
                        return Text("Error : ${snapshot.error}");
                      } else {
                        return ListView.builder(
                            itemCount: leadData.length,
                            itemBuilder: (context, i) {
                              leadSubType = leadData[i].leadsubtype;
                              print("lead sub type: $leadSubType");
                              return Container(
                                child: Column(
                                  children: [
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Name",
                                      dataValue: leadData[i].name,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Mobile No.",
                                      dataValue: leadData[i].moblieno,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Whatsapp No.",
                                      dataValue: leadData[i].whatsappno,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Address",
                                      dataValue: leadData[i].address,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Village",
                                      dataValue: leadData[i].village,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "City",
                                      dataValue: leadData[i].city,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Tehsil",
                                      dataValue: leadData[i].tehsil,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "PinCode",
                                      dataValue: leadData[i].pincode,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Distance",
                                      dataValue: leadData[i].distance,
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Lead Source",
                                      dataValue:
                                          leadData[i].leadsource.toString(),
                                    ),
                                    PersonalDetailsCard(
                                      leadData: leadData,
                                      dataTextValue: "Lead Status",
                                      dataValue:
                                          leadData[i].leadStatus.toString(),
                                    ),
                                  ],
                                ),
                              );
                            });
                      }
                  }
                },
              ),
            ),
            Container(
              child: leadSubType == "Dealer"
                  ? FutureBuilder(
                      future: getDealerDetails(),
                      builder: (BuildContext context, AsyncSnapshot snapshot) {
                        late var dealerBusinessData =
                            (snapshot.data as List<DealerModel>).toList();
                        switch (snapshot.connectionState) {
                          case ConnectionState.none:
                            return new Text('Loading...');
                          case ConnectionState.waiting:
                            return new Center(
                              child: Text("Loading Data.."),
                            );
                          default:
                            if (snapshot.hasError) {
                              return Text("Error : ${snapshot.error}");
                            } else {
                              return ListView.builder(
                                  itemCount: dealerBusinessData.length,
                                  itemBuilder: (context, i) {
                                    return Container(
                                      child: Column(
                                        children: [
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .shopName,
                                              dataTextValue: "Shop Name "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .monthlySaleApprox,
                                              dataTextValue:
                                                  "Monthly Sales Approx "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .requirmentsFeeds,
                                              dataTextValue:
                                                  "Feed Requirement "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .quantity,
                                              dataTextValue: "Quantity "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .currentFeedsSaleCompany,
                                              dataTextValue:
                                                  "Current Feed Company "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .whyThisCompany,
                                              dataTextValue:
                                                  "Why This Company "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .whyNotSkylark,
                                              dataTextValue:
                                                  "Why Not Skylark "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .enquiryFor,
                                              dataTextValue: "Enquiry For "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .todayDiscussionFor,
                                              dataTextValue:
                                                  "Last Meeting Discussion For "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .otherCompanySalesmanName,
                                              dataTextValue:
                                                  "Other Comp. Salesman "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .mobileNo,
                                              dataTextValue: "Sales Man No. "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .knowAboutSkylark,
                                              dataTextValue:
                                                  "Knows About Skylark? "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .facebookPageLike,
                                              dataTextValue:
                                                  "Facebook Page Like? "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue: dealerBusinessData[i]
                                                  .knowCutomerCareNo,
                                              dataTextValue:
                                                  "Knows Cust. Care No.? "),
                                          DealerBusinessDetailsCard(
                                              dealerBusinessData:
                                                  dealerBusinessData,
                                              dataValue:
                                                  dealerBusinessData[i].remarks,
                                              dataTextValue: "Remarks "),
                                        ],
                                      ),
                                    );
                                  });
                            }
                        }
                      },
                    )
                  : leadSubType == "Dairy"
                      ? FutureBuilder(
                          future: getDairyFarmDetails(),
                          builder:
                              (BuildContext context, AsyncSnapshot snapshot) {
                            print(
                                "Business details lead sub type: $leadSubType ");
                            late var dairyBusinessData =
                                (snapshot.data as List<DairyFarmerModel>)
                                    .toList();
                            switch (snapshot.connectionState) {
                              case ConnectionState.none:
                                return new Text('Loading...');
                              case ConnectionState.waiting:
                                return new Center(
                                  child: Text("Loading Data.."),
                                );
                              default:
                                if (snapshot.hasError) {
                                  return Text("Error : ${snapshot.error}");
                                } else {
                                  return ListView.builder(
                                      itemCount: dairyBusinessData.length,
                                      itemBuilder: (context, i) {
                                        return Container(
                                          child: Column(
                                            children: [
                                              DairyBusinessDetailsCard(
                                                  dairyBusinessData:
                                                      dairyBusinessData,
                                                  dataValue:
                                                      dairyBusinessData[i]
                                                          .dairyName,
                                                  dataTextValue: "Dairy Name "),
                                            ],
                                          ),
                                        );
                                      });
                                }
                            }
                          },
                        )
                      : FutureBuilder(
                          future: getPoultryFarmDetails(),
                          builder:
                              (BuildContext context, AsyncSnapshot snapshot) {
                            late var poultryBusinessData =
                                (snapshot.data as List<FarmerPoultry>).toList();
                            switch (snapshot.connectionState) {
                              case ConnectionState.none:
                                return new Text('Loading...');
                              case ConnectionState.waiting:
                                return new Center(
                                  child: Text("Loading Data.."),
                                );
                              default:
                                if (snapshot.hasError) {
                                  return Text("Error : ${snapshot.error}");
                                } else {
                                  return ListView.builder(
                                      itemCount: poultryBusinessData.length,
                                      itemBuilder: (context, i) {
                                        return Container(
                                          child: Column(
                                            children: [
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .farmName,
                                                  dataTextValue: "Farm Name "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .farmManager,
                                                  dataTextValue:
                                                      "Manager Name "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .mobile,
                                                  dataTextValue:
                                                      "Manager Mobile No. "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .chickCompany,
                                                  dataTextValue:
                                                      "Current Chick Comp. "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .whyThisChickCompany,
                                                  dataTextValue:
                                                      "Why this Chick Comp.? "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .flockSize,
                                                  dataTextValue: "Flock Size "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .flockCapacity,
                                                  dataTextValue:
                                                      "Flock Capacity "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .flockStartingDate
                                                          .toString()
                                                          .substring(0, 10),
                                                  dataTextValue:
                                                      "Flock Starting Date "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .feedCompany,
                                                  dataTextValue:
                                                      "Feed Company "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .whyThisFeedCompany,
                                                  dataTextValue:
                                                      "Why This Feed Comp.? "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .WhyNotSkylark,
                                                  dataTextValue:
                                                      "Why Not Skylark? "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue: poultryBusinessData[
                                                          i]
                                                      .OtherCompanySalesmanName,
                                                  dataTextValue:
                                                      "Other Comp. Salesman "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .mobileNo,
                                                  dataTextValue:
                                                      "Other Salesman Mobile "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .knowAboutSkylark,
                                                  dataTextValue:
                                                      "Know About Skylark? "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .facebookPageLike,
                                                  dataTextValue:
                                                      "Facebook Page Like? "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .KnowCutomerCareNo,
                                                  dataTextValue:
                                                      "Knows Customer Care no? "),
                                              PoultryBusinessDetailsCard(
                                                  poultryBusinessData:
                                                      poultryBusinessData,
                                                  dataValue:
                                                      poultryBusinessData[i]
                                                          .remarks,
                                                  dataTextValue: "Remarks "),
                                            ],
                                          ),
                                        );
                                      });
                                }
                            }
                          },
                        ),
            ),
            Container(),
            Container(),
            Container(),
          ],
        ),
 

Комментарии:

1. Здесь очень много кода. Пожалуйста, постарайтесь свести свой пример к минимуму, чтобы сузить круг проблем и чтобы читатели могли легко понять, о чем вы говорите. Процесс удаления кода, не имеющего отношения к вашей проблеме, также может помочь вам разобраться в ней самостоятельно.

2. Я считаю, что проблема связана с режимом вкладки, который я использую, поэтому я вставил весь код, который использовал.

Ответ №1:

Я работал с трехсторонним троичным оператором, и это сработало для меня. В вашем коде, где у вас есть:

 ... ? FutureBuilder(...) : FutureBuilder(...) : FutureBuilder(...);
 

Попробуйте изменить заключительную часть на вложенный тернарный оператор.

Ниже я добавил пример того, как я решил свою проблему:

 Center(
  child: Icon(
    widget.icon,
      color: widget.icon == Icons.call_made_outlined
           ? sendColor
           : (widget.icon == Icons.call_missed_outlined
               ? red[500]
               : primaryColor),
  ),
),
 

В моей ситуации я пытался вернуть (или отобразить) красный цвет значка для пропущенного вызова, синий воротник для выполненного вызова и зеленый цвет для ответа на вызов. Вы можете видеть, что вторая часть первой троицы содержит новую троицу сама по себе…

Попробуйте вложенный троичный подход.