Flutter: Setting the height of the AppBar

DartMaterial DesignFlutter

Dart Problem Overview


How can I simply set the height of the AppBar in Flutter?

The title of the bar should be staying centered vertically (in that AppBar).

Dart Solutions


Solution 1 - Dart

You can use PreferredSize:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      home: Scaffold(
        appBar: PreferredSize(
          preferredSize: Size.fromHeight(50.0), // here the desired height
          child: AppBar(
            // ...
          )
        ),
        body: // ...
      )
    );
  }
}

Solution 2 - Dart

You can use PreferredSize and flexibleSpace for it:

appBar: PreferredSize(
  preferredSize: Size.fromHeight(100.0),
  child: AppBar(
    automaticallyImplyLeading: false, // hides leading widget
    flexibleSpace: SomeWidget(),
  )
),

This way you can keep the elevation of AppBar for keeping its shadow visible and have custom height, which is what I was just looking for. You do have to set the spacing in SomeWidget, though.

Solution 3 - Dart

Use toolbarHeight:

enter image description here


There's no longer a need to use PreferredSize. Use toolbarHeight with flexibleSpace.

AppBar(
  toolbarHeight: 120, // Set this height
  flexibleSpace: Container(
    color: Colors.orange,
    child: Column(
      children: [
        Text('1'),
        Text('2'),
        Text('3'),
        Text('4'),
      ],
    ),
  ),
)

Solution 4 - Dart

The easiest way is to use toolbarHeight property in your AppBar

Example :

AppBar(
   title: Text('Flutter is great'),
   toolbarHeight: 100,
  ),

> You can add flexibleSpace property in your appBar for more flexibility

Output:

enter image description here

For more controls , Use the PreferedSize widget to create your own appBar

Example :

appBar: PreferredSize(
     preferredSize: Size(100, 80), //width and height 
          // The size the AppBar would prefer if there were no other constraints.
     child: SafeArea(
       child: Container(
         height: 100,
         color: Colors.red,
         child: Center(child: Text('Fluter is great')),
       ),
     ),
),

> Don't forget to use a SafeArea widget if you don't have a safeArea

Output :

enter image description here

Solution 5 - Dart

At the time of writing this, I was not aware of PreferredSize. Cinn's answer is better to achieve this.

You can create your own custom widget with a custom height:

import "package:flutter/material.dart";

class Page extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Column(children : <Widget>[new CustomAppBar("Custom App Bar"), new Container()],);
  }
}


class CustomAppBar extends StatelessWidget {

  final String title;
  final double barHeight = 50.0; // change this for different heights 

  CustomAppBar(this.title);

