Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 实现对字符串列表的搜索_String_Flutter_Dart - Fatal编程技术网

String 实现对字符串列表的搜索

String 实现对字符串列表的搜索,string,flutter,dart,String,Flutter,Dart,我正在实现一个字符串列表上的搜索,而搜索并不是我想要的,所以如果有人可以帮助我的话 这是我使用的代码: onSearchTextChanged(String text) { searchResults1.clear(); searchResults2.clear(); if (text.isEmpty) { setState(() {}); return; } final textToLowerCase = text.toLo

我正在实现一个字符串列表上的搜索,而搜索并不是我想要的,所以如果有人可以帮助我的话

这是我使用的代码:

onSearchTextChanged(String text) {
    searchResults1.clear();
    searchResults2.clear();

    if (text.isEmpty) {
      setState(() {});
      return;
    }
    final textToLowerCase = text.toLowerCase();

    this.widget.songs.forEach((s) {
      if (s.title.toLowerCase().contains(textToLowerCase))
        searchResults2.add(s);
    });

    this.widget.artists.forEach((a) {
      if (a.name.toLowerCase().contains(textToLowerCase)) searchResults1.add(a);
    });
    setState(() {});
  }
但是它给了我奇怪的结果,如果我只搜索一个单词,它将什么也找不到,但是列表中至少有15个带有该单词的字符串。
感谢您的帮助,如果需要我提供什么,请告诉我。

如果您想规范化搜索(在您的示例中使用小写),您需要规范化搜索词和搜索字符串:

s.title.toLowerCase().contains(text.toLowerCase())
理想情况下,你会这样做一次

然后使用:

除此之外,您的方法不是
async
,您应该在设置完状态后只调用一次
setState
。因此,您的方法应该如下所示:

onSearchTextChanged(String text) {
    searchResults1.clear();
    searchResults2.clear();

    if (text.isEmpty) {
      setState(() {});
      return;
    }

    final textToLowerCase = text.toLowerCase();

    this.widget.songs.forEach((s) {
      if (s.title.toLowerCase().contains(textToLowerCase)) searchResults2.add(s);
    });

    this.widget.artists.forEach((a) {
      if (a.name.toLowerCase().contains(textToLowerCase)) searchResults1.add(a);
    });

    setState(() {});
  }

问题是在SilverList中,我给出了错误的“childCount:searchResults1.length”,正确的方法是“childCount:searchResults2.length”。。感谢所有试图帮助我的人。

我编辑了我的问题,当我搜索我时,你可以看到我得到了什么,但如果我写“mer”,它将找不到任何东西,有什么想法吗?你已经合并了我建议的更改吗?是的,你可以看到问题被编辑好了,那么你必须调试它。从问题中的应用程序截图,看起来它工作得很好。我看不出有什么问题。它是什么?当我说搜索“仅仅”它应该显示4首歌曲。但是它没有显示任何内容,所以我认为问题在于contains()…但是在屏幕截图中,它正确地显示了歌曲列表。你已经输入了“我”并且包含“我”的所有歌曲标题都在下面的列表中。但是如果我写“mer”,它将不会显示任何内容,并且我无法理解为什么。奇怪。您在哪里调用了此方法?在
TextField
onChanged
回调中,对吗?哈哈,一个小的打字错误,我们正在寻找代码中的错误:Dyeah,但是谢谢你的帮助:D
final textToLowerCase = text.toLowerCase();
s.title.toLowerCase().contains(textToLowerCase)
onSearchTextChanged(String text) {
    searchResults1.clear();
    searchResults2.clear();

    if (text.isEmpty) {
      setState(() {});
      return;
    }

    final textToLowerCase = text.toLowerCase();

    this.widget.songs.forEach((s) {
      if (s.title.toLowerCase().contains(textToLowerCase)) searchResults2.add(s);
    });

    this.widget.artists.forEach((a) {
      if (a.name.toLowerCase().contains(textToLowerCase)) searchResults1.add(a);
    });

    setState(() {});
  }