首页 > 解决方案 > 为什么我的底部导航栏在推送时变为空白?

问题描述

当我在删除发生 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,
      ),
    ),
    ),
   );
  } 

  }

任何帮助表示赞赏!

标签: flutterroutingwidgetnavigatorscaffold

解决方案


将导航更改为以下代码:

Navigator.of(context).popUntil((route) => route.isFirst);


推荐阅读