0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Flutterのタブの幅を完全にコントロールする

Posted at

タブの幅を完全に制御したいことがあると思います。

その場合Tab > childにContainerを指定したりすると思います。
しかし表示されるタブの幅とこのchildに指定したContainerの間に余白があるため、意図した見た目になってくれないことがあります。
たとえば画面3等分にしてタブを表示したいのに、Containerのwidthに画面幅/3を指定してもうまくいきません。

↓こうしたい
image.png

この余白はTabBarのコードを見ると以下のように16とベタ打ちで定義されているようです。
image.png

この16を考慮してContainerの幅を指定することで意図した見た目にすることができます。
余白自体の調整はできませんが、タブの幅自体は画面3等分になります。

3等分するコード例はこちら

  @override
  Widget build(BuildContext context) {
    double screenWidth = MediaQuery.of(context).size.width;
    // TabBarで設定されるTabの左右の余白(tabs.dartのadjustedPaddingより推測)
    final double tabContentPadding = 16;
    final tabCount = 3;
    final tabWidth =
        (screenWidth - tabCount * 2 * tabContentPadding) / tabCount;
    return DefaultTabController(
        length: tabCount,
        child: Scaffold(
          body: SafeArea(
            child: Column(
              children: [
                TabBar(tabs: [
                  Tab(
                    child: Container(
                      width: tabWidth,
                      color: Colors.pink,
                    ),
                  ),
                  Tab(
                    child: Container(
                      width: tabWidth,
                      color: Colors.amber,
                    ),
                  ),
                  Tab(
                    child: Container(
                      width: tabWidth,
                      color: Colors.cyan,
                    ),
                  ),
                ]),
              ],
            ),
          ),
        ));
  }

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?