未来的构建者-需要先构建上下文

时间:2019-12-03 17:03:02

标签: flutter dart future builder

我的addSteps函数需要访问上下文。我有一个存储库对象,存储在这里。

 Future<int> _addSteps() async {
     repository = RepositoryProvider.of<lo.Repository>(context);
     ...
 }

将来的_addStepsFuture是在didChangeDependencies中创建的。

didChangeDependencies() {
     addStepsFuture = _addSteps();
}

尽管稍后会在Build调用中获取上下文。

FutureBuilder<int>(
          future: _addStepsFuture,
)

在调用BuildContext之前,Build不可用。

有没有办法解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:1)

由于您的context调用只是在后台使用RepositoryProvider.of,因此您可以在didChangeDependencies中访问inheritFromWidgetOfExactType

但是除非您出于其他原因使用didChangeDependencies生命周期挂钩,否则还可以尝试:

class Foo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final repository = RepositoryProvider.of<lo.Repository>(context);

    return FutureBuilder(
      future: _addSteps(repository),
      builder: (context, snapshot) {
        return Placeholder();
      },
    );
  }

  Future _addSteps(lo.Repository repository) async {
    /* ... */
  }
}

class Foo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _addSteps(context),
      builder: (context, snapshot) {
        return Placeholder();
      },
    );
  }

  Future _addSteps(BuildContext context) async {
    final repository = RepositoryProvider.of<lo.Repository>(context);
    /* ... */
  }
}

让我知道我是否误解了问题