Listview 搜索栏获取文本但不过滤列表

Listview 搜索栏获取文本但不过滤列表,listview,flutter,dart,Listview,Flutter,Dart,如标题所述,我有一个要筛选的Listview。我查阅了无数的示例和代码片段,但我仍然不知道该放在哪里 列表=列表。其中((u)=>(u.name.toLowerCase()。包含(_searchText.toLowerCase()) .toList()); 以过滤列表。 我假设我必须在构建列表的方式中更改某些内容。 Textfield已经可以正常工作了,\u searchText始终是Textfield所说的内容 我的代码: import 'dart:developer'; import 'p

如标题所述,我有一个要筛选的Listview。我查阅了无数的示例和代码片段,但我仍然不知道该放在哪里

列表=列表。其中((u)=>(u.name.toLowerCase()。包含(_searchText.toLowerCase())
.toList());
以过滤列表。 我假设我必须在构建列表的方式中更改某些内容。 Textfield已经可以正常工作了,
\u searchText
始终是Textfield所说的内容

我的代码:

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter_ac/collectible/collectible_details.dart';
import 'package:flutter_ac/nooklets/nook_scaffold.dart';
import 'package:flutter_ac/nooklets/nook_search.dart';
import 'package:flutter_ac/nooklets/nook_sheet.dart';
import 'package:flutter_ac/settings.dart';
import 'package:provider/provider.dart';

import 'collectible.dart';

final TextEditingController _filter = new TextEditingController();

class CollectibleList<C extends Collectible> extends StatefulWidget {
  final List<C> collectibles;
  final String title;


  CollectibleList(
    this.collectibles,
    {
      this.title,
    }

  );

  @override
  State<StatefulWidget> createState() => _CollectibleList<C>();
}

class _CollectibleList<C extends Collectible> extends State<CollectibleList<C>> {
  Widget _appBarTitle;
  bool _isSearching;
  String _searchText = "";
  List _collectibles = new List(); 
  List _filteredCollectibles = new List(); 
  Icon _searchIcon = new Icon(Icons.search); 
  final key = new GlobalKey<ScaffoldState>();
  var list;

  _CollectibleList(){
      _filter.addListener(() {

      if (_filter.text.isEmpty) {

        setState(() {

          _searchText = "";
          _isSearching = false;
         list = list.where((u)=>(u.name.toLowerCase().contains(_searchText.toLowerCase())
            .toList()));

        });

      } else {

        setState(() {

          _searchText = _filter.text;

          log(_searchText);

        });

      }

    });
  }
  void _openDetails(Collectible collectible) {
    var locale = Localizations.localeOf(context);

    log("Opening collectible details for ${collectible.name(locale)}");

    Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => CollectibleDetails(collectible)),
    );

  }

  @protected
  @override
  void initState() {
    _appBarTitle = new Text(widget.title ?? "");
    super.initState();
      _isSearching = false;
  }

  @override
  Widget build(BuildContext context) {
    var locale = Localizations.localeOf(context);
    var collectibles = widget.collectibles ?? [];

    var list = ListView.separated(
      separatorBuilder: (context, index) => Divider(
        height: 1,
        thickness: 1,
      ),
      itemCount: collectibles.length,
      itemBuilder: (context, index) {
        Collectible collectible = collectibles[index];

        return Consumer<Settings>(
          builder: (context, settings, child) {
            var titleStyle = !collectible.isObtained(settings) ?
              null :
              TextStyle(
                color: Colors.lightGreen,
              );

            return Material(
              color: Colors.transparent,
              child: ListTile(
                leading: Hero(
                  tag: collectible.heroTag,
                  child: Container(
                    child: Image(image: collectible.icon),
                    width: 50,
                    height: 50,
                    alignment: Alignment.center,
                  ),
                ),
                title: Text("${collectible.name(locale)}", style: titleStyle),
                subtitle: collectible.listSubtitle(context),
                trailing: collectible.listTrailing(context),
                onTap: () => _openDetails(collectible),
                onLongPress: () {
                  var isObtained = collectible.isObtained(settings);
                  collectible.setObtained(settings, !isObtained);
                },
              ),
            );
          },
        );
      }
    );

    return Scaffold(
      appBar: AppBar(
        title: _appBarTitle,
        centerTitle: true,
        backgroundColor: Color.fromRGBO(95, 199, 188, 1.0),
        actions: <Widget>[
          IconButton(
            icon: _searchIcon,
            onPressed: () {
              log("Searchbutton pressed");
              _searchPressed();
              //showSearch(context: context, delegate: Datasearch());
              }
          ),
          IconButton(
            icon: const Icon(Icons.filter_list)
          )
        ],
      ),
      body: NookScaffold(
        body: NookSheet(
            child: 
              Column(children:<Widget>[
                DropdownButton(onChanged: (String newValue) {
                  setState(() {
                    String dropdownValue = newValue;
                  });       
                }
                ),

                Expanded(child: list)
              ],),
          ),
        titleMargin: 0,
      )
    );
  }


  void _searchPressed() {
    setState(() 
      {
        if (this._searchIcon.icon == Icons.search) {
          this._searchIcon = new Icon(Icons.close);
          this._appBarTitle = new TextField(
            controller: _filter,
            decoration: new InputDecoration(
              prefixIcon: new Icon(Icons.search),
              hintText: 'Search...',
            ),

          );
          _handleSearchStart();
        } else {
          this._searchIcon = new Icon(Icons.search);
          this._appBarTitle = new Text(widget.title ?? "");
          _filteredCollectibles = _collectibles;
          _filter.clear();
        }
      }
    );
  }

    void _handleSearchStart(ListView list) {
    setState(() {
      _isSearching = true;
    });
  }
  List<ChildItem> _buildList() {
    return list.map((contact) => new ChildItem(contact)).toList();
  }

  List<ChildItem> _buildSearchList() {
    if (_searchText.isEmpty) {
      return list.map((contact) => new ChildItem(contact))
          .toList();
    }
    else {
      List<String> _searchList = List();
      for (int i = 0; i < list.length; i++) {
        String  name = list.elementAt(i);
        if (name.toLowerCase().contains(_searchText.toLowerCase())) {
          _searchList.add(name);
        }
      }
      return _searchList.map((contact) => new ChildItem(contact))
          .toList();
    }
  }


  }

  class ChildItem extends StatelessWidget {
    final String name;
    ChildItem(this.name);
    @override
    Widget build(BuildContext context) {
      return new ListTile(title: new Text(this.name));
    }


}

