web-dev-qa-db-ja.com

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

Navigator.pushNamedを使用して別のページに移動したときに、フラッターアプリのappBarに表示される[戻る]ボタンを削除する方法を知っている人がいるのだろうかと思います。この結果ページに表示したくないのは、ナビゲーションから来ているため、ユーザーがlogoutボタンを使用してセッションをやり直すようにするためです。

42
Robert

popNamedというメソッドはありません。 pushNamed を意味すると思います。

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

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

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

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

@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!"),
          ),
        ),
      ),
    ),
  );
}  
6
jitsm555