ChatGPT解决这个技术问题 Extra ChatGPT

颤动删除应用栏上的后退按钮

我想知道,当您使用 Navigator.pushNamed 转到另一个页面时,是否有人知道如何删除显示在颤振应用程序中的 appBar 上的后退按钮。我不希望它出现在这个结果页面上的原因是它来自导航,我希望用户改用 logout 按钮,以便会话重新开始。


o
oreid

我相信解决方案如下

你实际上要么:

不想显示那个丑陋的后退按钮( :] ),因此选择: AppBar(...,automaticallyImplyLeading: false,...);

不希望用户返回 - 替换当前视图 - 因此选择: Navigator.pushReplacementNamed(## your routename here ##);

不希望用户返回 - 替换堆栈中的某个视图 - 因此使用: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route)→bool);其中 f 是在遇到要保留在堆栈中的最后一个视图时返回 true 的函数(就在新视图之前);

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

干杯


这就是我一直在寻找的答案! pushReplacementNamed() 对我不起作用,但是返回的用户永远是最终起作用的!谢谢!
确实这是最好的答案。
谢谢,我不得不使用“pushReplacementNamed”而不是“popAndPushNamed”
automaticallyImplyLeading: false 是我正在寻找的答案..
C
CopsOnRoad

删除 AppBar 中的后退按钮的一种简单方法是将 automaticallyImplyLeading 设置为 false

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

虽然这很容易实现,但对于给定的场景,Navigator.pushReplacementNamed 是正确的解决方案。您建议的是一种解决方法,如果应用于所有场景,最终可能会推断出错误的行为,例如有人希望 AppBar 继续暗示领先行为的地方(即:后退导航按钮)
虽然它删除了后退箭头图标,但您仍然可以通过按设备的后退按钮返回
如果我能再往下读一个答案,我就会得到这个问题的实际答案。谢谢🙏
仅在 Android 上删除后退按钮的最佳方法是什么,以便 Android 用户必须使用设备的后退按钮才能返回,但 iOS 用户会看到 AppBar 后退按钮?
这应该是公认的答案!
C
CoderUni

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

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

函数 pushReplacementNamed 将删除 backstack 中的先前路由并将其替换为新路由。

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

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

是的,我把我的命令搞混了。我会试一试,谢谢你的帮助。
@Collin, pushReplacementNamed 似乎并没有消除使用系统返回箭头返回的可能性。
@Collin Jackson,pushReplacementNamed() 是否处理以前的屏幕小部件(以及所有相关数据和状态)?
@Jackpap 那是因为如果有先前的路线,它确实会显示箭头。如果这是唯一的路线,那么就没有什么可回头的了。在您的情况下,请使用空的 Container() 方法。
空容器方法似乎会导致后退按钮所在的空间,因此 Appbar 标题略微移动。仍然不是一个理想的方法。
J
Jitesh Mohite

自动暗示前导:

这将检查我们是否要在应用栏上应用后置小部件(前导小部件)。如果 automaticImplyLeading 为 false,则自动为标题分配空格,如果前导小部件为 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!"),
          ),
        ),
      ),
    ),
  );
}  

K
Kennedy Owusu

将其用于条子 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,

),

S
ShigaSuresh

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

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

https://i.stack.imgur.com/9vK45.png


M
Mostafa Mahmoud

只需在 AppBar() 中使用 automaticImplyLeading

appBar: AppBaar(
  automaticallyImplyLeading: false,
)

S
Shanto

AppBar 小部件有一个名为 automaticallyImplyLeading 的属性。默认情况下,它的值为 true。如果您不希望颤振自动为您构建后退按钮,那么只需将属性设为 false

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

添加自定义后退按钮

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

S
S.R Keshav

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


R
Rakib Joarder

SliverAppBar(automaticImplyLeading: false,}


A
Artron

只是让它透明,并且在按下时没有动作

AppBar(
            leading: IconButton(
              icon: Icon(
                Icons.arrow_back,
                color: Colors.white.withOpacity(0),
              ),
              onPressed: () {},
            ),

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

它工作正常


我们需要提供前导:new Container() 标签

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