【 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,
            );
          },
        ),
      ),
    );
  }
}

最後に

このウィジェットの重要性はわかります。
なのでもう少しサンプルを豪華にしてもよかったんではないでしょうかね。

今日はここまで!