स्पंदन हटाओ बटन वापस appbar पर


119

मुझे आश्चर्य हो रहा है, अगर किसी को बैक बटन को हटाने का कोई तरीका पता है जो किसी दूसरे पृष्ठ पर जाने के लिए appBarफ़्लटर ऐप पर दिखाई देता है Navigator.pushNamed। इस परिणाम पृष्ठ पर मैं यह नहीं चाहता हूं कि यह नेविगेशन से आ रहा है और मैं चाहता हूं कि उपयोगकर्ता logoutइसके बजाय बटन का उपयोग करें, ताकि सत्र शुरू हो।

जवाबों:


141

आप अपने तर्क के new Container()रूप में एक खाली पास करके बैक बटन को हटा सकते हैं ।leadingAppBar

हालाँकि, यदि आप स्वयं को ऐसा करते हुए पाते हैं, तो आप नहीं चाहते कि उपयोगकर्ता डिवाइस के बैक बटन को पहले के मार्ग पर वापस लाने में सक्षम हो। 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(),
      },
    );
  }
}

हाँ, मुझे मेरी आज्ञा मिली। मैं इसे एक कोशिश करूँगा, आपकी मदद के लिए धन्यवाद।
रॉबर्ट

2
@Collin, pushReplacementNamed सिस्टम बैक एरो के साथ वापस जाने की संभावना को दूर नहीं करता है।
जैकपैप 15

@ कोलिन जैक्सन, क्या pushReplacementNamed()पिछले स्क्रीन विजेट (और सभी डेटा और राज्यों के आधार पर) का निपटान करता है?
दिमित्री ब्लोखिन

@Jackpap ऐसा इसलिए है क्योंकि यह वास्तव में तीर दिखाता है अगर कोई पिछला मार्ग है। यदि यह एकमात्र मार्ग है, तो वापस जाने के लिए कुछ भी नहीं है। अपने मामले में, खाली कंटेनर () विधि का उपयोग करें।
थिंकडिजिटल जूल 25'19

1
खाली कन्टेनर विधि से ऐसे स्थान का परिणाम होता है जहाँ बैक बटन होता है इसलिए अपबार शीर्षक को थोड़ा पार कर लिया जाता है। फिर भी एक आदर्श विधि नहीं।
हसन

291

मेरा मानना ​​है कि समाधान निम्नलिखित हैं

आप वास्तव में या तो:

  • (:]), और इस तरह के लिए जाना: कि बदसूरत वापस बटन प्रदर्शित करने के लिए नहीं करना चाहते AppBar(...,automaticallyImplyLeading: false,...),

  • - उपयोगकर्ता वापस जाने के लिए नहीं करना चाहते वर्तमान दृश्य की जगह - और इस के लिए जाना: Navigator.pushReplacementNamed(## your routename here ##);

  • उपयोगकर्ता वापस नहीं जाना चाहता है - स्टैक में एक निश्चित दृश्य को वापस बदलना - और इस प्रकार उपयोग करें: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool); जहां एफ एक फ़ंक्शन है trueजो अंतिम दृश्य को पूरा करते समय आप स्टैक में रखना चाहते हैं (नए से ठीक पहले);

  • उपयोगकर्ता वापस नहीं जाना चाहते - कभी - पूरी तरह से नाविक ढेर के साथ खाली करना: Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);

चियर्स


8
यह वह उत्तर था जिसकी मुझे तलाश थी! pushReplacementNamed () मेरे लिए काम नहीं कर रहा था, लेकिन उपयोगकर्ता कभी वापस जा रहा है जो काम करना समाप्त कर रहा है! धन्यवाद!
s.bridges

1
वास्तव में यह सबसे अच्छा जवाब है।
Jay Jeong

धन्यवाद, मुझे "popAndPushNamed" के बजाय "pushReplacementNamed" का उपयोग करना पड़ा
Camillo777

156

AppBar में बैक बटन को हटाने का एक सरल तरीका यह है कि इसे सेट automaticallyImplyLeadingकरें false

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

सरल के लिए धन्यवाद
कुतुबुद्दीन बोहरा

जबकि यह लागू करने के लिए सरल है, दिए गए परिदृश्य के लिए, Navigator.pushReplacementNamedसही समाधान है। आप जो सुझाव देते हैं वह एक ऐसा हल है जो सभी परिदृश्यों में लागू होने पर, अंततः गलत व्यवहार का अनुमान लगा सकता है, जैसे कि कहीं न कहीं कोई व्यक्ति चाहेगा कि AppBarवह अग्रणी व्यवहार को लागू करता रहे (यानी: बैक नेविगेशन बटन)
गुइलेरमे मातुएला

35

बस @ जेकप उत्तर पर कुछ विवरण जोड़ना चाहते हैं:

automaticallyImplyLeading:

यह जाँचता है कि हम ऐप बार पर बैक विजेट (प्रमुख विजेट) लागू करना चाहते हैं या नहीं। यदि स्वचालित रूप से स्वचालित रूप से गलत है, तो स्वचालित रूप से अंतरिक्ष को शीर्षक दिया जाता है और यदि प्रमुख विजेट सत्य है, तो इस पैरामीटर का कोई प्रभाव नहीं पड़ता है।

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। अगर आप नहीं चाहते कि आपके लिए बैक बटन स्वतः फड़फड़ाए तो आप संपत्ति बना लें 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 slivers के लिए यह प्रयोग करें

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

यह ठीक काम कर रहा है


हमें अग्रणी प्रदान करने की आवश्यकता है: नया कंटेनर () टैग
शिव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.