flutter - Flutter Autocomplete 小部件延迟更新建议
问题描述
我在使用自动完成小部件时遇到问题。基本上,当我在文本字段中输入时显示的选项列表会延迟一个字符。
例如,假设有一组数据,如 [“Apple”、“Banana”、“Orange”]。如果文本字段最初为空并且我开始输入字母“A”,则没有任何反应。然后我输入例如字母“k”,这样就不应该与数据匹配,但小部件在选项列表中显示“Apple”。然后假设我删除了最后一个字母“k”,因此只有“A”并且应该与单词“Apple”匹配,但小部件不显示任何内容。等等。
Autocomplete<Song>(
optionsBuilder: (_) => state.searchResults,
fieldViewBuilder: (context, controller, focusNode, onFieldSubmitted) {
return TextField(
controller: controller,
focusNode: focusNode,
onChanged: (value) {
context.read(searchProvider.notifier).inputChanged(value);
},
);
},
optionsViewBuilder: (context, onSelected, options) {
return Align(
alignment: Alignment.topLeft,
child: Material(
child: SizedBox(
height: 100.0,
child: ListView(
padding: EdgeInsets.all(kDefaultPadding / 3),
itemExtent: 40.0,
children: options
.map(
(song) => SuggestionEntry(song: song),
)
.toList(),
),
),
),
);
},
)
我使用 Riverpod 作为状态管理器,但这不应该是问题,因为我在页面的其他部分也使用了相同的 StateNotifier,这些部分已正确更新。另外,请注意,存储在 StateNotifier 中的建议列表正确地基于当前输入,因此问题似乎出在 Autocomplete 小部件的“渲染”期间。
示例:https ://drive.google.com/file/d/17FZuxgDoHhOR2ceAUsOtADZZe23BU0m1/view?usp=sharing
解决方案
optionsBuilder
之前被调用fieldViewBuilder.onChange
。所以删除部分
onChanged: (value) {
context.read(searchProvider.notifier).inputChanged(value);
},
并将定义移动到内部,optionsBuilder
如:
optionsBuilder: (TextEditingValue value) {
await context.read(searchProvider.notifier).inputChanged(value);
return ...;
},
推荐阅读
- css - 如何防止在 dir="RTL" 上反转 CSS Flex / Grid 布局
- typescript - switchMap 操作符不执行返回的 observable
- python - 带有 test/ 和 src/ 的 Python unittest 没有找到 src 模块
- excel - 如何根据参考表中的数据,根据表中的多个查找值找到我需要的代码
- python - 如何在代码中表示组合电路
- file - ASP.NET 文件验证
- javascript - discord.js 跟踪更大列表的邀请
- javascript - 我的矩形的位置错误 - javascript
- html - 关于 Discord 和爬虫中的 Open Graph 协议的问题
- spring - 出于测试目的,如何使用 SearchHits.getHits() (elasticsearch) 返回 SearchHits?