Jak wyśrodkować tytuł paska aplikacji

120

Próbuję wyśrodkować tekst tytułu na pasku aplikacji, który ma zarówno początkową, jak i końcową akcję.

@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.
  );
}

Działa to dobrze, z wyjątkiem tego, że tytuł jest wyrównany do lewej, jak pokazano na tym obrazku:

TYTUŁ W LEWO

Kiedy staram się umieścić tytuł pośrodku, okazuje się, że jest za bardzo w lewo:

@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.
  );
}

TYTUŁ NIE DOBRZE CENTRUM

Bardzo chciałbym znaleźć rozwiązanie, dzięki któremu tekst tytułu będzie idealnie wyśrodkowany między 2 ikonami.

chrześcijanin
źródło

Odpowiedzi:

331

Wyśrodkowanie tytułu jest ustawieniem domyślnym w iOS. W systemie Android AppBartytuł jest domyślnie wyrównany do lewej, ale można go zastąpić, przekazując centerTitle: truejako argument do AppBarkonstruktora.

Przykład:

AppBar(
  centerTitle: true, // this is all you need
  ...
)
Collin Jackson
źródło
6
w tym przypadku tytuł nie pojawia się dokładnie w środku: /
Nie wpływa to nawet na wyrównanie tytułu dla mnie.
Michael Tolsma
14

Miałem ten sam problem i w końcu zadziałał, kiedy dodałem
mainAxisSize: MainAxisSize.min do mojego widżetu Row. Mam nadzieję, że to pomoże!

 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
źródło
11

W moim przypadku chciałem wyśrodkować logo / obraz zamiast tekstu. W tym przypadku centerTitleto za mało (nie wiem czemu, mam plik svg, może to jest powód ...), więc na przykład tak:

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

nie wyśrodkowuje obrazu (dodatkowo obraz może być zbyt duży itp.). To, co działa dobrze, to taki kod:

appBar: AppBar(centerTitle: true,
    title: ConstrainedBox(
        constraints: BoxConstraints(maxHeight: 35, maxWidth: 200),
        child: AppImages.logoSvg)),
Simon Mourier
źródło
Zaakceptowana odpowiedź działa w przypadku tekstu, ale jest to właściwa odpowiedź w przypadku niestandardowych widżetów. Dzięki!
sfratini
Pracował dla mnie! Wygląda na to, że centerTitle nie działa poprawnie, gdy na pasku narzędzi są działania. Ten naprawił to.
Moti Bartov
Nie ma dla mnie innego efektu niż prostsze rozwiązanie. W moim przypadku przezroczysta ramka wokół obrazu prowadzi do nieprawidłowego umieszczenia. Proste przycięcie obrazu nieco mocniej sprawiło, że proste rozwiązanie zadziałało.
rgisi
8

Oto jak tworzę centerTitle na pasku aplikacji:

@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
źródło
2

Po wypróbowaniu wielu rozwiązań pomogło mi to centerTitle: true dodać przykładowy kod oprócz odpowiedzi @Collin Jackson

Przykład wbuild(BuildContext context)

Zrób to

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
      ),
Szybki uczeń
źródło
1
Minęło trochę czasu, to rozwiązało problem. Bardzo prosta. Dziękuję Ci.
Ravimaran
2

Oto inne podejście, jeśli chcesz utworzyć niestandardowy tytuł paska aplikacji. Na przykład chcesz, aby obraz i tekst znajdowały się na środku paska aplikacji, a następnie dodaj

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'))
            ],

          ),
  )

Tutaj stworzyliśmy Rowz, MainAxisAlignment.centeraby wyśrodkować dzieci. Następnie dodaliśmy dwoje dzieci - ikonę i Containerz tekstem. Zawinąłem Textwidżet w, Containeraby dodać niezbędne wypełnienie.

Annsh Singh
źródło
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
źródło
0

Może to pomóc w tworzeniu tekstu tytułu paska aplikacji w środku. Możesz dodać żądane style za pomocą stylu lub skomentować je, jeśli nie są potrzebne.

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

Na wyświetlaczu aplikacji:

wprowadź opis obrazu tutaj

Rahul Shyokand
źródło
0

Możesz wyśrodkować tytuł appBar za pomocą centerTitle parametru .

centerTitle to Boolean Datatype, a wartość domyślna to False.

centerTitle : true

Przykład:

import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('App Title'),
          backgroundColor: Colors.red,
          centerTitle: true,
        ),
      ),
    ),
  );
}

wprowadź opis obrazu tutaj

Kranthi
źródło
0

appbar: AppBar (centerTitle: true, title: Text ("HELLO"))

Musfiq Shanta
źródło
-3

Użyj Centerobiektu

    appBar: AppBar(
      title: Center(
        child: const Text('Title Centered')
      )
    )
Andrei Todorut
źródło
Nie działa, bo tak nie powinno być.
Daniyal Ahmad
-4
appBar: AppBar(
    mainAxisAlignment: MainAxisAlignment.center,
)
Issa
źródło