Flutter - 允许用户输入主题标签
Flutter - allow user enter hashtags
你好 Flutter 新手!我想让我的用户输入一些链接到条目的主题标签,这些标签将进入 Firestore。
对于主题标签,我将其设置为列表,但我不确定如何让用户创建主题标签?
基本上类似于 SO 中的标签字段的问题。
在 Firestore 上,我已将字段设置为数组以接收数据。
我找不到很多关于在 flutter 上创建主题标签的文档。
任何帮助,将不胜感激!! :) 提前致谢!
由于我使用 dartpad 创建了这个,所以我使用 ListView 来获取建议。
您可以替换为您自己的建议视图,例如 AutoCompleteTextView 或其他...
List<String> list = ['Java', 'Flutter', 'Kotlin', 'Swift', 'Objective-C'],
selected = [];
TextEditingController tc;
@override
void initState() {
super.initState();
tc = TextEditingController();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text('Search Tags'),
backgroundColor: Colors.green[800],
),
body: Column(
// mainAxisSize:MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: tc,
decoration: InputDecoration(
border: OutlineInputBorder(),
contentPadding: EdgeInsets.fromLTRB(20, 0, 20, 0),
prefixIcon: selected.length < 1
? null
: Padding(
padding: const EdgeInsets.only(left:10, right:10),
child: Wrap(
spacing: 5,
runSpacing: 5,
children: selected.map((s) {
return Chip(
backgroundColor: Colors.blue[100],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(7),
),
label: Text(s,
style:
TextStyle(color: Colors.blue[900])),
onDeleted: () {
setState(() {
selected.remove(s);
});
});
}).toList()),
))),
),
SizedBox(height: 20),
ListView.builder(
shrinkWrap: true,
itemCount: list.length,
itemBuilder: (c, i) {
return list[i].toLowerCase().contains(tc.text.toLowerCase())
? ListTile(
title: Text(list[i],
style: TextStyle(color: Colors.blue[900])),
onTap: () {
setState(() {
if (!selected.contains(list[i]))
selected.add(list[i]);
});
})
: null;
})
]),
);
}
你好 Flutter 新手!我想让我的用户输入一些链接到条目的主题标签,这些标签将进入 Firestore。
对于主题标签,我将其设置为列表,但我不确定如何让用户创建主题标签?
基本上类似于 SO 中的标签字段的问题。
我找不到很多关于在 flutter 上创建主题标签的文档。 任何帮助,将不胜感激!! :) 提前致谢!
由于我使用 dartpad 创建了这个,所以我使用 ListView 来获取建议。 您可以替换为您自己的建议视图,例如 AutoCompleteTextView 或其他...
List<String> list = ['Java', 'Flutter', 'Kotlin', 'Swift', 'Objective-C'],
selected = [];
TextEditingController tc;
@override
void initState() {
super.initState();
tc = TextEditingController();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text('Search Tags'),
backgroundColor: Colors.green[800],
),
body: Column(
// mainAxisSize:MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: tc,
decoration: InputDecoration(
border: OutlineInputBorder(),
contentPadding: EdgeInsets.fromLTRB(20, 0, 20, 0),
prefixIcon: selected.length < 1
? null
: Padding(
padding: const EdgeInsets.only(left:10, right:10),
child: Wrap(
spacing: 5,
runSpacing: 5,
children: selected.map((s) {
return Chip(
backgroundColor: Colors.blue[100],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(7),
),
label: Text(s,
style:
TextStyle(color: Colors.blue[900])),
onDeleted: () {
setState(() {
selected.remove(s);
});
});
}).toList()),
))),
),
SizedBox(height: 20),
ListView.builder(
shrinkWrap: true,
itemCount: list.length,
itemBuilder: (c, i) {
return list[i].toLowerCase().contains(tc.text.toLowerCase())
? ListTile(
title: Text(list[i],
style: TextStyle(color: Colors.blue[900])),
onTap: () {
setState(() {
if (!selected.contains(list[i]))
selected.add(list[i]);
});
})
: null;
})
]),
);
}