返回

Flutter上手之路(八):搜索功能

IOS

8天让iOS开发者上手Flutter系列,致力于用最简便的方式帮助iOS开发者快速上手Flutter。在上一篇文章中,我们完成了首页聊天页面的导航条和列表展示,今天,我们将一起完成搜索cell的展示和点击之后的搜索页面的功能。

自定义SearchCell

创建search_cell.dart文件

import 'package:flutter/material.dart';

class SearchCell extends StatelessWidget {
  final String title;
  final String subtitle;

  SearchCell({this.title, this.subtitle});

  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text(title),
      subtitle: Text(subtitle),
    );
  }
}

在search_cell.dart文件中,我们定义了一个SearchCell类,这是一个无状态的Flutter小部件。它接收两个字符串参数:title和subtitle。小部件的build方法返回一个ListTile,其中包含标题和小标题文本。

SearchCell用法

现在,我们可以使用SearchCell来填充搜索列表。在search_page.dart文件中,将以下代码添加到_buildBody方法中:

ListView.builder(
  itemCount: _searchResults.length,
  itemBuilder: (BuildContext context, int index) {
    return SearchCell(
      title: _searchResults[index].title,
      subtitle: _searchResults[index].subtitle,
    );
  },
);

此代码创建一个ListView,其中包含_searchResults列表中的项目数目。每个项目都显示一个SearchCell,其中包含标题和小标题文本。

搜索功能

现在,我们可以添加搜索功能了。在search_page.dart文件中,将以下代码添加到_buildAppBar方法中:

TextField(
  decoration: InputDecoration(
    hintText: 'Search',
  ),
  onChanged: (value) {
    _search(value);
  },
);

此代码创建一个文本字段,用户可以在其中输入搜索查询。当用户更改文本字段中的文本时,_search()方法将被调用。

在search_page.dart文件中,添加以下方法:

void _search(String value) {
  setState(() {
    _searchResults = _data.where((item) {
      return item.title.toLowerCase().contains(value.toLowerCase());
    }).toList();
  });
}

此方法接收一个字符串参数value,它是用户在文本字段中输入的搜索查询。该方法使用where()方法过滤_data列表,仅选择包含搜索查询的项目。然后,它将过滤后的列表分配给_searchResults变量。

现在,我们已经完成了搜索功能。用户可以输入搜索查询,然后搜索结果将显示在列表中。

总结

在这篇文章中,我们完成了搜索cell的展示和点击之后的搜索页面的功能。我们还添加了搜索功能,允许用户搜索聊天记录。

8天让iOS开发者上手Flutter系列即将结束,希望大家能够通过这个系列,快速上手Flutter。