Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:Listview在搜索时未更新_Flutter_Listview_Dart_Search - Fatal编程技术网

Flutter 颤振:Listview在搜索时未更新

Flutter 颤振:Listview在搜索时未更新,flutter,listview,dart,search,Flutter,Listview,Dart,Search,一切正常,但ListView不会在onChanged上更新。虽然我使用的是setstate,但它仍然没有过滤数据。注意(列表在打印时正在被过滤。唯一的问题是屏幕没有更新) 导入“包装:颤振/材料.省道”; 导入“包:provider/provider.dart”; 导入“套餐:一起旅行”乘客/车型/用户.dart; 导入“套餐:一起旅行\u乘客/屏幕/用户\u可用\u拼车\u瓷砖.dart”; 类用户可用Corpools列表扩展StatefulWidget{ @凌驾 _用户\u Availabl

一切正常,但ListView不会在onChanged上更新。虽然我使用的是setstate,但它仍然没有过滤数据。注意(列表在打印时正在被过滤。唯一的问题是屏幕没有更新)

导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“套餐:一起旅行”乘客/车型/用户.dart;
导入“套餐:一起旅行\u乘客/屏幕/用户\u可用\u拼车\u瓷砖.dart”;
类用户可用Corpools列表扩展StatefulWidget{
@凌驾
_用户\u AvailableCarools\u LISTState createState()=>
_用户可用的客户端列表状态();
}
类(用户)(可用工具)(列表状态)
扩展状态{
@凌驾
小部件构建(构建上下文){
最终检查拼车=提供商(上下文)??[];
最终可用成本=
选中拼车。其中((元素)=>element.seats>0)。toList()??[];
列出FilteredCarpool=
选中拼车。其中((元素)=>element.seats>0)。toList()??[];
返回脚手架(
正文:专栏(
儿童:[
扩大(
孩子:TextField(
装饰:输入装饰(hintText:“搜索…”),
一旦更改:(文本){
设置状态(){
filteredcarpools=可用的Carpools
.其中((元素)=>element.pickupaddress
.toLowerCase()
.contains(text.toLowerCase())
.toList();
});
},
)),
扩大(
弹性:10,
子项:ListView.builder(
itemCount:filteredcarpools.length,
itemBuilder:(上下文,索引){
返回用户可用的Corpools(filteredcarpools[索引]);
},
),
),
],
),
);
}
}

以下代码正在运行。非常感谢pskink给了我这个提示


import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:travel_together_passenger/Models/user.dart';
import 'package:travel_together_passenger/Screens/User_Available_Carpools_TILE.dart';

class User_AvailableCarpools_LIST extends StatefulWidget {

  @override
  _User_AvailableCarpools_LISTState createState() => _User_AvailableCarpools_LISTState();
}

class _User_AvailableCarpools_LISTState extends State<User_AvailableCarpools_LIST> {
  String txt = '';
  @override
  Widget build(BuildContext context) {

    final checkcarpools = Provider.of<List<CarpoolDataShow>>(context) ?? [];
    final availablecarpools =
        checkcarpools.where((element) => element.seats > 0).toList() ?? [];
    List filteredcarpools =
    availablecarpools.where((element) => element.pickupaddress.toLowerCase().contains(txt.toLowerCase())).toList() ?? [];
    return Scaffold(
      body: Column(
        children: [
          Expanded(
            child: TextField(
              decoration: InputDecoration(
                  hintText: 'search..'
              ),
              onChanged: (text)
              {
                setState(() {
                  txt=text;
                });
                print(filteredcarpools);
              },

            ),
          ),
          Expanded(
            flex: 10,
            child: ListView.builder(
              //shrinkWrap: true,
              key: UniqueKey(),
              itemCount: filteredcarpools.length,
              itemBuilder: (context, index) {
 //               print(filteredcarpools);
                return User_AvailableCarpools_TILE(filteredcarpools[index]);
              },
            ),
          ),
        ],
      ),
    );
  }
}

进口“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“套餐:一起旅行”乘客/车型/用户.dart;
导入“套餐:一起旅行\u乘客/屏幕/用户\u可用\u拼车\u瓷砖.dart”;
类用户可用Corpools列表扩展StatefulWidget{
@凌驾
_用户\u AvailableCarools\u LISTState createState()=>\u用户\u AvailableCarools\u LISTState();
}
类(用户)(可用工具)列表状态(扩展状态){
字符串txt='';
@凌驾
小部件构建(构建上下文){
最终检查拼车=提供商(上下文)??[];
最终可用成本=
选中拼车。其中((元素)=>element.seats>0)。toList()??[];
列出FilteredCarpool=
AvailableCarools.where((element)=>element.pickupaddress.toLowerCase().contains(txt.toLowerCase()).toList()??[];
返回脚手架(
正文:专栏(
儿童:[
扩大(
孩子:TextField(
装饰:输入装饰(
hintText:“搜索…”
),
一旦更改:(文本)
{
设置状态(){
txt=文本;
});
打印(filteredcarpools);
},
),
),
扩大(
弹性:10,
子项:ListView.builder(
//收缩膜:对,
键:UniqueKey(),
itemCount:filteredcarpools.length,
itemBuilder:(上下文,索引){
//打印(filteredcarpools);
返回用户可用的Corpools(filteredcarpools[索引]);
},
),
),
],
),
);
}
}

Provider.of(context.method()?方法调用丢失您的意思是在调用
setState()
内部
onChanged
回调后没有调用
build
方法吗?是的,在setState()之后没有调用它我假设您添加了两个
print
s:一个在
setState
内,第二个在
build
内,您只看到第一个?如果你在flifter中发现了一个严重的bug,那么我想不,问题是使用SetState时,我的屏幕没有使用过滤列表进行更新。简单地说,listviewbuilder不会使用SetState刷新更新后的列表

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:travel_together_passenger/Models/user.dart';
import 'package:travel_together_passenger/Screens/User_Available_Carpools_TILE.dart';

class User_AvailableCarpools_LIST extends StatefulWidget {

  @override
  _User_AvailableCarpools_LISTState createState() => _User_AvailableCarpools_LISTState();
}

class _User_AvailableCarpools_LISTState extends State<User_AvailableCarpools_LIST> {
  String txt = '';
  @override
  Widget build(BuildContext context) {

    final checkcarpools = Provider.of<List<CarpoolDataShow>>(context) ?? [];
    final availablecarpools =
        checkcarpools.where((element) => element.seats > 0).toList() ?? [];
    List filteredcarpools =
    availablecarpools.where((element) => element.pickupaddress.toLowerCase().contains(txt.toLowerCase())).toList() ?? [];
    return Scaffold(
      body: Column(
        children: [
          Expanded(
            child: TextField(
              decoration: InputDecoration(
                  hintText: 'search..'
              ),
              onChanged: (text)
              {
                setState(() {
                  txt=text;
                });
                print(filteredcarpools);
              },

            ),
          ),
          Expanded(
            flex: 10,
            child: ListView.builder(
              //shrinkWrap: true,
              key: UniqueKey(),
              itemCount: filteredcarpools.length,
              itemBuilder: (context, index) {
 //               print(filteredcarpools);
                return User_AvailableCarpools_TILE(filteredcarpools[index]);
              },
            ),
          ),
        ],
      ),
    );
  }
}