アプリバーの戻るボタンをフラッター削除


119

appBar使用Navigator.pushNamedして別のページに移動したときにフラッターアプリで表示される[戻る]ボタンを削除する方法を誰かが知っているかどうか疑問に思います。この結果のページでそれを望まない理由は、それがナビゲーションからのものであり、ユーザーがlogout代わりにボタンを使用してセッションを最初からやり直してほしいからです。

回答:


141

引数new Container()としてempty を渡すことで、戻るボタンを削除できleadingます。AppBar

ただし、これを実行していることに気付いた場合は、ユーザーがデバイスの戻るボタンを押して以前のルートに戻れるようにしたくないでしょう。を呼び出す代わりに、を呼び出してpushNamedNavigator.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(),
      },
    );
  }
}

ええ、私は私のコマンドを混同しました。私はそれを試してみます、あなたの助けをありがとう。
ロバート

2
@ Collin、pushReplacementNamedは、システムの戻る矢印で戻る可能性を排除していないようです。
Jackpap 2017

@Collin Jackson、pushReplacementNamed()前の画面ウィジェット(およびすべての依存するデータと状態)を破棄しますか?
Dmitriy Blokhin、2018年

@Jackpapは、前のルートがある場合に矢印が実際に表示されるためです。それが唯一のルートである場合、戻ることは何もありません。あなたのケースでは、空のContainer()メソッドを使用します。
ThinkDigital

1
空のコンテナメソッドは、戻るボタンがあったはずのスペースになるため、Appbarタイトルがわずかに移動します。まだ理想的な方法ではありません。
Hasen

291

解決策は次のとおりです

あなたは実際にどちらか:

  • 醜い戻るボタン(:])を表示したくないので、次のように進んでください AppBar(...,automaticallyImplyLeading: false,...)

  • -ユーザーが戻って行きたくない現在のビューを置き換える -ひいてはために行きます: Navigator.pushReplacementNamed(## your routename here ##)

  • ユーザーが戻って行きたくない- スタック内の特定のビューバックを交換する -ため、使用: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool); fが返す関数であるtrueあなたは、スタック(新しいもの前右)に保存しておきたい最後のビューを満たしたときに、

  • ユーザーが戻って行きたくない- EVER -で完全にナビゲータースタックを空にする: Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);

乾杯


8
これが私が探していた答えでした!pushReplacementNamed()は私にとっては機能しませんでしたが、ユーザーがこれまでに戻ったことが、最終的に機能しました!ありがとうございました!
s.bridges

1
実際、これが最良の答えです。
Jay Jeong

ありがとう、「popAndPushNamed」の代わりに「pushReplacementNamed」を使用する必要がありました
camillo777

155

AppBarの戻るボタンを削除する簡単な方法は、に設定automaticallyImplyLeadingすることfalseです。

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

シンプルにありがとう
Qutbuddin Bohra

これは簡単に実装できますが、特定のシナリオでNavigator.pushReplacementNamedは正しい解決策です。あなたが示唆することは、すべてのシナリオに適用した場合、最終的には間違った行動を推測、どこかのように誰かがいることをたいことというの回避策であるAppBar主要な行動を暗示し続けて(すなわち:バックナビゲーションボタン)
ギリェルメMatuella

35

@Jackpapの回答にいくつかの説明を追加したいだけです:

automaticallyImplyLeading:

これは、アプリウィジェットにバックウィジェット(リーディングウィジェット)を適用するかどうかを確認します。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!"),
          ),
        ),
      ),
    ),
  );
}  

4

//戻るボタンを非表示にする場合は、コードの下を使用

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


[


3

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

0

これをスライバー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,

),

-1

別のページに移動する場合。 Navigator.pushReplacement()に使える。ログインからホーム画面に移動する場合に使用できます。またはを使用できます。
AppBar(automaticallyImplyLeading: false)


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

正常に動作しています


先頭のnew Container()タグを提供する必要があります
siva
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.