【发布时间】:2020-12-28 18:47:31
【问题描述】:
一切正常,但 ListView 没有在 onChanged 上更新。虽然我使用的是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> {
@override
Widget build(BuildContext context) {
final checkcarpools = Provider.of<List<CarpoolDataShow>>(context) ?? [];
final availablecarpools =
checkcarpools.where((element) => element.seats > 0).toList() ?? [];
List filteredcarpools =
checkcarpools.where((element) => element.seats > 0 ).toList() ?? [];
return Scaffold(
body: Column(
children: [
Expanded(
child: TextField(
decoration: InputDecoration(hintText: 'Search..'),
onChanged: (text) {
setState(() {
filteredcarpools = availablecarpools
.where((element) => element.pickupaddress
.toLowerCase()
.contains(text.toLowerCase()))
.toList();
});
},
)),
Expanded(
flex: 10,
child: ListView.builder(
itemCount: filteredcarpools.length,
itemBuilder: (context, index) {
return User_AvailableCarpools_TILE(filteredcarpools[index]);
},
),
),
],
),
);
}
}
【问题讨论】:
-
Provider.of
- >(context) .method() ?方法调用丢失
-
你的意思是在
onChanged回调中调用setState()后没有调用build方法吗? -
是的 pskink,在 setState() 之后没有被调用
-
我假设您添加了两个
prints:一个在setState内,第二个在build方法内,您只看到第一个?如果是这样,我认为你在颤振中发现了一个严重的错误 -
不,问题是通过使用 SetState 我的屏幕没有更新过滤列表。简单来说,listviewbuilder 不会用 SetState 刷新到更新的列表
标签: flutter listview dart search