วิธีเปลี่ยนสีปุ่มย้อนกลับของ appBar


102

ฉันไม่สามารถหาวิธีเปลี่ยนปุ่มย้อนกลับอัตโนมัติของ appBar เป็นสีอื่นได้ มันอยู่ใต้โครงนั่งร้านและฉันพยายามค้นคว้า แต่ฉันไม่สามารถโอบรอบมันได้

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

คำตอบ:


280

คุณต้องใช้iconThemeคุณสมบัติจาก AppBar ดังนี้:

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

หรือหากคุณต้องการจัดการปุ่มย้อนกลับด้วยตัวเอง

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

ยิ่งไปกว่านั้นเฉพาะในกรณีที่คุณต้องการเปลี่ยนสีของปุ่มย้อนกลับ

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

3
มีโอกาสไหมที่เราจะเปลี่ยน Icon ในแอพ AppBar พร้อมกันแทนที่จะใส่ในทุกหน้าจอโดยใช้ AppBar?
djalmafreestyler

1
@djalmafreestyler สร้างวิดเจ็ตที่กำหนดเองเช่นนี้ParentPageและคุณสามารถเพิ่ม appBar ได้ทุกที่และทุกที่คุณสามารถใช้สิ่งนี้แทนScaffold
Sisir

35

คุณยังสามารถแทนที่ลูกศรย้อนกลับเริ่มต้นด้วยวิดเจ็ตที่คุณเลือกผ่าน "ชั้นนำ":

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

วิดเจ็ต AppBar ทั้งหมดมีให้เป็นวิดเจ็ต 'ชั้นนำ' เริ่มต้นหากไม่ได้ตั้งค่าไว้


1
ไม่เป็นความจริงทั้งหมดเนื่องจากAppBarจะแสดงปุ่มย้อนกลับเมื่อมีการModalRouteผลัก
creativecreatorormaybenot

2
และตั้งค่าautomaticallyImplyLeading: falseใน AppBar
Loolooii

1
โหวตขึ้นเพื่อNavigator.of(context).pop();ขอบคุณเพื่อน
Fadhly Permata

1
จะเกิดอะไรขึ้นถ้าฉันลบประวัติเนวิเกเตอร์ทั้งหมดไปแล้ว! รหัสนี้จะผิดพลาด!
Shady Mohamed Sherif

จากนั้นตรวจสอบว่าคุณสามารถป๊อปได้หรือไม่: ถ้า (Navigator.canPop (บริบท)) {Navigator.pop (บริบท); } else {// do something}}
blaneyneil

13

ดูเหมือนจะง่ายกว่าที่จะสร้างปุ่มใหม่และเพิ่มสีสันให้กับมันนี่เป็นวิธีที่ฉันทำเพื่อใครก็ตามที่สงสัย

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

1
ทำงานได้อย่างสวยงาม ทางออกที่รัดกุมที่สุดของทั้งหมด
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

คุณยังสามารถกำหนดสีไอคอนชั้นนำทั่วโลกสำหรับแอปได้

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

1

คุณสามารถปรับแต่งAppBarWidgetคีย์เวิร์ดที่มีความสำคัญหรือคุณสามารถกำหนดAppBarWidget ที่กำหนดเองของคุณให้กับคุณสมบัติappBarของ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);
}

ต่อไปนี้เป็นตัวอย่างวิธีการใช้งาน:

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
เพิ่มบริบทให้กับคำตอบไม่แนะนำให้ใช้คำตอบแบบใช้รหัสเท่านั้น
Arun Vinoth

0

เพื่อเปลี่ยนสีชั้นนำสำหรับ CupertinoPageScaffold

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(),
      ),
    ),
  ),
)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.