有没有办法在InitState方法上加载异步数据?

我正在寻找一种在InitState方法上加载异步数据的方法,在build方法运行之前,我需要一些数据。我正在使用GoogleAuth代码,并且需要执行构建方法,直到Stream运行为止。

我的initState方法是:

 @override

void initState () {

super.initState();

_googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {

setState(() {

_currentUser = account;

});

});

_googleSignIn.signInSilently();

}

我将不胜感激任何反馈。

回答:

您可以使用 的数据更改时,这将运行 方法。 *

下面是我的一个示例项目的代码片段:

StreamBuilder<List<Content>> _getContentsList(BuildContext context) {

final BlocProvider blocProvider = BlocProvider.of(context);

int page = 1;

return StreamBuilder<List<Content>>(

stream: blocProvider.contentBloc.contents,

initialData: [],

builder: (context, snapshot) {

if (snapshot.data.isNotEmpty) {

return ListView.builder(itemBuilder: (context, index) {

if (index < snapshot.data.length) {

return ContentBox(content: snapshot.data.elementAt(index));

} else if (index / 5 == page) {

page++;

blocProvider.contentBloc.index.add(index);

}

});

} else {

return Center(

child: CircularProgressIndicator(),

);

}

});

}

在上面的代码中, 侦听内容的任何更改,最初是一个空数组,并显示

。一旦我进行API调用,提取的数据将添加到contents数组,该数组将运行

方法。

当用户向下滚动时,将提取更多内容并将其添加到内容数组,该数组将再次运行 方法。

在您的情况下,仅需要初始加载。但这为您提供了一个选项,可以在屏幕上显示其他内容,直到获取数据为止。

希望这会有所帮助。

在您的情况下,我猜它看起来将如下所示:

StreamBuilder<List<Content>>(

stream: account, // stream data to listen for change

builder: (context, snapshot) {

if(account != null) {

return _googleSignIn.signInSilently();

} else {

// show loader or animation

}

});

以上是 有没有办法在InitState方法上加载异步数据? 的全部内容, 来源链接: utcz.com/qa/404443.html

回到顶部