【问题标题】:Flutter - FutureBuilder - SearchFlutter - FutureBuilder - 搜索
【发布时间】:2020-02-17 13:36:19
【问题描述】:

我正在为用户列表使用 FuturBuilder。我让用户通过 futur: fetchpost() 通过 API。在专栏的开头,我实现了一个搜索栏。那么如何实现我的 Searchbar 正在搜索呢?

Container(
        child: FutureBuilder(
          future: fetchPost(),
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            if(snapshot.connectionState == ConnectionState.waiting) {
              return Container(
                child: ...CircularPro..(),
                ),

            } else {
              return Container(
                child: Column(
                  children: <Widget>[
                    Padding(
                      child: TextField(
                        onChanged: (value) {

                        },
                        controller: searchController,
                        decoration: InputDecoration(
                          prefixIcon: Icon(Icons.search),
                        ),

                      ),
                    ),
                    Expanded(
                      child: ListView.builder(
                        itemCount: snapshot.data.length,
                        itemBuilder: (BuildContext context, int index) {
                          return ListTile(  
                            title: Text(
                              "[" + 
                              snapshot.data[index].id + "] " + 
                              snapshot.data[index].firstname + " " +
                              snapshot.data[index].lastname
                            ),
                            subtitle: Text(snapshot.data[index].email),


【问题讨论】:

    标签: flutter


    【解决方案1】:

    您需要在ListView 上获取一些条件变量,然后在搜索栏的提交事件中设置该变量的值,然后在小部件的setState() 上设置。

    String searchString = "";
    
    

    TextField(
                            onChanged: (value) {
                              setState((){
                                 searchString = value; 
                              });
    
                            },
                            controller: searchController,
                            decoration: InputDecoration(
                              prefixIcon: Icon(Icons.search),
                            ),
    
                          ),
    

     ListView.builder(
                            itemCount: snapshot.data.length,
                            itemBuilder: (BuildContext context, int index) {
                              return snapshot.data[index].firstname.contains(searchString)? ListTile(  
                                title: Text(
                                  "[" + 
                                  snapshot.data[index].id + "] " + 
                                  snapshot.data[index].firstname + " " +
                                  snapshot.data[index].lastname
                                ),
                                subtitle: Text(snapshot.data[index].email),
    ...
    
    :Container(),
    

    【讨论】:

    • 但是是否可以用更多的词进行搜索,例如名字、姓氏和是?
    • 是的。在条件中使用 && 操作。
    • 这样:snapshot.data[index].firstname.contains(searchString) &amp;&amp; snapshot.data[index].lastname.contains(searchString)?
    • 是的,就这样。
    • 搜索@VrushiPatel 时显示不必要的空列表
    猜你喜欢
    • 2023-03-04
    • 2018-11-23
    • 1970-01-01
    • 2021-02-06
    • 2021-12-25
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多