【问题标题】:How do I call a function immediately after Initialization in Flutter?如何在 Flutter 中初始化后立即调用函数?
【发布时间】:2022-01-15 23:11:10
【问题描述】:

在 Flutter 中,如何在立即调用另一个函数之前等待屏幕的初始化?

对于进一步的上下文,当我按下按钮时,我会打开一个对话框,其中包含来自相机包的相机预览,其中一个容器框堆叠在相机预览的顶部以充当“取景器”。然后我想从 rect_getter 包中调用 RectGetter 函数来定位容器框屏幕上的坐标,但是我需要等待先构建 CameraPreview 和容器框。

下面是我调用的相机对话框,需要在调用RectGetter函数之前构建:

cameraDialog() async {
    await showDialog(
      barrierDismissible: false,
      context: context,
      builder: (_) => AlertDialog(
        insetPadding: EdgeInsets.all(5.0),
        contentPadding: EdgeInsets.all(3.0),
        content: FutureBuilder<void>(
          future: _initializeControllerFuture,
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              return Stack(
                children: [

               cameraPrevew and containers etc...

我知道这篇文章: How to run code after some delay in Flutter?

所有这些解决方案都只是调用一个延迟计时器,我认为它会起作用,但是我正在寻找一个更动态的解决方案。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你可以使用

    https://github.com/slightfoot/flutter_after_layout

    在布局完成后仅执行一次功能。或者只是查看它的实现并将其添加到您的代码中:-)

    基本上是这样的

      void initState() {
        super.initState();
        WidgetsBinding.instance
            .addPostFrameCallback((_) => yourFunction(context));
      }
    

    【讨论】:

    • 谢谢!这确实允许我在初始化屏幕后打开我的 cameraDialog。但是,在调用 getRect 函数来定位对象在 cameraDialog 屏幕上的位置之前,我无法等待初始化 cameraDialog。所以在我的 initState() 中,我调用了 WidgetsBinding.instance! .addPostFrameCallback(() => initCameraDialog(context));这会打开 cameraDialog 很好......然后...... initCameraDialog(context) async { cameraDialog(context); WidgetsBinding.instance!.addPostFrameCallback(() => getRect(context)); } 这调用了一个空值
    【解决方案2】:

    我认为您正在寻找的是同时调用两个函数,而不是等待其中一个完成然后启动另一个。如果这是您想要的,则需要在调用或初始化这两个函数时删除 async 和 await。就像在代码 sn-p 中一样,您需要在前两行中删除 async 和 await。

    您共享的代码 sn-p 包含的关于何时何地调用这两个函数以及如何调用它们的信息相对较少......!

    【讨论】:

    • 如我的问题所述:“当我按下按钮时,我会打开一个包含相机预览的对话框”......其中......“我需要在调用 RectGetter 函数之前构建”首先打开并构建对话框,然后调用一个函数来定位对象在对话框屏幕上的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多