#はじめに
Flutter Widget of the WeekでFlexibleSpaceBar
のStretchModes
が紹介されたので実際に使ってみました
#作りたいもの
###コード
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
physics: BouncingScrollPhysics(),
slivers: <Widget>[
//びよーんの部分
SliverAppBar(
stretch: true,
expandedHeight: 250.0,
flexibleSpace: FlexibleSpaceBar(
title: Text('My Dog'),
background: Image(image: AssetImage("images/mydog.jpg"),
fit: BoxFit.cover),
centerTitle: true,
stretchModes: <StretchMode>[
StretchMode.zoomBackground,
StretchMode.blurBackground,
StretchMode.fadeTitle,
],
),
),
//ここからスクロールするリストを作る
SliverFixedExtentList(
itemExtent: 100.0,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
alignment: Alignment.center,
color: Colors.lightBlue[100 * (index % 2)],
child: Text('List Item $index'),
);
},
childCount: 8
),
),
],
),
);
}
}
#手順
###まずはこれ
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
//びよーんの部分
SliverAppBar(
expandedHeight: 250.0,
flexibleSpace: FlexibleSpaceBar(
title: Text('My Dog'),
background: Image(image: AssetImage("images/mydog.jpg"),
fit: BoxFit.cover),
centerTitle: true,
),
),
//スクロールするリスト
SliverFixedExtentList(
itemExtent: 100.0,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
alignment: Alignment.center,
color: Colors.lightBlue[100 * (index % 2)],
child: Text('List Item $index'),
);
},
childCount: 8
),
),
],
),
);
}
}
・sliverAppBar
はCustomScrollView
の子要素として使います。
・expandedHeight
でスクロールして伸ばしたときに広がる高さを指定します。
・fit: BoxFit.cover
で画像を幅いっぱいに広げます。
SliverFixedExtentList
の説明は長くなるので今回は省きます。
ここに説明が載っています。
Flutter Doc JP SliverAppBar
##本題
body: CustomScrollView(
physics: BouncingScrollPhysics(),
slivers: <Widget>[
SliverAppBar(
stretch: true,
expandedHeight: 250.0,
・BouncingScrollPhysics
を使います。
これを使い忘れていて、めちゃくちゃ手こずりました。
・SliverAppBar
のstretch
をtrue
にします。
これでStretchModes
を使って、スクロールしたときのエフェクトをつけられるようになります。
flexibleSpace: FlexibleSpaceBar(
title: Text('My Dog'),
background: Image(image: AssetImage("images/mydog.jpg"),
fit: BoxFit.cover),
centerTitle: true,
//ここでStretchModesでを使います。
),
StretchMode.zoomBackground
でスクロールしたときにズームさせます。
stretchModes: <StretchMode>[
StretchMode.zoomBackground,
],
strethMode.blurBackground
でスクロールしたときにぼやけさせます。
stretchModes: <StretchMode>[
StretchMode.zoomBackground,
StretchMode.blurBackground,
],
StrethMode.fadeTitle
でスクロールしたときにタイトルを消します。
stretchModes: <StretchMode>[
StretchMode.zoomBackground,
StretchMode.blurBackground,
StretchMode.fadeTitle,
],
#まとめ
今回はFlutter Widget of the Weekで紹介されたFlexibleSpaceBar
を使ってみました。
勉強になるので随時取り上げていきたいと思っています。
#参考文献
・SliverAppBar - Configurable overscroll stretch with callback feature & FlexibleSpaceBar support