dart Riverpod,如何将不同的值传递给数据库

fnatzsnv  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(114)

我试图构建一个搜索栏,每次搜索栏的值改变时,我都想将值传递给数据库函数,该函数根据搜索栏的值搜索数据库。问题是当我使用FutureProvider.family时,我可以传递一个参数,当在onChanged中调用ref.refresh(searchResultsProvider(query))时,ref.watch(searchResultsProvider(''))可以触发小部件的重建,但它不工作,它只有重建小部件,如果相同的字符串参数传递给提供者,但我想传递不同的字符串参数,每次onChanged被调用。

提供商

final searchResultsProvider = FutureProvider.autoDispose
    .family<List<Map<String, dynamic>>, String>((ref, value) async {
  final data = await dbGetSearchResults(value);

  return data;
});

.观看

Widget build(BuildContext context) {
    final searchResults = ref.watch(searchResultsProvider(''));

onChanged

TextField(onChanged: (value) {
                    ref.refresh(searchResultsProvider(value));
                  },
6l7fqoea

6l7fqoea1#

尝试添加另一个提供程序,它将负责文本框的状态:

final textFieldValue = StateProvider((_) => '');

在widget中,你可以这样做:

Widget build(BuildContext context) {
  final fieldValue = ref.watch(textFieldValue);
  final searchResults = ref.watch(searchResultsProvider(fieldValue));

  ...
  TextField(
    onChanged: (value) {
      ref.read(textFieldValue.notifier).update((_) => value);
    },

每次textFieldValue提供程序的值更改时,都会执行带有新参数的searchResultsProvider(fieldValue)查询。

相关问题