问题出在您的
build方法上,尤其是您要做的部分:
new FutureBuilder( future: fetchUser(),
基本上,如果您
build因任何原因再次在何处被呼叫,您将
fetchUser再次呼叫。
为什么要再次调用build? 我从来没有做过setState
setState这不是重建小部件的唯一方法。小部件可以重建的另一种情况是其父级更新(并创建了新的子实例)。
通常,您应该假定
build可以随时调用。因此,您应该在那里做最少的工作。
为了解决这个问题,您应该将自己的
fetchUser未来存储在您的州内。从调用
initState。这将确保
fetchUser在窗口小部件创建时仅调用一次。
class FourthState extends State<Fourth> { Future<SingleUser> userFuture; @override void initState() { userFuture = fetchUser(); super.initState(); } @override Widget build(BuildContext context) { return FutureBuilder( future: userFuture, builder: ... ); }}


