Flutter / Dart基本知识

时间:2019-03-15 00:22:51

标签: dart flutter

很抱歉打扰您这个问题。但是我试图重新进入 编程,但我无法获得以下内容(来自flutter的代码示例)

class MyAppBar extends StatelessWidget {
  MyAppBar({this.title});

  // Fields in a Widget subclass are always marked "final".

  final Widget title;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 56.0, // in logical pixels
      padding: const EdgeInsets.symmetric(horizontal: 8.0),
      decoration: BoxDecoration(color: Colors.blue[500]),
      // Row is a horizontal, linear layout.
      child: Row(
        // <Widget> is the type of items in the list.
        children: <Widget>[
          IconButton(
            icon: Icon(Icons.menu),
            tooltip: 'Navigation menu',
            onPressed: null, // null disables the button
          ),
          // Expanded expands its child to fill the available space.
          Expanded(
            child: title,
          ),
          IconButton(
            icon: Icon(Icons.search),
            tooltip: 'Search',
            onPressed: null,
          ),
        ],
      ),
    );
  }
}

class MyScaffold extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Material is a conceptual piece of paper on which the UI appears.
    return Material(
      // Column is a vertical, linear layout.
      child: Column(
        children: <Widget>[
          MyAppBar(
            title: Text(
              'Example title',
              style: Theme.of(context).primaryTextTheme.title,
            ),
          ),
          Expanded(
            child: Center(
              child: Text('Hello, world!'),
            ),
          ),
        ],
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    title: 'My app', // used by the OS task switcher
    home: MyScaffold(),
  ));
}

所以我脑子里有几个问题,有些答案我只是不知道它们是否正确。因此,我可以帮助我并纠正我,这将是很好。

  1. MyAppBar类的开头

    MyAppBar类扩展了StatelessWidget {   MyAppBar({this.title});

    // Widget子类中的字段始终标记为“最终”。

    最终小部件标题;

为什么这是必需的?我们是否“告诉”每次传递此小部件一个标题(标题为小部件)的情况?

  1. 从MyScaffold调用同一Widget的背后的逻辑是什么(我知道,逻辑是您可以更改标题等)。 就像我们用另一个Column Widget构建Widget,然后将MyAppBar传递给Column Widget一样吗? 如果是,那么小部件如何知道,对MyAppBar-Widget的期望

    返回物料(       //列是垂直的线性布局。       子:列(         儿童:[           MyAppBar(             标题:文本(               “示例标题”,

(为什么知道标题是“已搜索”)

这是我们只希望标题的原因吗?

MyAppBar({this.title});

在一开始?

如果我要在MyAppBar中写东西,我是对的

MyAppBar({this.title});
MyAppNumber({this.number});

每次调用该小部件时,它都需要2个输入?

希望我的问题我可以理解,非常感谢您的帮助!!!

来源:https://flutter.dev/docs/development/ui/widgets-intro

可能更容易阅读

编辑:或者我该如何在另一个AppBar下方添加另一个AppBar,也许我理解得更好。

1 个答案:

答案 0 :(得分:1)

  1. 所有字段都标记为final,因为该类是不可变的,因此根据定义,所有字段都必须标记为final。

  2. 扩展StatelessWidget时,您将创建一个Widget,因此MyAppBar现在就像Column或Center一样是一个Widget,因此所有有关Widget的规则都将生效。它还需要一个标题,因为您在MyAppBar的构造函数中引用了一个title变量。

希望这可以澄清您的任何疑问!