ফ্ল্যাটার অ্যাপবারে রিমুভ ব্যাক বোতাম


136

আমি ভাবছি, যদি আপনি অন্য পৃষ্ঠায় যাওয়ার জন্য appBarব্যবহার করেন তখন কোনও ঝলকানো অ্যাপ্লিকেশনটিতে প্রদর্শিত ব্যাক বোতামটি সরিয়ে ফেলার কোনও উপায় যদি কেউ জানেন তবে Navigator.pushNamed। আমি এই ফলস্বরূপ পৃষ্ঠায় এটি না চাওয়ার কারণটি হ'ল এটি নেভিগেশন থেকে আসছে এবং আমি ব্যবহারকারীদের logoutপরিবর্তে বোতামটি ব্যবহার করতে চাই , যাতে সেশনটি শুরু হয়।

উত্তর:


160

আপনার পক্ষে যুক্তি new Container()হিসাবে খালি পাস করে আপনি পিছনের বোতামটি সরাতে পারেন ।leadingAppBar

আপনি যদি নিজেকে এই কাজটি করতে দেখেন তবে সম্ভবত আপনি চান না যে ব্যবহারকারীটি পূর্বের রুটে ফিরে আসার জন্য ডিভাইসের পিছনের বোতামটি টিপতে সক্ষম হবে। pushNamedকল Navigator.pushReplacementNamedকরার পরিবর্তে , পূর্ববর্তী রুটটি অদৃশ্য হওয়ার জন্য কল করার চেষ্টা করুন ।

ফাংশনটি pushReplacementNamedব্যাকস্ট্যাকের পূর্ববর্তী রুটটি সরিয়ে নতুন রুটের সাথে এটি প্রতিস্থাপন করবে।

পরবর্তীগুলির জন্য সম্পূর্ণ কোডের নমুনা নীচে is

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

হ্যাঁ, আমি আমার আদেশগুলি মিশ্রিত করেছি। আমি এটি ব্যবহার করে দেখুন, আপনার সাহায্যের জন্য ধন্যবাদ।
রবার্ট

4
@ কলিন, পুশরপ্লেসমেন্টনামড সিস্টেম ব্যাক তীরের সাথে ফিরে যাওয়ার সম্ভাবনা সরিয়ে ফেলবে বলে মনে হয় না।
জ্যাকপ্যাপ

@ কলিন জ্যাকসন, কি pushReplacementNamed()পূর্ববর্তী স্ক্রিন উইজেটটি (এবং সমস্ত নির্ভরযোগ্য ডেটা এবং রাজ্যগুলি) নিষ্পত্তি করে?
দিমিত্রি ব্লখিন

@ জ্যাকপ্যাপ কারণ এটি যদি পূর্বের কোনও রুট থাকে তবে এটি সত্যই তীর দেখায়। যদি এটি একমাত্র রুট হয় তবে তারপরে আর ফিরে যাওয়ার কিছুই নেই। আপনার ক্ষেত্রে, খালি কনটেইনার () পদ্ধতিটি ব্যবহার করুন।
থিংডিজিটাল

4
খালি ধারক পদ্ধতির ফলে এমন কোনও জায়গার ফলস্বরূপ মনে হচ্ছে যেখানে পিছনের বোতামটি এমনভাবে হবে যাতে অ্যাপবারের শিরোনামটি কিছুটা সরানো হয়েছিল। এখনও আদর্শ পদ্ধতি নয়।
হাসেন

328

আমি বিশ্বাস করি যে সমাধানগুলি নিম্নলিখিত are

আপনি আসলে হয়:

  • (:]), এবং এইভাবে জন্য যেতে যে কুশ্রী ব্যাক বোতাম প্রদর্শন করে চান না AppBar(...,automaticallyImplyLeading: false,...);

  • - ব্যবহারকারীর ফিরে যেতে চান না বর্তমান দৃশ্য প্রতিস্থাপন - এবং এইভাবে জন্য যান: Navigator.pushReplacementNamed(## your routename here ##);

  • ব্যবহারকারীর ফিরে যেতে চান না - স্ট্যাকের মধ্যে একটি নির্দিষ্ট দৃশ্যের পরিবর্তে - এবং ব্যবহার করুন: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool); যেখানে f স্ট্যাকটি ফিরে আসে trueযখন আপনি স্ট্যাকের মধ্যে রাখতে চান এমন সর্বশেষ ভিউ পূরণ করার সময় (নতুনটির ঠিক আগে);

  • ব্যবহারকারী ফিরে যেতে চান না - এভার - এর সাথে পুরোপুরি ন্যাভিগেটর স্ট্যাকটি খালি করে: Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);

