【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part80 Scrolling
「基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は ウィジェット編 ( part80 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part79 Scrolling
引き続き、Scrollingについて学びます。
Scrolling
ListViewウィジェット
ListView
ウィジェットは文字通り、リスト表示したい場合に使用します。
ListTile
というウィジェットとセットで使用することが多いそうです。
単純なリスト
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(home: new MyApp()));
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _State();
}
}
class _State extends State<MyApp> {
int _index = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('テスト中です。'),
),
body: ListView(children: const <Widget>[
ListTile(
title: Text("1"),
),
ListTile(
title: const Text("2"),
),
])));
}
}
なんとも味気ない・・・。
動的に作る場合
固定ではない場合はListView.builder()
コンストラクタを使います。
itemBuilder
の部分が作成指示のようですね。
リストはよく使用し、かつ動的生成が多いのでこれはイメージしやすいです。
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(home: new MyApp()));
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _State();
}
}
final items = ['1', '2'];
class _State extends State<MyApp> {
int _index = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('テスト中です。'),
),
body: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(title: Text(items[index]));
}),
),
);
}
}
結果はやはり地味・・・。
ちょっと変わった使い方
要素間にウィジェットを挟む場合はListView.separate()
コンストラクタを使います。
この例ではボーダー挿入しています。
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(home: new MyApp()));
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _State();
}
}
final items = ['1', '2'];
class _State extends State<MyApp> {
int _index = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('テスト中です。'),
),
body: ListView.separated(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(title: Text(items[index]));
},
separatorBuilder: (context, index) {
return Divider(
color: Colors.black,
);
},
),
),
);
}
}
最後に
このウィジェットの重要性はわかります。
なのでもう少しサンプルを豪華にしてもよかったんではないでしょうかね。
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません