Flutter - FutureBuilder 在热重载时触发两次

Rya*_*s01 4 future dart flutter flutter-futurebuilder

在我的颤动项目中,当我在模拟器中启动项目时,一切正常,未来的构建器仅触发一次,但是当我进行热重载时,FutureBuilder 会触发两次,这会导致错误,知道如何解决这个问题吗?

  Future frameFuture()  async {
    var future1 = await AuthService.getUserDataFromFirestore();
    var future2 = await GeoService.getPosition();
    return [future1, future2];
  }

  @override
  void initState() {
    user = FirebaseAuth.instance.currentUser!;
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: frameFuture(),
        builder: (context, snap) {
          if (snap.connectionState == ConnectionState.done && snap.hasData) return HomePage();
          else return Container(
            color: Colors.black,
            child: Center(
              child: spinKit,
            ),
          );
        }
    );
  }
Run Code Online (Sandbox Code Playgroud)

Rya*_*s01 6

我解决了这个问题。我将Future函数放在 中initState,然后使用 中的变量FutureBuilder。我不确定为什么会这样,但代码如下:

  var futures;

  Future frameFuture()  async {
    var future1 = await AuthService.getUserDataFromFirestore();
    var future2 = await GeoService.getPosition();
    return [future1, future2];
  }

  @override
  void initState() {
    user = FirebaseAuth.instance.currentUser!;
    super.initState();
    futures = frameFuture();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: futures,
        builder: (context, snap) {
          if (snap.connectionState == ConnectionState.done && snap.hasData) return HomePage();
          else return Container(
            color: Colors.black,
            child: Center(
              child: spinKit,
            ),
          );
        }
    );
  }
Run Code Online (Sandbox Code Playgroud)