#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),
),
),
В моей ситуации я пытался вернуть (или отобразить) красный цвет значка для пропущенного вызова, синий воротник для выполненного вызова и зеленый цвет для ответа на вызов. Вы можете видеть, что вторая часть первой троицы содержит новую троицу сама по себе…
Попробуйте вложенный троичный подход.