在数据库中搜索-Sqlite Flutter

时间:2020-10-17 15:41:35

标签: database sqlite flutter dart

我错过了代码中的某些内容,我在移动应用程序中使用了现有的数据库(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),
                          ),
                        ),
                      )
                    ],
                  );
                }
              ),
          ),
        ],
      ),

2 个答案:

答案 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();
  });
}