颤动删除appbar上的返回按钮

我想知道,如果有人知道一种方法来删除在颤扑应用程序中,当你使用Navigator.pushNamed转到另一个页面时,出现在appBar上的返回按钮。我不希望它出现在这个结果页面上的原因是它来自导航,我希望用户使用logout按钮,以便会话重新开始。

204920 次浏览

你可以通过将一个空的new Container()作为leading参数传递给你的AppBar来移除返回按钮。

如果你发现自己这样做了,你可能不希望用户能够按下设备的后退按钮回到之前的路线。不要调用pushNamed,而是尝试调用Navigator.pushReplacementNamed来导致之前的路由消失。

pushReplacementNamed函数将删除后堆栈中先前的路由,并将其替换为新路由。

后者的完整代码示例如下。

import 'package:flutter/material.dart';


class LogoutPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Logout Page"),
),
body: new Center(
child: new Text('You have been logged out'),
),
);
}


}
class MyHomePage extends StatelessWidget {


@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Remove Back Button"),
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.fullscreen_exit),
onPressed: () {
Navigator.pushReplacementNamed(context, "/logout");
},
),
);
}
}


void main() {
runApp(new MyApp());
}


class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
routes: {
"/logout": (_) => new LogoutPage(),
},
);
}
}

在应用程序栏中删除后退按钮的一个简单方法是将automaticallyImplyLeading设置为false

appBar: AppBar(
title: Text("App Bar without Back Button"),
automaticallyImplyLeading: false,
),

我认为解决办法如下

你实际上可以:

  • 不想显示难看的后退按钮(:]),因此执行: 李AppBar(...,automaticallyImplyLeading: false,...); < / p > < / >

  • 不希望用户返回- 替换当前视图 -从而执行: 李Navigator.pushReplacementNamed(## your routename here ##); < / p > < / >

  • 不希望用户返回- 在堆栈中替换某个视图 -从而使用: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool); 其中f是一个函数,当遇到你想保留在堆栈中的最后一个视图时返回__abc0(就在新视图之前);

  • 不希望用户返回- -完全清空导航器堆栈: 李Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false); < / p > < / >

干杯

  appBar: new AppBar(title: new Text("SmartDocs SPAY"),backgroundColor: Colors.blueAccent, automaticallyImplyLeading:false,
leading: new Container(),
),

工作正常

automaticallyImplyLeading:

这将检查我们是否想要在应用程序栏上应用back小部件(领先小部件)。 如果automcallyimplyleading为false,则自动给标题空格,如果如果leading小部件为true,则此参数无效
void main() {
runApp(
new MaterialApp(
home: new Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false, // Used for removing back buttoon.
title: new Center(
child: new Text("Demo App"),
),
),
body: new Container(
child: new Center(
child: Text("Hello world!"),
),
),
),
),
);
}

AppBar小部件有一个名为automaticallyImplyLeading的属性。默认值是true。如果你不想让flutter自动为你构建返回按钮,那么只需将属性false

appBar: AppBar(
title: Text("YOUR_APPBAR_TITLE"),
automaticallyImplyLeading: false,
),

添加自定义后退按钮

appBar: AppBar(
title: Text("YOUR_APPBAR_TITLE"),
automaticallyImplyLeading: false,
leading: YOUR_CUSTOM_WIDGET(),
),

//如果你想隐藏后退按钮使用下面的代码

class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Remove Back Button'),
    

//hide back button
automaticallyImplyLeading: false,
),
body: Center(
child: Container(),
),
);
}
}

//如果你想隐藏后退按钮并停止弹出动作,使用下面的代码

class SecondScreen extends StatelessWidget {


@override
Widget build(BuildContext context) {
return new WillPopScope(


onWillPop: () async => false,
child: Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
//For hide back button
automaticallyImplyLeading: false,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('Back'),
onPressed: () {
Navigator.pop(context);
},
),
],
)
),
),
);
}


[ < / > < / p >

如果导航到另一个页面。可以使用Navigator.pushReplacement()。如果你从登录导航到主屏幕,它可以被使用。或者你可以使用。
AppBar(automaticallyImplyLeading: false) < / p >

使用这个条子AppBar

SliverAppBar (
automaticallyImplyLeading: false,
elevation: 0,
brightness: Brightness.light,
backgroundColor: Colors.white,
pinned: true,
),

使用这个正常的Appbar

 appBar: AppBar(
title: Text
("You decide on the appbar name"
style: TextStyle(color: Colors.black,),
elevation: 0,
brightness: Brightness.light,
backgroundColor: Colors.white,
automaticallyImplyLeading: false,


),

只是让它透明,没有行动,而现在

AppBar(
leading: IconButton(
icon: Icon(
Icons.arrow_back,
color: Colors.white.withOpacity(0),
),
onPressed: () {},
),
< p > SliverAppBar ( automaticallyImplyLeading:假的,}< / p >

只需在AppBar()中使用automcallyimplyleading即可

appBar: AppBaar(
automaticallyImplyLeading: false,
)

当你使用Navigator.pushNamed时,返回箭头自动出现在新屏幕的appBar上,用于返回前一个屏幕。如果你不想要这个功能,你需要做的就是在你的appBar属性中写入automaticallyImplyLeading: false