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 引导到我的应用程序中。有没有更干净的方法 这样做吗?
答案 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
小部件包裹。
输出