あぼぼノート

頭の中空っぽ

FlutterでAppBarを透過する

AppBarのbackgroundColorを透明にしただけだとAppBarは透明にならない。

ScaffoldのextendBodyBehindAppBarプロパティにtrueを設定すればOK。

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        backgroundColor: Colors.white.withOpacity(0.5),
      ),
      extendBodyBehindAppBar: true,
      body: ListView.builder(
        padding: const EdgeInsets.all(24),
        itemCount: 1,
        itemBuilder: (BuildContext context, int index) {
          return Container(
            height: 1000,
            color: Colors.blue,
          );
        },
      ),
    );
  }
}

f:id:aboy_perry:20191027011036p:plainf:id:aboy_perry:20191027005311p:plain
左:extendBodyBehindAppBar: false 右:extendBodyBehindAppBar: true

ちなみに、scaffoldの仕様で、extendBodyBehindAppBarがtrueかfalseかでpaddingのtopが変わる。

f:id:aboy_perry:20191027005430p:plainf:id:aboy_perry:20191027005311p:plain
左:extendBodyBehindAppBar: false 右:extendBodyBehindAppBar: true

// flutter/lib/src/material/scaffold.dart#L366
final double top = extendBodyBehindAppBar
          ? math.max(metrics.padding.top, bodyConstraints.appBarHeight)
          : metrics.padding.top;

https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/scaffold.dart#L366