Como centralizar o título de uma barra de aplicativos

111

Estou tentando centralizar o texto do título em uma barra de aplicativos que tem ações iniciais e finais.

@override
Widget build(BuildContext context) {
  final menuButton = new PopupMenuButton<int>(
    onSelected: (int i) {},
    itemBuilder: (BuildContext ctx) {},
    child: new Icon(
      Icons.dashboard,
    ),
  );

  return new Scaffold(
    appBar: new AppBar(
      // Here we take the value from the MyHomePage object that
      // was created by the App.build method, and use it to set
      // our appbar title.
      title: new Text(widget.title, textAlign: TextAlign.center),
      leading: new IconButton(
          icon: new Icon(Icons.accessibility),
          onPressed: () {},
      ),
      actions: [
        menuButton,
      ],
    ),
    body: new Center(
      child: new Text(
        'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.',
      ),
    ),
    floatingActionButton: new FloatingActionButton(
      onPressed: _incrementCounter,
      tooltip: 'Increment',
      child: new Icon(Icons.add),
    ), // This trailing comma makes auto-formatting nicer for build methods.
  );
}

Isso funciona bem, exceto que o título está alinhado à esquerda, conforme mostrado nesta imagem:

TÍTULO À ESQUERDA

Quando tento incluir o título no centro, parece que está muito à esquerda:

@override
Widget build(BuildContext context) {
  final menuButton = new PopupMenuButton<int>(
    onSelected: (int i) {},
    itemBuilder: (BuildContext ctx) {},
    child: new Icon(
      Icons.dashboard,
    ),
  );

  return new Scaffold(
    appBar: new AppBar(
      // Here we take the value from the MyHomePage object that
      // was created by the App.build method, and use it to set
      // our appbar title.
      title: new Center(child: new Text(widget.title, textAlign: TextAlign.center)),
      leading: new IconButton(
          icon: new Icon(Icons.accessibility),
          onPressed: () {},
      ),
      actions: [
        menuButton,
      ],
    ),
    body: new Center(
      child: new Text(
        'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.',
      ),
    ),
    floatingActionButton: new FloatingActionButton(
      onPressed: _incrementCounter,
      tooltip: 'Increment',
      child: new Icon(Icons.add),
    ), // This trailing comma makes auto-formatting nicer for build methods.
  );
}

TÍTULO NÃO BEM CENTRADO

Eu adoraria uma solução para centralizar perfeitamente o texto do título entre os 2 ícones.

cristão
fonte

Respostas:

295

Centralizar o título é o padrão no iOS. No Android, o AppBartítulo do padrão é alinhado à esquerda, mas você pode substituí-lo passando centerTitle: truecomo um argumento para o AppBarconstrutor.

Exemplo:

AppBar(
  centerTitle: true, // this is all you need
  ...
)
Collin Jackson
fonte
5
neste caso, o título não aparece exatamente no centro: /
Isso nem mesmo afeta o alinhamento do título para mim.
Michael Tolsma
12

Eu tive o mesmo problema e finalmente funcionou quando adicionei
mainAxisSize: MainAxisSize.min ao meu widget Row. Eu espero que isso ajude!

 return new Scaffold(
      appBar: new AppBar(
        // Here we take the value from the MyHomePage object that
        // was created by the App.build method, and use it to set
        // our appbar title.
        title: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text(
              widget.title,
            ),
          ],
        ),

        leading: new IconButton(
          icon: new Icon(Icons.accessibility),
          onPressed: () {},
        ),
        actions: [
          menuButton,
        ],
      ),
    );
  }
Annalaufey
fonte
9

No meu caso, eu queria ter um logotipo / imagem centralizado em vez de um texto. Nesse caso, centerTitlenão é suficiente (não tenho certeza porque, eu tenho um arquivo svg, talvez seja esse o motivo ...), então por exemplo, este:

appBar: AppBar(centerTitle: true, title: AppImages.logoSvg)

não centralizará realmente a imagem (além disso, a imagem pode ser muito grande, etc.). O que funciona bem para mim é um código como este:

appBar: AppBar(centerTitle: true,
    title: ConstrainedBox(
        constraints: BoxConstraints(maxHeight: 35, maxWidth: 200),
        child: AppImages.logoSvg)),
Simon Mourier
fonte
A resposta aceita funciona para texto, mas é a resposta certa para widgets personalizados. Obrigado!
sfratini
Funcionou para mim! Parece que centerTitle não funciona corretamente quando há ações na barra de ferramentas. Este consertou.
Moti Bartov
Não tem outro efeito para mim do que a solução mais simples. No meu caso, ter um espaço de borda transparente ao redor da imagem leva ao posicionamento incorreto. Simplesmente cortar a imagem um pouco mais apertada fez a solução simples funcionar.
rgisi
8

Aqui está como faço centerTitle na minha barra de aplicativos:

@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: new AppBar(
    centerTitle: true ,
    title: new Text("Login"),
  ),
  body: new Container(
    padding: EdgeInsets.all(18.0),
      key: formkey,
        child: ListView(
        children: buildInputs() + buildSubmitButton(),
      ),
   ) 
);
}
Wildan Pratama
fonte
2

Depois de tentar muitas soluções, isso me ajudou a centerTitle: true adicionar código de amostra, além da resposta de @Collin Jackson

Exemplo embuild(BuildContext context)

faça isso

appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text(widget.title),centerTitle: true
      ),
Aprendiz rápido
fonte
1
Já faz um tempo, isso resolveu o problema. Muito simples. Obrigado.
Ravimaran
2

Aqui está uma abordagem diferente se você deseja criar um título de barra de aplicativo personalizado. Por exemplo, você quer uma imagem e um texto no centro da barra do aplicativo e, em seguida, adicione

appBar: AppBar(
          title: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(
                Icons.your_app_icon,
                color: Colors.green[500],
              ),
              Container(
                  padding: const EdgeInsets.all(8.0), child: Text('YourAppTitle'))
            ],

          ),
  )

Aqui criamos um Rowcom MainAxisAlignment.centerpara centrar as crianças. Em seguida, adicionamos dois filhos - um ícone e um Containercom texto. Envolvi o Textwidget no Containerpara adicionar o preenchimento necessário.

Annsh Singh
fonte
1
@override
Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
            title: Text('Title'),
            actions: <Widget> [
               IconButton(icon: const Icon(Icons.file_upload), onPressed: _pressed),
            ],
            leading: IconButton(icon: const Icon(Icons.list), onPressed: _pressed),
            centerTitle: true,
        )
        body: Text("Content"),
    );
}
Saman Missaghian
fonte
0

Isso pode ajudar a fazer o texto do título da Appbar no Centro. Você pode escolher adicionar seus estilos desejados usando Estilo ou comentá-los se não for necessário.

appBar: AppBar(
          title:  const Center(
            child: Text(
              "App Title",
              style: TextStyle( color: Colors.white,fontSize: 20),
            ),
          ),
        ),

Na tela do aplicativo:

insira a descrição da imagem aqui

Rahul Shyokand
fonte
-2

CenterObjeto de uso

    appBar: AppBar(
      title: Center(
        child: const Text('Title Centered')
      )
    )
Andrei Todorut
fonte
-2
appBar: AppBar(
    mainAxisAlignment: MainAxisAlignment.center,
)
Issa
fonte