Uygulama çubuğu geri düğmesi rengi nasıl değiştirilir


103

AppBar'ın otomatik geri düğmesini farklı bir renge nasıl değiştireceğimi çözemiyorum. bir iskele altında ve onu araştırmaya çalıştım ama kafamı dolanamıyorum.

return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.white,
        title: Image.asset(
          'images/.jpg',
          fit: BoxFit.fill,
        ),
        centerTitle: true,
      ),

Yanıtlar:


287

iconThemeMülkü AppBar'dan şu şekilde kullanmanız gerekir :

appBar: AppBar(
  iconTheme: IconThemeData(
    color: Colors.black, //change your color here
  ),
  title: Text("Sample"),
  centerTitle: true,
),

Veya geri düğmesini kendiniz halletmek istiyorsanız.

appBar: AppBar(
  leading: IconButton(
    icon: Icon(Icons.arrow_back, color: Colors.black),
    onPressed: () => Navigator.of(context).pop(),
  ), 
  title: Text("Sample"),
  centerTitle: true,
),

Daha da iyisi, yalnızca geri düğmesinin rengini değiştirmek istiyorsanız.

appBar: AppBar(
  leading: BackButton(
     color: Colors.black
   ), 
  title: Text("Sample"),
  centerTitle: true,
),

3
AppBar'ı kullanarak tüm ekranları yerleştirmek yerine AppBar uygulamasındaki Simgeyi tek seferde değiştirme şansımız var mı?
djalmafreestyler

1
@djalmafreestyler gibi özel bir widget oluşturun ParentPageve orada appBar'ı bir kez ekleyebilirsiniz ve her yerde bunu kullanabilirsinizScaffold
Sisir

36

Varsayılan geri okunu istediğiniz bir widget ile geçersiz kılabilirsiniz:

leading: new IconButton(
  icon: new Icon(Icons.arrow_back, color: Colors.orange),
  onPressed: () => Navigator.of(context).pop(),
), 

AppBar widget'ının yaptığı tek şey, ayarlanmamışsa varsayılan bir 'önde gelen' widget sağlar.


1
Tamamen doğru değil çünkü AppBara ModalRoutebasıldığında geri düğmesini de gösterecek .
creativecreatorormaybenot

2
Ve automaticallyImplyLeading: falseAppBar'da ayarlayın .
Loolooii

1
Teşekkür için oy verildi Navigator.of(context).pop();dostum
Permata

1
ya tüm navigatör geçmişini sildiysem! bu kod çökecek!
Shady Mohamed Sherif

sonra açıp açamayacağınızı kontrol edin, şöyle: if (Navigator.canPop (bağlam)) {Navigator.pop (bağlam); } else {// bir şeyler yap}}
blaneyneil

13

Sadece yeni bir düğme oluşturmak ve ona renk katmak daha kolay görünüyordu, işte merak eden herkes için bunu nasıl yaptım

Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: BackButton(
            color: Colors.black
        ),

1
Güzelce çalıştı. Hepsinden daha özlü çözüm.
Hashir Baig

3
AppBar(        
    automaticallyImplyLeading: false,
    leading: Navigator.canPop(context)
        ? IconButton(
            icon: Icon(
              Icons.arrow_back,
              color: Colors.black,
              size: 47,
            ),
            onPressed: () => Navigator.of(context).pop(),
          )
        : null,
);

2

Ayrıca uygulama için genel olarak önde gelen simge rengini de ayarlayabilirsiniz

MaterialApp(
  theme: ThemeData(
    appBarTheme: AppBarTheme(
      iconTheme: IconThemeData(
        color: Colors.green
      )
    )
  )
)

1

Sen özelleştirebilirsiniz AppBarWidget anahtar kelime, ile önemlidir, ya da özel atayabilirsiniz AppBarWidget için appbar mülkiyet Scaffold :

import 'package:flutter/material.dart';

double _getAppBarTitleWidth(
    double screenWidth, double leadingWidth, double tailWidth) {
  return (screenWidth - leadingWidth - tailWidth);
}

class AppBarWidget extends StatelessWidget with PreferredSizeWidget {
  AppBarWidget(
      {Key key,
      @required this.leadingChildren,
      @required this.tailChildren,
      @required this.title,
      this.leadingWidth: 110,
      this.tailWidth: 30})
      : super(key: key);

  final List<Widget> leadingChildren;
  final List<Widget> tailChildren;
  final String title;
  final double leadingWidth;
  final double tailWidth;

  @override
  Widget build(BuildContext context) {
    // Get screen size
    double _screenWidth = MediaQuery.of(context).size.width;

    // Get title size
    double _titleWidth =
        _getAppBarTitleWidth(_screenWidth, leadingWidth, tailWidth);

    double _offsetToRight = leadingWidth - tailWidth;

    return AppBar(
      title: Row(
        children: [
          Container(
            width: leadingWidth,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.start,
              children: leadingChildren,
            ),
          ),
          Container(
            color: Colors.green,
            width: _titleWidth,
            padding: const EdgeInsets.only(left: 5.0, right: 5),
            child: Container(
              padding: EdgeInsets.only(right: _offsetToRight),
              color: Colors.deepPurpleAccent,
              child: Center(
                child: Text('$title'),
              ),
            ),
          ),
          Container(
            color: Colors.amber,
            width: tailWidth,
            child: Row(
              children: tailChildren,
            ),
          )
        ],
      ),
      titleSpacing: 0.0,
    );
  }

  @override
  Size get preferredSize => Size.fromHeight(kToolbarHeight);
}

Aşağıda, nasıl kullanılacağına ilişkin örnek verilmiştir:

import 'package:flutter/material.dart';
import 'package:seal_note/ui/Detail/DetailWidget.dart';
import 'package:seal_note/ui/ItemListWidget.dart';

import 'Common/AppBarWidget.dart';
import 'Detail/DetailPage.dart';

class MasterDetailPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _MasterDetailPageState();
}

class _MasterDetailPageState extends State<MasterDetailPage> {
  @override
  Widget build(BuildContext context) { 
    return Scaffold(
      appBar: AppBarWidget(leadingChildren: [
        IconButton(
          icon: Icon(
            Icons.arrow_back_ios,
            color: Colors.white,
          ),
        ),
        Text(
          '文件夹',
          style: TextStyle(fontSize: 14.0),
        ),
      ], tailChildren: [
        Icon(Icons.book),
        Icon(Icons.hd),
      ], title: '英语知识',leadingWidth: 140,tailWidth: 50,),
      body: Text('I am body'),
    );
  }
}

0
  appBar: AppBar(
          iconTheme: IconThemeData(
            color: Colors.white, //modify arrow color from here..
          ),
      );

1
Yanıta biraz bağlam ekleyin, yalnızca kod içeren yanıt önerilmez.
Arun Vinoth

0

CupertinoPageScaffold için ana rengi değiştirmek için

Theme(
  data: Theme.of(context).copyWith(
    cupertinoOverrideTheme: CupertinoThemeData(
      scaffoldBackgroundColor: Colors.white70,
      primaryColor: Styles.green21D877, // HERE COLOR OF LEADING
    ),
  ),
  child: CupertinoPageScaffold(
    navigationBar: CupertinoNavigationBar(
      brightness: Brightness.light,
      backgroundColor: Colors.white,
      middle: Text('Cupertino App Bar'),
    ),
    child: Container(
      child: Center(
        child: CupertinoActivityIndicator(),
      ),
    ),
  ),
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.