导入“dart:developer”;
进口“包装:颤振/材料.省道”;
进口“包装:颤振/可收藏/可收藏详细信息.省道”;
进口“包装:Flatter_ac/nooklets/nook_scaffold.dart”;
导入“package:flatter_ac/nooklets/nook_search.dart”;
进口“包装:颤振ac/nooklets/Nooku sheet.dart”;
导入“package:flatter_ac/settings.dart”;
导入“包:provider/provider.dart”;
进口“收藏品.飞镖”;
最终文本编辑控制器_filter=新文本编辑控制器();
类CollectibleList扩展StatefulWidget{
收藏品最终清单;
最后的字符串标题;
收藏家(
这是收藏品,
{
这个名字,
}
);
@凌驾
State createState()=>\u CollectibleList();
}
类集合列表扩展了状态{
Widget_appBarTitle;
布尔乌正在研究;
字符串_searchText=“”;
列表_collectibles=新列表();
列表_filteredCollectibles=新列表();
图标_searchIcon=新图标(Icons.search);
final key=new GlobalKey();
var列表;
_收藏家(){
_filter.addListener((){
if(_filter.text.isEmpty){
设置状态(){
_searchText=“”;
_isSearching=假;
列表=列表。其中((u)=>(u.name.toLowerCase()。包含(_searchText.toLowerCase())
.toList());
});
}否则{
设置状态(){
_searchText=\u filter.text;
日志(_searchText);
});
}
});
}
void _openDetails(可收藏){
var locale=Localizations.localeOf(上下文);
日志(“打开${collectable.name(locale)}的可收藏详细信息”);
导航器。推(
上下文
MaterialPage路线(生成器:(上下文)=>CollectibledDetails(collectible)),
);
}
@保护
@凌驾
void initState(){
_appBarTitle=新文本(widget.title??);
super.initState();
_isSearching=假;
}
@凌驾
小部件构建(构建上下文){
var locale=Localizations.localeOf(上下文);
var collectibles=widget.collectibles???[];
var list=ListView.separated(
separatorBuilder:(上下文,索引)=>分隔符(
身高:1,,
厚度:1,
),
itemCount:收藏品。长度,
itemBuilder:(上下文,索引){
收藏品收藏品=收藏品[索引];
退货消费者(
生成器:(上下文、设置、子对象){
var titleStyle=!可收藏。已保存(设置)?
无效的:
文本样式(
颜色:颜色。浅绿色,
);
退货(
颜色:颜色。透明,
孩子:ListTile(
主角:英雄(
标签:collectible.heroTag,
子:容器(
子:图像(图像:collectible.icon),
宽度:50,
身高:50,
对齐:对齐.center,
),
),
标题:文本(${collectible.name(locale)}),样式:titleStyle,
副标题:可收藏。列表副标题(上下文),
trailing:collectible.listTrailing(上下文),
onTap:()=>\u openDetails(可收藏),
onLongPress:(){
var isObtained=可收集。isObtained(设置);
可收集。已获得设置(设置,!已获得);
},
),
);
},
);
}
);
返回脚手架(
appBar:appBar(
标题:_appBarTitle,
标题:对,
背景颜色:颜色。来自RGBO(951991881.0),
行动:[
图标按钮(
图标:_searchIcon,
已按下:(){
日志(“按下搜索按钮”);
_searchPressed();
//showSearch(上下文:context,委托:Datasearch());
}
),
图标按钮(
图标:常量图标(图标.过滤器列表)
)
],
),
正文:NookScaffold(
正文:活页(
儿童:
栏(儿童:[
下拉按钮(onChanged:(字符串newValue){
设置状态(){
字符串dropdownValue=newValue;
});       
}
),
扩展(子:列表)
],),
),
titleMargin:0,
)
);
}
作废(){
设置状态()
{
if(this.\u searchIcon.icon==Icons.search){
此图标为新图标(Icons.close);
这是一个新的文本字段(
控制器:_过滤器,
装饰:新的输入装饰(
前缀:新图标(Icons.search),
hintText:“搜索…”,
),
);
_handleSearchStart();
}否则{
此.\u searchIcon=新图标(Icons.search);
这个._appBarTitle=新文本(widget.title??);
_过滤收藏品=_收藏品;
_filter.clear();
}
}
);
}
void\u handleSearchStart(列表视图列表){
设置状态(){
_isSearching=true;
});
}
列表_buildList(){
return list.map((contact)=>new ChildItem(contact)).toList();
}
列表_buildSearchList(){
if(_searchText.isEmpty){
返回列表.map((联系人)=>new ChildItem(联系人))
.toList();
}
否则{
列表\u searchLi
class Bloc{
  final _textFieldController = StreamController<String>();

  //Use this to get data out of the stream
  Stream<String> get enteredCharacter => _textFieldController.stream;

  //returns functions to change data
  Function(String) get addText => _textFieldController.sink.add;

  dispose() {
    _textFieldController.close();
  }
}
//Here we are using a single instance of the bloc class, Which you can access from anywhere.
final bloc = Bloc();
var enteredCharacter = "";
bloc.enteredCharacter.listen((data) {
  print("This is the character entered by the user: $data");
  enteredCharacter = data;
  _filterData(); //This function will filter your data based on the characters that the user hits.
});