为啥我的底部导航栏在推送时变为空白?

Posted

技术标签:

【中文标题】为啥我的底部导航栏在推送时变为空白?【英文标题】:Why is my bottom navigation bar becoming blank upon push?为什么我的底部导航栏在推送时变为空白? 【发布时间】:2020-07-15 03:02:41 【问题描述】:

当我在删除发生 Navigator.push.. 的帖子时调用 loadingDelete 方法时,我被定向到个人资料页面,但底部导航栏为空(在图标(内容)为空白时显示为空)。

当我上传或删除帖子时,我一直遇到这个问题。我尝试用 MaterialApp 替换脚手架,但没有奏效……

这是我的 loadingDelete 方法所在的位置:

 class PostStateless extends StatelessWidget 
 final Post post2;

 PostStateless(this.post2);

  @override
 Widget build(BuildContext context) 
 print("REACHED HERE BEG "+post2.toString());

 return new Scaffold(
  resizeToAvoidBottomInset: false,
  body:PostPage(post2),
 );
 
 

 class PostPage extends StatefulWidget 
 final Post post2;

 PostPage(this.post2);

 @override
 PostPageState createState() => new PostPageState(post2);
 

 class PostPageState extends State<PostPage> with TickerProviderStateMixin 
  ...
  ..
 loadingDelete()
 

  if(!loadingDeletePost)
  return Container(
      decoration: BoxDecoration(
        image: DecorationImage(
          image: AssetImage("lib/assets/BackToEarth.jpg"),
          fit: BoxFit.cover,
        ),
      ),
      child: Center(
        child: Row(
            mainAxisSize: MainAxisSize.min, //centered things bil nos
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              CircularProgressIndicator(
                valueColor: new AlwaysStoppedAnimation<Color>(Colors.black),
              )
            ]),
        /* add child content here */
      ));
     else 
                  Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
                  Profile()), (Route<dynamic> route) => false);
          //Navigator.push alone redirects me to the profile page with blank nav bar plus arrow back  
            visible in my app bar(Worse).
      

       
        ....
       

这是我的个人资料页面结构:

 class Profile extends StatelessWidget 

@override
Widget build(BuildContext context) 


return Scaffold(
  body: ProfilePage(),
);



class ProfilePage extends StatefulWidget 
@override
_ProfilePageState createState() => new _ProfilePageState();
 

 class _ProfilePageState extends State<ProfilePage> 

 ...
 ...
 

这是我的全局底部导航栏的结构,它位于 MaterialApp Widget 下的 mainn dart 文件中:

 void main() => runApp(MyApp());

class MyApp extends StatelessWidget 
@override
Widget build(BuildContext context) 
return MaterialApp(

  debugShowCheckedModeBanner: false,
  title: 'Instagram',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: MyHomePage(),

 );
 
  


 class MyHomePage extends StatefulWidget 
 @override
_MyHomePageState createState() => _MyHomePageState();
 
 ManageUserModel user;
class _MyHomePageState extends State<MyHomePage> 

ApiService apiService = ApiService();
List<Widget> pages = [
HomePage(),
SearchPage(),
Post(),
NotificationsPage(),
ProfilePage()
];

 saveVariable(ManageUserModel user) async 
 // save variable
  SharedPreferences sharedUser = await SharedPreferences.getInstance();
String userSt=toJson(user);
print("USERST: "+userSt);
sharedUser.setString('user', userSt);


@override
void initState() 
apiService.getUsers("beeso").then((result) 
  setState(() 
    user = result;
    print("USERRRR" +user.toString());
    saveVariable(user);
  );
);
super.initState();
 

 @override
 Widget build(BuildContext context) 
return DefaultTabController(
  length: 5,
  initialIndex: 0,
  child: Scaffold(
    body: TabBarView(
      children: pages,
    ),
    bottomNavigationBar:

    Container(

      margin: EdgeInsets.only(bottom: 20),
      child: new TabBar(
        tabs: [
          Tab(
            icon: Icon(Icons.home),
          ),
          Tab(
            icon: Icon(Icons.search),
          ),
          Tab(
            icon: Icon(Icons.add),
          ),
          Tab(
            icon: Icon(Icons.favorite),
          ),
          Tab(
            icon: Icon(Icons.perm_identity),
          ),
        ],
        unselectedLabelColor: Colors.black,
        labelColor: Colors.blue,
        indicatorColor: Colors.transparent,
      ),
    ),
    ),
   );
   

  

感谢任何帮助!

【问题讨论】:

【参考方案1】:

将导航改为如下代码:

Navigator.of(context).popUntil((route) =&gt; route.isFirst);

【讨论】:

但是我不想导航到 main.dart,我想查看最初显示底部导航栏的个人资料页面。我编辑了我的问题以澄清代表的 pages 变量TabViewBar 的子项。 @Texv 我在您的个人资料页面中看不到任何底部导航栏的代码。我能看到的只是一个脚手架。您的主页是底部导航栏所在的位置,然后将个人资料页面作为小部件查看。 即使当我导航到底部导航所在的 HomePage() 时它也不起作用。它消失了。我编辑了我的主类,使其完全清晰。 @Texv @DCodes 会将导航弹回第一个索引工作吗? Navigator.of(context).popUntil((route) => route.isFirst); 它工作了@Texv!我在其他地方也面临这个问题,我从 main->PostPage1->PostPage2->Profile 移动。当我想从 postPage2 导航到配置文件时,这个问题也出现了,与此有点不同。您建议一种方法吗?

以上是关于为啥我的底部导航栏在推送时变为空白?的主要内容,如果未能解决你的问题,请参考以下文章

Android 底部导航栏在 webview 中登录后显示

底部应用栏在使用片段导航时向上/向下滑动(导航架构组件)

为啥我的导航栏“位置:固定”显示在网页底部而不是移动设备的视口底部?

为啥我的导航控件包括两个栏,一个在顶部,一个在底部?

Flutter - 创建底部导航栏

Xamarin.Forms Android 底部导航栏