基于飞镖中的三元条件显示多个屏幕
Displaying multiple screens based on ternary condition in dart
我有一个场景,我在页面加载时显示一个微调器,当它正在加载时,它会在数据库中获取一些数据并根据数据可用性将 bool 值设置为 true 或 false。
然后我想根据布尔结果共享屏幕 A 或 B。
我在我的代码中完成了以下操作,但应用程序一直显示微调器。知道我可能做错了什么吗?
return _isLoading?
Center(child:Loading(),):
_isPersonalInfoSubmitted?ScreenA():ScreenB();
第二次尝试(使用 Future Builder)
如果登录用户是管理员,我想显示类别。否则,对于其他用户,我想从数据库中获取用户的地址。如果地址为空,则显示个人详细信息屏幕,否则显示类别。
return FutureBuilder (
future: userId=='ADMIN_ID'?
Provider.of<Categories>(context,listen:false).fetchAndReturnCategories():
Provider.of<Addresses>(context,listen: false).fetchAndReturnAddress(userId)!=null?
Provider.of<Categories>(context,listen:false).fetchAndReturnCategories():null,
builder: (context, snap) {
inspect(snap);
if (snap.hasData) {
var categoriesData = Provider.of<Categories>(context);
return snap.hasData?
Scaffold(...) : PersonalDetails();
这里发生的是,即使用户 ID 不是管理员 ID,方法 fetchAndReturnCategories
也会被执行。我的设置是否正确?
我认为您错过了重建小部件的 setState
var bool _isLoading = true;
return _isLoading?
Center(child:Loading(),):
_isPersonalInfoSubmitted?ScreenA():ScreenB();
void _apiCall() {
// After Success of API Call
setState((){
_isLoading = false;
})
}
更喜欢使用 FutureBuilder
FutureBuilder<SomeClass>(
future: fetchdatFuture,
builder: (ctx, snap) {
if (snap.hasData) {
return snap.data?ScreenA():ScreenB();
} else if (snap.connectionState == ConnectionState.waiting)
{
return Center(child:Loading());
}
return Text("Error");
},
)
我有一个场景,我在页面加载时显示一个微调器,当它正在加载时,它会在数据库中获取一些数据并根据数据可用性将 bool 值设置为 true 或 false。
然后我想根据布尔结果共享屏幕 A 或 B。
我在我的代码中完成了以下操作,但应用程序一直显示微调器。知道我可能做错了什么吗?
return _isLoading?
Center(child:Loading(),):
_isPersonalInfoSubmitted?ScreenA():ScreenB();
第二次尝试(使用 Future Builder) 如果登录用户是管理员,我想显示类别。否则,对于其他用户,我想从数据库中获取用户的地址。如果地址为空,则显示个人详细信息屏幕,否则显示类别。
return FutureBuilder (
future: userId=='ADMIN_ID'?
Provider.of<Categories>(context,listen:false).fetchAndReturnCategories():
Provider.of<Addresses>(context,listen: false).fetchAndReturnAddress(userId)!=null?
Provider.of<Categories>(context,listen:false).fetchAndReturnCategories():null,
builder: (context, snap) {
inspect(snap);
if (snap.hasData) {
var categoriesData = Provider.of<Categories>(context);
return snap.hasData?
Scaffold(...) : PersonalDetails();
这里发生的是,即使用户 ID 不是管理员 ID,方法 fetchAndReturnCategories
也会被执行。我的设置是否正确?
我认为您错过了重建小部件的 setState
var bool _isLoading = true;
return _isLoading?
Center(child:Loading(),):
_isPersonalInfoSubmitted?ScreenA():ScreenB();
void _apiCall() {
// After Success of API Call
setState((){
_isLoading = false;
})
}
更喜欢使用 FutureBuilder
FutureBuilder<SomeClass>(
future: fetchdatFuture,
builder: (ctx, snap) {
if (snap.hasData) {
return snap.data?ScreenA():ScreenB();
} else if (snap.connectionState == ConnectionState.waiting)
{
return Center(child:Loading());
}
return Text("Error");
},
)