2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Widgetについて学んでみる①

Last updated at Posted at 2022-04-03

flutter_slidable使ってみる

flutter_slidableとは、却下できる方向性のあるスライドアクションを備えたスライド可能なリストアイテムのFlutter実装だと解説されていた...
無理矢理日本語に翻訳しました😅

今回使用した開発環境

  • macOS Monterey
  • flutter2.10.3
  • flutter_slidable: ^1.2.0

なぜ、Widgetの勉強始めたのか?
コピペばかりしていて、仕組みを理解していなかったから😅
お恥ずかしい。

そのままサンプルコード使っても面白くないので、最近学んだDartの文法の知識も使いながら、コードを書きました。

main.dart

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

// アロー関数で書いてみた!
void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  // staticプロパティで定義しないと使えない
  static const titleName = 'Slidable';

  @override
  Widget build(BuildContext context) {
    // MaterialAppでScaffoldをラップする
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text(titleName),
        ),
        // bodyの中にSlidableを書く
        body: Slidable(
          endActionPane: ActionPane(
            motion: const DrawerMotion(),
            children: [
              // シェアボタン
              SlidableAction(
                onPressed:(value) {},
                backgroundColor: Colors.blue,
                icon: Icons.share,
                label: 'シェア',
                ),
              // 削除ボタン
              SlidableAction(
                onPressed: (value) {},
                backgroundColor: Colors.red,
                icon: Icons.delete,
                label: '削除',
              ),
            ],
          ),
            // リストのタイトル
          child: ListTile(
            tileColor: Colors.grey[200],
            leading: const Icon(Icons.face_outlined),
            title: const Text(
              'Slidable'
            ),
          ),
        ),
      ),
    );
  }
}

flutter_slidable.gif

やってみた感想

Swiftのスワイプアクションより速く作れる🤩
UikitだとGUIで設定も必要なので時間がかかります。Googleさんが開発したFlutterを使えばUI作るだけだったら、すぐ作れるからモバイルアプリを開発している企業が採用する理由がわかる。

おまけ

プログラムを関数かしてみる方法もやってみた。
場所を分けて方がコードを見やすいと思ったので...
main.dart

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

// アロー関数で書いてみた!
void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  // staticプロパティで定義しないと使えない
  static const titleName = 'Slidable';

  @override
  Widget build(BuildContext context) {
    // MaterialAppでScaffoldをラップする
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text(titleName),
        ),
        // bodyの中にSlidableを書く
        body: Slidable(
          endActionPane: ActionPane(
            motion: const DrawerMotion(),
            children: [
              // シェアボタン
              _shareButton(),
              // 削除ボタン
              _deleteButton(),
            ],
          ),
          // リストのタイトル
          child: ListTile(
            tileColor: Colors.grey[200],
            leading: const Icon(Icons.face_outlined),
            title: const Text('Slidable'),
          ),
        ),
      ),
    );
  }
  // シェアボタンの関数
  Widget _shareButton() {
    return SlidableAction(
      onPressed: (value) {},
      backgroundColor: Colors.blue,
      icon: Icons.share,
      label: 'シェア',
    );
  }
  // 削除ボタンの関数
  Widget _deleteButton() {
    return SlidableAction(
      onPressed: (value) {},
      backgroundColor: Colors.red,
      icon: Icons.delete,
      label: '削除',
    );
  }
}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?