চিয়ার্স


8
এই উত্তরটি আমি খুঁজছিলাম! পুশরপ্লেসমেন্টনামড () আমার পক্ষে কাজ করছিল না, তবে ব্যবহারকারী কখনও কাজেই ফিরে আসবে! ধন্যবাদ!
s.bridges

4
আসলে এটিই সেরা উত্তর।
জে জেং

আপনাকে ধন্যবাদ, আমাকে "পপএন্ডপশনেমেড" এর পরিবর্তে "পুশরপ্লেসমেন্টনাম" ব্যবহার করতে হয়েছিল
ক্যামিলো 77777

171

অ্যাপবারে পিছনের বোতামটি সরিয়ে ফেলার একটি সহজ উপায় সেট automaticallyImplyLeadingকরতে হবে false

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

সহজ জন্য আপনাকে ধন্যবাদ
কুতুবুদ্দিন বোহরা

4
যদিও এটি প্রয়োগ করা সহজ, প্রদত্ত দৃশ্যের Navigator.pushReplacementNamedজন্য সঠিক সমাধান। আপনি যা পরামর্শ দেন তা একান্ত কার্যকারণ যে সমস্ত পরিস্থিতিতে প্রয়োগ করা হলে অবশেষে অন্যায় আচরণকে অনুধাবন করতে পারে, এমন কারও কারও মতো মনে হয় যে AppBarঅগ্রণী আচরণটি চালিয়ে যেতে থাকে (যেমন: পিছনে নেভিগেশন বোতাম)
গিলহার্ম মাতুেলা

যদিও এটি পিছনের তীর আইকনটিকে সরিয়ে ফেলেছে তবুও আপনি ডিভাইসের পিছনে বোতামটি টিপে ফিরে যেতে পারেন
বিশালকনিশাদ

কেবল যদি আমি আরও একটি উত্তর আরও নীচে পড়ে থাকতাম তবে আমি প্রশ্নের আসল উত্তরে পৌঁছে যেতাম। আপনাকে ধন্যবাদ 🙏
গ্রেগরি রে

36

@ জ্যাকপ্যাপ উত্তরের উপর কেবল কিছু বিবরণ যুক্ত করতে চাই:

স্বয়ংক্রিয়ভাবে ইমপ্লাইডিং:

এটি অ্যাপ বারের উপরে আমরা উইজেট (শীর্ষস্থানীয় উইজেট) প্রয়োগ করতে চাই কিনা তা পরীক্ষা করে। যদি স্বয়ংক্রিয়ভাবে ইম্প্লিলিডিংটি মিথ্যা হয় তবে স্বয়ংক্রিয়ভাবে শিরোনামকে স্থান দেওয়া হয় এবং যদি শীর্ষস্থানীয় উইজেট সত্য হয়, তবে এই পরামিতিটির কোনও প্রভাব নেই।

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

8

স্লাইভারস অ্যাপবারের জন্য এটি ব্যবহার করুন

SliverAppBar (
        automaticallyImplyLeading: false,
        elevation: 0,
        brightness: Brightness.light,
        backgroundColor: Colors.white,
        pinned: true,
      ),

এটি সাধারণ অ্যাপবারের জন্য ব্যবহার করুন

 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,

),

7

// আপনি নীচের কোড ব্যবহার করে পিছনে বোতামটি আড়াল করতে চান

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


[


5

অ্যাপবার উইজেটের একটি সম্পত্তি রয়েছে 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(),
),

3

অন্য পৃষ্ঠায় নেভিগেট করা হয়। Navigator.pushReplacement()ব্যবহার করা যেতে পারে. আপনি যদি লগইন থেকে হোম স্ক্রিনে নেভিগেট করে থাকেন তবে এটি ব্যবহার করা যেতে পারে। অথবা আপনি ব্যবহার করতে পারেন।
AppBar(automaticallyImplyLeading: false)


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

এটি দুর্দান্ত কাজ করছে


আমাদের শীর্ষস্থানীয় সরবরাহ করতে হবে: নতুন কনটেইনার () ট্যাগ
শিবা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.