在上一步中,我们创建了一个 ImageRow 来显示一排图片,作为构建应用程序图片网格的一部分。
回顾一下,我们的图片网格结构如下:
ImageItem 中。ImageItem 横向排列在一个 ImageRow 中。ImageRow 纵向排列在一个 ImageGrid 中。在这一步中,我们将把多个 ImageRow 组合到一个 ImageGrid 中,以显示一个图片网格。ImageGrid 的代码与我们为 ImageRow 编写的代码非常相似,因此我们不会详细讲解。
注意:如果你不想手动输入代码,可以在这里找到本步骤的全部代码:https://github.com/makepad/image_viewer/tree/main/step_5
在这一步中,你将学习:
ImageGrid让我们开始添加 ImageGrid 的定义。ImageGrid 负责垂直排列多个 ImageRow。
在 app.rs 中,添加以下代码到 live design 块中,位于 ImageRow 定义之后:
与 ImageRow 一样,在 ImageGrid 中,我们使用 PortalList 来列出其行。唯一的区别是我们使用了 flow: Down,这确保其子项从上到下排列。
App现在我们已经有了一个 ImageGrid,让我们更新 App 的定义,使其显示 ImageGrid 而不是 ImageRow。
在 app.rs 中,将 live design 块中的 App 定义替换为下面这个新的定义:
将下面的代码添加到 app.rs:
这段代码定义了 ImageGrid 结构体,并为其实现了 Widget trait。这段代码和我们之前为 ImageRow 结构体编写的代码非常相似,所以我们不会详细讲解。唯一的区别是,我们不是绘制 4 个 ImageItem,而是绘制了 3 个 ImageRow。
让我们检查一下目前的进展。
确保你在你的包目录下,然后运行:
如果一切正常,屏幕上应该会出现一个包含占位图像网格的窗口:

在这一步中,我们创建了一个 ImageGrid 来显示图像网格。
我们现在已经有了一个图像网格的初始实现。虽然它仍然非常有限 —— 总是显示相同数量的行和每行相同数量的图像,而且只显示占位图像,但这已经是一个不错的开始!
在接下来的几步中,我们将去除这些限制,让图像网格变得更加动态。