flutter - 如何使用 Getx 在已生成的 ListView.builder 中搜索项目
问题描述
目前,我正在显示查询和数据库收到的项目列表。如何使用搜索栏重建 ListView.builder。我只使用 StatelessWidget 因为我正在尝试学习 getX 包。我的 SearchBar 将如何链接到项目列表?
鉴于在搜索栏中我需要加入 onChanged 属性
PS:对不起我的英语,太糟糕了)
我的构建器代码:
Widget build(BuildContext context) {
return GetX<ProductController>(
init: ProductController(),
builder: (controller) {
return FutureBuilder<List<ProductsCombined>>(
future: controller.productList.value,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
physics: NeverScrollableScrollPhysics(),
itemCount: snapshot.data.length,
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) =>
ProductCards(
index: index,
snapshot: snapshot,
),
);
} else {
return Center(child: CircularProgressIndicator());
}
},
);
},
);
}
我的控制器代码:
class ProductController extends GetxController {
final productList = Future.value(<ProductsCombined>[]).obs;
@override
void onInit() {
fetchProducts();
super.onInit();
}
Future<List<ProductsCombined>> callDb() async {
return await DBHelper.db.getProducts();
}
void fetchProducts() async {
productList.value = callDb();
}
}
编辑:我试图这样做,但没有成功
更改了控制器代码:
class ProductController extends GetxController {
final productList = Future.value(<ProductsCombined>[]).obs;
Rx<Future <List<ProductsCombined>>> filterProduct = Future.value(<ProductsCombined>[]).obs;//Переписать productList в копию и везде указывать уже копию
Future<void> searchChanged(String value) async{
if(value != null && value.isNotEmpty){
List<ProductsCombined> s = await productList.value;
filterProduct = Future.value(s.where((element) => (element.productName.toLowerCase().contains(value.toLowerCase()))).toList()).obs;
}
filterProduct = productList;
}
@override
void onInit() {
fetchProducts();
filterProduct = productList;
super.onInit();
}
Future<List<ProductsCombined>> callDb() async {
return await DBHelper.db.getProducts();
}
void fetchProducts() async {
productList.value = callDb();
}
}
在 TextField 中调用方法:
TextField(
onChanged: (string) {
controller.searchChanged(string);
}
同样在 FutureBuilder 中,我更改了 controller.filterProduct.value 上的 controller.ProductList.value
解决方案
推荐阅读
- r - R:将 Tibbles 转换为术语文档矩阵
- c++ - 一个函数的“错误:隐式函数声明”,但另一个函数在同一个头文件中
- sqlite - "sqlite3" 控制语句的执行流程
- android-studio - Kotlin,Android Studio.Tab 得到一个变量
- javascript - 获取引导进度条 aria-valuenow 值并使用 JavaScript 对其进行修改
- mongoose - featherjs mongodb文档计数查询
- pyusb - ubuntu 上的 Pyusb 无法设置 dev.read 函数的大 size_of_buffer
- python - 使用 udp 的 python 客户端游戏崩溃和滞后
- c++ - 如何在 C++ 中创建单进程互斥锁?
- jquery - 如何使柏树操作可选?