回答:
引数new Container()
としてempty を渡すことで、戻るボタンを削除でき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(),
},
);
}
}
pushReplacementNamed()
前の画面ウィジェット(およびすべての依存するデータと状態)を破棄しますか?
解決策は次のとおりです
あなたは実際にどちらか:
醜い戻るボタン(:])を表示したくないので、次のように進んでください
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);
乾杯
AppBarの戻るボタンを削除する簡単な方法は、に設定automaticallyImplyLeading
することfalse
です。
appBar: AppBar(
title: Text("App Bar without Back Button"),
automaticallyImplyLeading: false,
),
Navigator.pushReplacementNamed
は正しい解決策です。あなたが示唆することは、すべてのシナリオに適用した場合、最終的には間違った行動を推測、どこかのように誰かがいることをたいことというの回避策であるAppBar
主要な行動を暗示し続けて(すなわち:バックナビゲーションボタン)
@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!"),
),
),
),
),
);
}
//戻るボタンを非表示にする場合は、コードの下を使用
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);
},
),
],
)
),
),
);
}
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(),
),
これをスライバー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,
),