for-loop - “where”方法在 'onChange'方法中不起作用

标签 for-loop flutter dart match

我正在尝试根据搜索字段输入值过滤列表内的数据。我正在运行列表中的where方法。由于列表在不同的索引上具有不同的项目,因此我在for循环中运行此代码。

以下是列表中第一项的示例;

print(pageData[0].person);

// ###### OUTPUT ######

Person(id: 2, name: james, nickname: , role: guest, phone: , email: , physical_address: s, created: 2020-02-18 09:12:56.000, updated: 2020-02-18 09:12:56.000)

下面,我尝试使用where方法查找匹配项,但我遇到了非匹配项。

Widget _buildSearchField() {
    return new TextField(
      controller: new TextEditingController(),
      autofocus: true,
      decoration: const InputDecoration(
        hintText: 'Search...',
        border: InputBorder.none,
        hintStyle: const TextStyle(color: Colors.white30),
      ),
      style: const TextStyle(color: Colors.white, fontSize: 16.0),
      onChanged: (val) {
        var i;
        var results = [];

        for (i = 0; i < pageData.length; i++) {
          print('in pageData for loop');
          var matches = pageData[i].where((data) =>
              (data.person.name.toLowerCase().contains('james') ||
                  data.person.nickname.toLowerCase().contains('james')));

/// Code below is not executing

          if (matches != null) {
            print('matches found');
            results.add(matches);
          }
          if (i == pageData.length) {
            setState(() {
              searchResults = results;
            });
          }
        }
      },
    );
  }

我该如何解决?我做错了什么?

谢谢,贴着爱。

最佳答案

我认为您不需要for循环和where语句。
尝试这样的事情:

Widget _buildSearchField() {
return new TextField(
  controller: new TextEditingController(),
  autofocus: true,
  decoration: const InputDecoration(
    hintText: 'Search...',
    border: InputBorder.none,
    hintStyle: const TextStyle(color: Colors.white30),
  ),
  style: const TextStyle(color: Colors.white, fontSize: 16.0),
  onChanged: (val) {
    var i;
    var results = [];

      results = pageData.where((data) =>
       data.person.name.toLowerCase().contains('james') ||
              data.person.nickname.toLowerCase().contains('james');


      );

      setState(() {
        searchResults = results;
      });
    }
  }
);
}

关于for-loop - “where”方法在 'onChange'方法中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60276432/

相关文章:

java - 制作任何东西的通用参数化类型

python - 通过 tkinter 使用 for 循环创建按钮时遇到问题。 (Python)

android - 在 WKWebView/UIWebView 中启用 WebRTC 支持

flutter - 此函数的返回类型为 'String' ,但不以 return 语句结束

regex - 正则表达式匹配忽略“\”的字符串

linux - 如何在 shell 脚本中引用历史行?

php - 使用 PHPExcel 通过 getWorksheetIterator() 在工作表中循环时识别工作表索引

canvas - Flutter - Canvas 绘制 Z 顺序

java - com.deliveryrunner.vendor.MainActivity 无法转换为 android.app.Application

ios - 如何滚动库比蒂诺选取器自动 flutter ?