基于飞镖中的三元条件显示多个屏幕

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");
                },
              )