在Flutter中完成“ build”功能时,有没有回调告诉我?

赫萨姆:

我的屏幕上有一个listView。我已经连接了一个控制器。我可以调用我的端点,接收响应,解析它并插入行中。ListView应该自动滚动。确实可以,但是不是完美的方式。我总是落后。这是我的代码:

@override
  Widget build(BuildContext context) {
    // Scroll to the most recent item
    if (equationList.length > 0) {
      _toEnd();
    }

    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: EquList(equationList, _scrollController),
      floatingActionButton: new FloatingActionButton(
        onPressed: onFabClick,
        tooltip: 'Fetch Post',
        child: new Icon(isLoading ? Icons.pause : Icons.play_arrow),
      ),
    );
  }

  void _toEnd() {
    _scrollController.animateTo(
      _scrollController.position.maxScrollExtent,
      duration: const Duration(milliseconds: 250),
      curve: Curves.ease,
    );
  }

问题是,_toEnd()在最后一项插入列表之前,我正在调用函数。因此,我正在寻找一个告诉我build()完成的回调(如果有的话)然后我调用我的_toEnd()函数。

在这种情况下,最佳做法是什么?

creativecreatoror可能不是:

一般解决方案

只是为了澄清问题,我没想到这个问题会引起如此多的关注。因此,我只针对这个非常具体的情况回答。
正如在另一个答案中解释的那样, WidgetsBinding提供了一种添加一次 框架后回调的方法

WidgetsBinding.instance.addPostFrameCallback((_) {
  // executes after build
})

由于此回调仅被调用一次,因此您希望在每次构建时都添加它:

@override
Widget build(BuildContext context) {
  WidgetsBinding.instance.addPostFrameCallback((_) => afterBuild);
  return Container(); // widget tree
}

void afterBuild() {
  // executes after build is done
}

具体(异步)

详细阐述Günter的评论:

@override
Widget build(BuildContext context) {
  executeAfterBuild();
  return Container();
}

Future<void> executeAfterBuild() async {
  // this code will get executed after the build method
  // because of the way async functions are scheduled
}

有一个很好的例子说明这种效果在这里在Dart 中可以找到
有关调度的 广泛信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有功能来测试在js中具有回调的对象实例?

如何告诉我的测试等待goroutine中的回调?

如何在flutter中完成所有以前的异步功能?

有没有一种方法可以模拟C ++中的按键,而没有软件可以告诉我我实际上并没有按键

日志中的 Laravel 错误并没有告诉我我需要修复什么

在 tkinter 中,python 告诉我没有称为粘性的选项。如何解决?

如何删除在Flutter中完成ListView滚动时出现的动画?

Android x86中的GoToMeeting告诉我没有互联网-但是有互联网

为什么我的回调没有在 Tensorflow 中调用?

有没有办法在Google Map回调中包含对象原型方法?

有没有告诉我的程序退出的方法?

有没有功能可以像在Android中那样完成UIviewcontroller?

有没有办法在Phpstorm的自动完成功能中调出方法签名?

有没有办法等到功能完成?

我正在处理代码,但没有提供我想要的结果。你能告诉我如何从 fb live 或 post 中抓取 Facebook 评论文本吗?

Flutter:在提供商槽功能中更新列表时,我的屏幕没有更新

在Task.WhenAll中完成任务时是否有回调

反应在没有箭头功能的回调中访问setState

为什么反应功能组件中的回调没有读取更新的状态值

有没有一种方法可以让ros :: spinOnce()从回调队列中调用特定数量的回调?

谁能告诉我有关Android中的InternalStorage的信息?我很困惑

有人可以告诉我是否可以从我的CLinfo日志中执行OpenCL吗?

在 Flutter 中执行之前等待所有异步函数完成

有没有一种方法可以在Rust中接受多个回调方法?

CSS3动画完成时是否有回调?

有没有一种方法可以缩短我的代码,从而不必编写“ turtle”。每次我使用turtle模块中的功能时?

如何使饼图互动?没有在onChangedListener回调中获取charts_flutter的饼图

有人可以告诉我svg中的<g>和</ g>吗?

谁能告诉我如何使用Selenium Webdiver在Facebook中打印所有朋友列表?