包括材料小部件而不从脚手架或

时间:2021-04-27 06:55:44

标签: flutter

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(home: TextSubmitToProvider()));
}

class TextSubmitToProvider extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return IconButton(
        icon: const Icon(Icons.multitrack_audio_rounded),
        onPressed: () {
          print("hello");
        });
  }
}

对于上面的代码,我得到了错误:

<块引用>

IconButton 小部件需要一个 Material 小部件祖先。 ...(解释为什么 我需要上面树中的材质小部件...)

好的。我知道为什么我的小部件树中需要有一个材料祖先, 但让我困惑的是错误消息的下一部分 说:

<块引用>

"要引入一个 Material 小部件,您可以直接包含一个, 或使用包含 Material 本身的小部件,例如 Card、Dialog、Drawer、 或脚手架。”

让我失望的部分是“或”部分 这似乎意味着我有两个选择:

(1) 直接包含一个材质小部件。

(2) 包含一个包含材料本身的小部件。

我得到的第二个选项(这是我目前在我的应用程序中所做的),但是 我不明白的是第一个选项。

直接包含一个材质小部件是什么意思?我最初解释 这意味着我可以直接从 MaterialApp() 继承,但我不认为这是 正确的解释,因为在这个例子中我是从 MaterialApp() 继承的。

所以我的问题是:“直接包含一个 Material Widget”是什么意思?

我知道所有答案都说只是从 Scaffold 继承,但这似乎有点 不必要,因为我实际上并没有使用任何与脚手架小部件有关的东西。 我只是用它来将 Material 引导到我的应用程序中。有没有更干净的方法 这样做吗?

1 个答案:

答案 0 :(得分:2)

第一季度: 你可以用材质Widget包裹Icon(直接包含一个材质Widget)

class TextSubmitToProvider extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Material(
      child: IconButton(
          icon: const Icon(Icons.multitrack_audio_rounded),
          onPressed: () {
            print("hello");
          }),
    );
  }
}

问题:2 包含一个包含材料本身的小部件意味着您可以使用包含 Material()

的卡片、脚手架等

如果您打开卡片 (card.dart) 的 dart 文件,您可以看到容器被一个 Material 小部件包裹。

输出

enter image description here