zoukankan      html  css  js  c++  java
  • Flutter: SearchDelegate 委托showSearch定义搜索页面的内容

    class _MyHomeState extends State<MyHome> {
      List<String> _list = List.generate(100, (i) => 'item $i');
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Flutter Search'),
            actions: <Widget>[
              Builder(
                builder: (context) {
                  return IconButton(
                    icon: Icon(Icons.search),
                    onPressed: () async {
                      String r = await showSearch<String>(
                        context: context,
                        delegate: ListSearchPage(_list),
                      );
                      Scaffold.of(context).showSnackBar(
                        SnackBar(
                          content: Text(r),
                          action: SnackBarAction(
                            label: 'CLOSE',
                            onPressed: () {
    
                            },
                          ),
                        ),
                      );
                    },
                  );
                },
              )
            ],
          ),
          body: ListView(
            children: <Widget>[
              for (var el in _list)
                ListTile(
                  title: Text(el),
                ),
            ],
          ),
        );
      }
    }
    
    class ListSearchPage extends SearchDelegate<String> {
      List<String> list;
      String select;
    
      ListSearchPage(this.list);
    
      @override
      appBarTheme(BuildContext context) {
        return Theme.of(context);
      }
    
      @override
      List<Widget> buildActions(BuildContext context) {
        return [
          IconButton(
            icon: Icon(Icons.close),
            onPressed: () {
              query = '';
            },
          ),
        ];
      }
    
      @override
      Widget buildLeading(BuildContext context) {
        return IconButton(
          icon: Icon(Icons.arrow_back),
          onPressed: () {
            close(context, '');
          },
        );
      }
    
      /// 用户从搜索页面提交搜索后显示的结果
      @override
      Widget buildResults(BuildContext context) {
        var filterList = list.where((String s) => s.contains(query.trim()));
        return ListView(
          children: <Widget>[
            for (String item in filterList)
              ListTile(
                leading: Icon(
                  Icons.message,
                  color: Colors.blue,
                ),
                title: Text(
                  item,
                  style: Theme.of(context).textTheme.title,
                ),
                onTap: () {
                  close(context, item);
                },
              ),
          ],
        );
      }
    
      /// 当用户在搜索字段中键入查询时,在搜索页面正文中显示的建议
      @override
      Widget buildSuggestions(BuildContext context) {
        var filterList = list.where((String s) => s.contains(query.trim()));
        return ListView(
          children: <Widget>[
            for (String item in filterList)
              ListTile(
                leading: Icon(Icons.message),
                title: Text(
                  item,
                  style: Theme.of(context).textTheme.title,
                ),
                onTap: () {
                  close(context, item);
                },
              ),
          ],
        );
      }
    }
    
  • 相关阅读:
    linux上TCP connection timeout的原因查找
    AC-BM算法原理与代码实现(模式匹配)
    URPF技术白皮书
    漫谈协同过滤推荐算法
    自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用
    推荐系统的常用算法,选择,漫谈,推荐系统开源软件汇总
    MySQL索引原理及慢查询优化
    深入详解SQL中的Null
    《Gulp 入门指南》 : 使用 gulp 压缩 JS
    Process Explorer
  • 原文地址:https://www.cnblogs.com/ajanuw/p/10952909.html
Copyright © 2011-2022 走看看