  @override
  Widget build(BuildContext context) {
    final double statusbarHeight = MediaQuery
        .of(context)
        .padding
        .top;

    return new Container(
      padding: new EdgeInsets.only(top: statusbarHeight),
      height: statusbarHeight + barHeight,
      child: new Center(
        child: new Text(
          title,
          style: new TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}

Solution 6 - Dart

In addition to @Cinn's answer, you can define a class like this

class MyAppBar extends AppBar with PreferredSizeWidget {
  @override
  get preferredSize => Size.fromHeight(50);

  MyAppBar({Key key, Widget title}) : super(
    key: key,
    title: title,
    // maybe other AppBar properties
  );
}

or this way

class MyAppBar extends PreferredSize {
  MyAppBar({Key key, Widget title}) : super(
    key: key,
    preferredSize: Size.fromHeight(50),
    child: AppBar(
      title: title,
      // maybe other AppBar properties
    ),
  );
}

and then use it instead of standard one

Solution 7 - Dart

Cinn's answer is great, but there's one thing wrong with it.

The PreferredSize widget will start immediately at the top of the screen, without accounting for the status bar, so some of its height will be shadowed by the status bar's height. This also accounts for the side notches.

The solution: Wrap the preferredSize's child with a SafeArea

appBar: PreferredSize(
  //Here is the preferred height.
  preferredSize: Size.fromHeight(50.0),
  child: SafeArea(
    child: AppBar(
      flexibleSpace: ...
    ),
  ),
),

If you don't wanna use the flexibleSpace property, then there's no need for all that, because the other properties of the AppBar will account for the status bar automatically.

Solution 8 - Dart

simply use toolbar height ...

AppBar(
 title: Text("NASHIR'S APP"),
 toolbarHeight: 100,
),

Solution 9 - Dart

You can use the toolbarHeight property of Appbar, it does exactly what you want.

Solution 10 - Dart

simply you can use toolbarHeight

return MaterialApp(
  home: Scaffold(
    appBar: AppBar(
        elevation: 0.0,
        backgroundColor: white,
        toolbarHeight: 70.0,
        title: Align(
          alignment: Alignment.centerRight,
          child: Text(
            'your title',
            style: TextStyle(
                fontSize: 24.0,
                fontWeight: FontWeight.bold,
                color: black
            ),
          ),
        )

    ),
  ),
);

result

Solution 11 - Dart

You can use PreferredSize, by this use can set multiple children widget inside their

 appBar: PreferredSize(
    preferredSize: Size(MediaQuery.of(context).size.width, 75),
    child: Column(children: [
      AppBar(
        centerTitle: true,
        toolbarHeight: 74,
        backgroundColor: Colors.white,
        elevation: 0,
        title: Column(
          children: [
            Text(
              viewModel.headingText,
              style: sfDisplay16500Text,
            ),
            SizedBox(
              height: 8.0,
            ),
            Text(
              viewModel.url.toString(),
              style: sfDisplay10400LightBlackText,
              maxLines: 1,
              overflow: TextOverflow.ellipsis,
            )
          ],
        ),
      ),
    ]),
  ),

or just directly use toolbarHeight property for only increase hight of appBar.

appBar: AppBar(
          title: Text('AppBar Texr'),
          toolbarHeight: 200.0, // double
        ), 

Solution 12 - Dart

Extend AppBar class and override preferredSize

class AppBarCustom extends AppBar {
  @override
  Size get preferredSize => Size.fromHeight(100);
}

then use it as you would use AppBar class

class MyHomePage extends StatelessWidget {
 @override
   Widget build(BuildContext context) {
     return MaterialApp(
       home: Scaffold(
       appBar: AppBarCustom(),
       body:
       ),
     );
   }
 }

Solution 13 - Dart

This is simplest and easiest way to change appbar height without changing original theme.


class AppBarSectionView extends StatefulWidget implements PreferredSizeWidget {
 const AppBarSectionView({Key? key}) : super(key: key);

 @override
 _AppBarSectionViewState createState() => _AppBarSectionViewState();

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

class _AppBarSectionViewState extends State<AppBarSectionView> {
 @override
 Widget build(BuildContext context) {
   return AppBar(
     toolbarHeight: widget.preferredSize.height ,
     backgroundColor: Colors.red,
     leading: const Icon(Icons.arrow_back_ios_rounded),
     title: const Text("This Is Title"),
   );
 }
}

Solution 14 - Dart

If you are in Visual Code, Ctrl + Click on AppBar function.

Widget demoPage() {
  AppBar appBar = AppBar(
    title: Text('Demo'),
  );
  return Scaffold(
    appBar: appBar,
    body: /*
    page body
    */,
  );
}

And edit this piece.

app_bar.dart will open and you can find 
    preferredSize = new Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0)),

Difference of height!

sample image

sample image

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBuğra EkukluView Question on Stackoverflow
Solution 1 - DartCinnView Answer on Stackoverflow
Solution 2 - DartfooturistView Answer on Stackoverflow
Solution 3 - DartCopsOnRoadView Answer on Stackoverflow
Solution 4 - DartKab AgoudaView Answer on Stackoverflow
Solution 5 - DartMansView Answer on Stackoverflow
Solution 6 - DartPavelView Answer on Stackoverflow
Solution 7 - DartTayanView Answer on Stackoverflow
Solution 8 - DartNASHIR ABDULLAHView Answer on Stackoverflow
Solution 9 - DartSami BelaidView Answer on Stackoverflow
Solution 10 - DartOmarView Answer on Stackoverflow
Solution 11 - Dartshirsh shuklaView Answer on Stackoverflow
Solution 12 - DartJamilurrehmanView Answer on Stackoverflow
Solution 13 - DartWai Han KoView Answer on Stackoverflow
Solution 14 - Dartgoops17View Answer on Stackoverflow