【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part101 Interaction model widgets

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は ウィジェット編 ( part101 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part100 Interaction model widgets

引き続き、Interaction model widgetsについて学びます。

Interaction model widgets

Dismissibleウィジェット

Dismissibleウィジェットはリストのアイテムを左右にスワイプし削除するアクションを付与することができるウィジェットです。

FlutterはKeyと呼ばれるIDによって同じウィジェットかどうか判断するそうです。
この仕組みの関係でkeyプロパティにはUniqueKey()を指定するほうが良いようです。

onDissmissedプロパティ

OnDissmissedプロパティはリストのアイテムがスワイプによって消えた場合に呼び出されるコールバック関数になります。
DismissDirectionクラスで右スワイプか左スワイプかを判断できます。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  // runApp(new MaterialApp(home: new MyApp()));
  runApp(new MaterialApp(home: new SamplePage()));
}

class SamplePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _SamplePageState();
  }
}

class _SamplePageState extends State<SamplePage> {
  List<String> _items = ['いち', 'に', 'さん'];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('テスト中!')),
        body: ReorderableListView(
          // 入れ替えるロジックです。
          onReorder: (oldIndex, newIndex) {
            setState(() {
              if (newIndex > _items.length) {
                newIndex = _items.length;
              }
              if (oldIndex < newIndex) {
                newIndex--;
              }
              var item = _items[oldIndex];
              _items.remove(item);
              _items.insert(newIndex, item);
            });
          },
          // リストのタイトルです。
          header: const Text('ReorderableListViewのサンプル'),
          // アイテム定義です。
          children: <Widget>[
            for (var item in _items)
              ListTile(
                key: ValueKey(item),
                title: Text(item.toString()),
              )
          ],
        ),
      ),
    );
  }
}

スワイプしてアイテムを削除することができるようになりました。

最後に

コールバック関数でほかのシステムに情報を送信できれば連携もばっちりですね

今日はここまで!