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