NoSuchMethodError:在 null 上调用了方法“markNeedsBuild”

Ray*_* Li 4 flutter

一个NoSuchMethodError: The method 'markNeedsBuild' was called on null.出现在错误日志错误。我从来没有在调试中看到过这个错误,用户也没有报告任何问题。为什么会发生此错误,我可以做些什么来防止它发生?

Ray*_* Li 7

'NoSuchMethodError: The method 'markNeedsBuild' was called on null.'是由setState()在处理小部件后调用引起的。

最常见的是,当异步网络操作完成并尝试更新小部件但小部件已经被释放时,就会发生这种情况。

例子:

await networkProvider.getData().then((value) {
    // Update data.
    setState(() {
        data = value;
    });
});
Run Code Online (Sandbox Code Playgroud)

为避免在处理后更新小部件,请在调用 之前检查以确保小部件仍然存在setState。这是上面示例的更新版本,可以防止NoSuchMethodError.

await networkProvider.getData().then((value) {
    // Check if widget still exists.
    if (mounted) {
        // Update data.
        setState(() {
            data = value;
        });
    }
});
Run Code Online (Sandbox Code Playgroud)