在 Flutter 中使用 for 循环创建嵌套小部件

Posted

技术标签:

【中文标题】在 Flutter 中使用 for 循环创建嵌套小部件【英文标题】:Using for loop to create nested widget in Flutter 【发布时间】:2020-10-17 15:44:19 【问题描述】:

您好,我是 Flutter 的新手,在创建旋转动画时遇到了 Flutter 的多嵌套代码问题。由于它非常重复,我正在尝试使用 for 循环使其更短,但现在没有运气。还尝试使用nested library 但不起作用。有人知道怎么做吗?提前谢谢你。

Widget _rotateAnimationWidget(BuildContext context, Widget child) 
  return SizedBox(
    height: 200,
    width: 200,
    child: Transform.rotate(
      angle: 10 * math.pi / 180,
      child: Transform.rotate(
        angle: 20 * math.pi / 180,
        child: Transform.rotate(
          angle: 10 * math.pi / 180,
          child: Transform.rotate(
            angle: -30 * math.pi / 180,
            child: Transform.rotate(
              angle: 0 * math.pi / 180,
              child: Transform.rotate(
                angle: 20 * math.pi / 180,
                child: Transform.rotate(
                  angle: -30 * math.pi / 180,
                  child: Transform.rotate(
                    angle: 40 * math.pi / 180,
                    child: Transform.rotate(
                      angle: 10 * math.pi / 180,
                      child: Transform.rotate(
                        angle: 10 * math.pi / 180,
                        child: Transform.rotate(
                            angle: 30 * math.pi / 180,
                            child: child),
                      ),
                    ),
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    ),
  );

【问题讨论】:

您想通过这种嵌套转换实现什么目标?只是为了确定,因为嵌套它们实际上不会为孩子设置动画 【参考方案1】:

好吧,我不知道你想要实现什么,但你可以试试下面的代码。如果您检查 Flutter Inspector,您将看到嵌套的 Transform。但对我来说,模拟器中没有显示任何内容。

更新: 抱歉,正在显示我在子旋转时传递的容器。我忘记了 SizedBox。但不是动画。

Widget _rotateAnimationWidget(BuildContext context, Widget child) 
    List<int> angleList = [10, 20, 10, -30, 0, 20, -30, 40, 10, 10, 30];
    Widget transform;
    int i = 0;

    do 
      transform = Transform.rotate(
          angle: angleList[i] * math.pi / 180, child: transform);
      i++;
     while (i < angleList.length - 1);

    transform =
        Transform.rotate(angle: angleList.last * math.pi / 180, child: child);

    return SizedBox(height: 200, width: 200, child: transform);
    

【讨论】:

非常感谢!我无法提出child: transform 的部分。我很感激。 没关系。但是出于好奇,您如何将其与动画一起使用? 抱歉缺少解释。我将在一段时间内以特定角度来回旋转图像。角度值将被替换为稍后实施的正确值。 酷!很高兴知道以这种方式链接动画是可能的。 =)【参考方案2】:

我不确定您是否真的想要实现这一目标。 Transform.rotate 在没有任何动画的情况下转动您的子小部件。 我想你想要一个来回旋转的动画?

看看RotationTransition。该网站上还有一个颤振徽标的示例动画,这与您尝试做的非常接近。

要获得一些可以开始使用的代码,请查看How to rotate an image using Flutter AnimationController and Transform?

【讨论】:

以上是关于在 Flutter 中使用 for 循环创建嵌套小部件的主要内容,如果未能解决你的问题,请参考以下文章

使用 terraform 在 for_each 嵌套资源中循环

小程序for循环嵌套

微信小程序——template的循环嵌套

嵌套多个“for”循环

提高嵌套 for 循环速度 R 创建邻接矩阵

嵌套 for 循环的 Pandas 在创建的不同数据帧上插入多个数据