【Flutter】 인기 패키지 사용법 ~ flutter_slidable 편 ~
머리
2020년 들어가고 나서 Flutter의 공부를 처음으로 왔습니다.
앞으로 여러가지 패키지를 더 공부해 나가고 싶기 때문에, 인기있는 것을 아웃풋으로서 기사로 해 나가고 싶습니다.
이번에는 url_launcher라는 패키지를 소개합니다.
지금까지 올린 기사
- shared_preferences 소개
- url_launcher 소개
- flutter_slidable ← 지금 이것
flutter_slidable
flutter_slidable은
ListTile
에 사용되는 Widget입니다.ListTile
옆으로 슬라이드할 수 있습니다.슬라이드하면 아이콘, 타이틀 문자, 색, 눌렀을 때의 거동을 설정할 수 있습니다.
샘플
간단한 TODO 목록을 만들었습니다.
이번에는 Firestore는 사용하지 않지만 사용한 경우에도 응용할 수 있도록 모델 클래스도 만들었습니다.
import 'package:flutter/material.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
final toDoList = [
{"title": "買い物にいく"},
{"title": "犬の散歩"},
{"title": "明日の準備"},
{"title": "家族に電話する"},
];
class SampleSlidable extends StatefulWidget {
@override
State<StatefulWidget> createState() => SampleSlidableState();
}
class SampleSlidableState extends State<SampleSlidable> {
final itemController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('flutter_slidable'),
),
body: ListView(
children: toDoList.map((data) => _buildItem(context, data)).toList(),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
formForNewItem(context);
},
),
);
}
Widget _buildItem(BuildContext context, Map data) {
Item toDoItem = Item.fromMap(data);
//Slidableはここから
return Slidable(
actionExtentRatio: 0.2,
actionPane: SlidableScrollActionPane(),
// 左側に表示するWidget
actions: <Widget>[
IconSlideAction(
caption: '重要',
color: Colors.yellow,
icon: Icons.star,
onTap: () {},
),
IconSlideAction(
caption: '共有',
color: Colors.blue,
icon: Icons.share,
onTap: () {},
),
],
// 右側に表示するWidget
secondaryActions: [
IconSlideAction(
caption: '削除',
color: Colors.red,
icon: Icons.remove,
onTap: () {
toDoList.remove(data);
setState(() {});
},
),
],
// 一つ一つのアイテム
child: Container(
padding: EdgeInsets.only(left: 20),
decoration: BoxDecoration(
border: Border(bottom: BorderSide(width: 1.0, color: Colors.grey))),
child: ListTile(
leading: Icon(Icons.chevron_right),
title: Text(toDoItem.title),
),
),
);
}
// アイテムを追加するダイアログ
formForNewItem(BuildContext context) {
showDialog(
context: context,
builder: (_) {
return SimpleDialog(
title: Text('新しく追加する'),
children: [
Container(
padding: EdgeInsets.all(20),
child: TextFormField(
controller: itemController,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FlatButton(
child: Text('キャンセル'),
onPressed: () {
Navigator.of(context).pop();
},
),
FlatButton(
child: Text('OK'),
onPressed: () {
toDoList.add({"title": itemController.text});
Navigator.of(context).pop();
itemController.clear();
setState(() {});
},
)
],
)
],
);
},
);
}
}
// アイテムクラス
class Item {
String title;
bool star;
Item({this.title, this.star});
Item.fromMap(Map<String, dynamic> mapData) {
this.title = mapData["title"];
this.star = mapData["star"];
}
}
설명
설명은
Slidable
입니다. 다른 코드는 간단하기 때문에 읽고 이해하고 싶습니다. .actionExtentRatio
: 슬라이드시에 표시하는 Widget의 크기 지정 actionPane
: 슬라이드 시켰을 때의 애니메이션(4종류이므로 나중에 상세 설명) actions
: 왼쪽에 표시하는 Widget. IconSlideAction
사용 secondaryActions
: 오른쪽에 표시하는 Widget. IconSlideAction
사용 최소한 이것을 사용할 수 있으면 괜찮을 것 같다.
actions
및 secondaryActions
에 사용 IconSlideAction
- caption
: 타이틀 문자-
color
: Widget의 색-
icon
: 아이콘-
onTap
: 탭했을 때의 거동를 설정할 수 있습니다.
이번은 삭제만 탭했을 때의 거동을 제대로 작성했습니다.
IconSlideAction(
caption: '削除',
color: Colors.red,
icon: Icons.remove,
onTap: () {
toDoList.remove(data);
setState(() {});
},
),
이제 삭제할 수 있습니다.
다음은
actionPane
에 대해 설명합니다.공식 문서 쪽이 알기 쉬울지도 모릅니다만, Gif도 실어 둡니다.
SlidableBehindActionPane()
ListTile
뒤에 Widget이 숨겨진 것처럼 나타납니다.그러나 이것은
ListTile
의 문자가 겹쳐서 보이기 때문에 나는 별로 좋아하지 않습니다.(나의 지식, 기술 부족으로 이렇게 되어 있을지도 모르지만)
SlidableScrollActionPane
ListTile
옆에 Widget이 표시됩니다. 따라서, 단지 슬라이드시키고 있는 것 같은 애니메이션이군요.SlidableDrawerActionPane
ListTile
옆에서 서랍처럼 표시됩니다.SlidableStrechActionPane
ListTile
옆에서 위젯이 늘어나도록 표시됩니다.나는
SlidableScrollActionPane
를 가장 좋아합니다.그리고 이 패키지는 슬라이드시켜
Slidable
를 표시하고 있는 상태로 세로로 스크롤 하면(자), 자동으로 Slidable
를 닫아 주는 것도 편리하고 좋네요~~떠오르는 용도
ListTile을 사용하는 곳에서 사용할 수 있습니다.
패키지 소스 코드를 읽어 본 소감
Slidable 클래스는 애니메이션이나 많이 사용하고, 아직 순조롭게는 읽을 수 없다
IconSlideAction 클래스는 상당히 간단하고 Flexible 사용하고 있다고 생각했습니다.
그리고, 속성이 다른 무엇이 있는지 알 수 있는 기회가 되었습니다.
iconWidget
라고 말하는 것도 있고,
icon
iconWidget
caption
순서가 표시되었습니다. 텍스트는 caption으로 충분하고 특히 사용할 기회는 별로 없을 것 같다.패키지의 소스 코드 제대로 본 것은 처음이었습니다만, 대단히 복잡해서 아직 아직 이해할 수 없다.
Reference
이 문제에 관하여(【Flutter】 인기 패키지 사용법 ~ flutter_slidable 편 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryota47/items/6ed90ce011ea6aaa8698텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)