v1.2.0
combos
Flutter 的組合元件。包含 Combo、AwaitCombo、ListCombo、SelectorCombo、TypeaheadCombo、MenuItemCombo
21喜歡 55近 30 天下載40Pub 分數
平台暫無資料
Flutter 的組合小部件
{"sdk":"flutter"}^1.8.0以下為英文專案原文快照,最新內容請造訪 GitHub。
Combo widgets for Flutter.
alt text
Includes:
Combo(
child: const Padding(
padding: EdgeInsets.all(16),
child: Text('Combo child'),
),
popupBuilder: (context, mirrored) => const Material(
elevation: 4,
child: Padding(
padding:
EdgeInsets.symmetric(vertical: 48, horizontal: 16),
child: Center(child: Text('Combo popup')),
),
),
)
AwaitCombo(
child: const Padding(
padding: EdgeInsets.all(16),
child: Text('Combo child'),
),
popupBuilder: (context) async {
await Future.delayed(const Duration(milliseconds: 500));
return const Material(
elevation: 4,
child: Padding(
padding:
EdgeInsets.symmetric(vertical: 48, horizontal: 16),
child: Center(child: Text('Combo popup')),
),
);
},
)
ListCombo<String>(
child: const Padding(
padding: EdgeInsets.all(16),
child: Text('Combo child'),
),
getList: () async {
await Future.delayed(const Duration(milliseconds: 500));
return ['Item1', 'Item2', 'Item3'];
},
itemBuilder: (context, parameters, item) => ListTile(title: Text(item)),
onItemTapped: (item) {},
)
String _item;
...
SizedBox(
width: 200,
child: SelectorCombo<String>(
selected: _item,
getList: () async {
await Future.delayed(const Duration(milliseconds: 500));
return ['Item1', 'Item2', 'Item3'];
},
itemBuilder: (context, parameters, item) =>
ListTile(title: Text(item ?? '<Empty>')),
onItemTapped: (item) => setState(() => _item = item),
),
)
String _item;
...
SizedBox(
width: 200,
child: TypeaheadCombo<String>(
selected: _item,
getList: (text) async {
await Future.delayed(const Duration(milliseconds: 500));
return ['Item1', 'Item2', 'Item3'];
},
itemBuilder: (context, parameters, item) =>
ListTile(title: Text(item ?? '<Empty>')),
onItemTapped: (item) => setState(() => _item = item),
getItemText: (item) => item,
decoration: const InputDecoration(labelText: 'Typeahead'),
),
)
MenuItemCombo<String>(
item: MenuItem(
'File',
() => [
MenuItem('New'),
MenuItem.separator,
MenuItem('Open'),
MenuItem('Save'),
MenuItem('Save As...'),
MenuItem.separator,
MenuItem(
'Recent',
() => [
MenuItem('Folders', () async {
await Future.delayed(
Duration(milliseconds: 500));
return [
MenuItem('Folder 1'),
MenuItem('Folder 2'),
MenuItem('Folder 3'),
];
}),
MenuItem('Files', () async {
await Future.delayed(
Duration(milliseconds: 500));
return [
MenuItem('File 1'),
MenuItem('File 2'),
MenuItem('File 3'),
];
}),
]),
MenuItem.separator,
MenuItem('Exit'),
]),
itemBuilder: (context, parameters, item) => Padding(
padding: const EdgeInsets.all(16),
child: Text(item.item),
),
onItemTapped: (value) {
final dialog =
AlertDialog(content: Text('${value.item} tapped!'));
showDialog(context: context, builder: (_) => dialog);
},
)