我错过了代码中的某些内容,我在移动应用程序中使用了现有的数据库(sqlite),并且我想向其中添加搜索栏,一切正常,但是在模拟器中的结果如下:>
{content:name1}
{content:name2}
{content:name3}
我只想要名字, 谢谢您的帮助!
这是我的代码:
String text;
List course;
void _query (text) async {
Database db = await DatabaseHelper.instance.database;
List<Map> result = await db.rawQuery("SELECT content FROM table WHERE content LIKE '%${text}%'");
setState(() {
result.forEach((element) {
print(element);
course = result;
});
});
}
body:Column(
children: [
Padding(
padding: const EdgeInsets.all(10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.search,
color: Colors.grey,
),
SizedBox(
width: 20,
),
Container(
width: MediaQuery.of(context).size.width - 100.0,
child: TextField(
decoration: InputDecoration(
hintText: search ... ,
),
onChanged: (String text) async {
_query(text);
},
),
),
],
),
),
Expanded(
child: ListView.builder(
padding: const EdgeInsets.all(14.0),
itemBuilder: (context, index) {
return Column(
children: [
Divider(
height: 20,
),
Material(
color: Colors.grey,
child: ListTile(
title: Text(
course == null
? 'loading'
: '${course[index]}',
style: TextStyle(
color: Colors.black),
),
),
)
],
);
}
),
),
],
),
答案 0 :(得分:1)
您可以尝试
result.forEach((element) {
print(element);
print(element['content']);
course = result;
});
答案 1 :(得分:1)
您可以使用[]
运算符访问Map
的元素。您可以使用List
的{{3}}函数将显示的列表修改为仅实际名称。
void _query (text) async {
Database db = await DatabaseHelper.instance.database;
List<Map> result = await db.rawQuery("SELECT content FROM table WHERE content LIKE '%${text}%'");
setState(() {
course = result.map<String>((element) {
return element['content'];
}).toList();
});
}