FutureBuilder下面,使用ListViewfindRequirement基于ListView的项目。这个FutureBuilder放在Build方法里面。但是办公室文件说:“将来一定要早一些,例如在State.initStateState.didUpdateConfigState.didChangeDependencies期间。”
问题是每次滚动调用findRequirement api时,现在listView缓慢/滞后。

 ListView.builder(
     ...
     itemCount:value.length,
     itemBuilder: (BuildContext context, int index) {
     ...
     FutureBuilder<List<RequirementModel>>(
          future: db.findRequirement(
                 userId, value[index].subCategoryId),
          builder: (context, snapshot) {
                 if (snapshot.hasData) {
                       //widget
                 } else
                       return Container();
    })

最佳答案

您可以这样做:

// inside state class
class _MyAppState extends State<MyApp> {
  Future _getRequirments;

  @override
  void initState() {
    super.initState();
    _getRequirments = db.findRequirement(
                 userId, value[index].subCategoryId);
  }


 // change your FutureBuilder to this
  FutureBuilder<List<RequirementModel>>(
          future: _getRequirments,
          builder: (context, snapshot) {
                 if (snapshot.hasData) {
                       //widget
                 } else
                       return Container();
这样,它将不会继续反复调用您的方法,因为您只能获得一次在initState()内部的 future ,并且FutureBuilder future:具有该状态并且不会调用db.findRequirement(userId, value[index].subCategoryId);对于每个版本。

关于flutter - 在这种情况下,有什么方法可以在initState中使用FutureBuilder(future)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63097593/

10-11 14:56