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'
),
),
),
),
);
}
}
やってみた感想
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: '削除',
);
}
}