使用useFuture flutter hook时如何重新加载数据

Sam*_*oui 3 dart flutter flutter-hooks

我使用 Flutter hooks 通过组合 useMemorized 和 useFuture 来获取数据,如下所示:

final _latestDocsFuture =
    useMemoized(() => getLatestDocs());
final _latesetDocsSnapshot = useFuture(_latestDocsFuture);
Run Code Online (Sandbox Code Playgroud)

这个钩子的问题是我无法在发生错误时重新触发 useFuture 来重新获取数据(允许用户点击按钮来尝试再次获取数据)。有没有什么方法可以让我重新触发 useFuture 钩子?

小智 8

useMemoized钩子接受一个键列表,可用于创建 Future 的新实例,这将导致useFuture再次运行。

我建议使用该类UniqueKey来实现此目的

final reloadKey = useState(UniqueKey());
final latestDocsFuture = useMemoized(() => getLatestDocs(), [reloadKey.value],);
final latestDocsSnapshot = useFuture(latestDocsFuture);
Run Code Online (Sandbox Code Playgroud)

然后每当你想重新加载时,你可以更新reloadKey

reloadKey.value = UniqueKey();
Run Code Online (Sandbox Code Playgroud)