美文网首页
Flutter笔记2

Flutter笔记2

作者: like26th | 来源:发表于2021-07-19 09:37 被阅读0次

    以下内容全部搬运自Flutter中文网

    1
    先看一个Hello World demo

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(
        new Center(
          child: new Text(
            'Hello, world!',
            textDirection: TextDirection.ltr,
          ),
        ),
      );
    }
    

    该runApp函数接受给定的Widget并使其成为widget树的根。 在此示例中,widget树由两个widget:Center(及其子widget)和Text组成。框架强制根widget覆盖整个屏幕,这意味着文本“Hello, world”会居中显示在屏幕上。文本显示的方向需要在Text实例中指定,当使用MaterialApp时,文本的方向将自动设定。

    这里如果不指定textDirection,会报错No Directionality widget found.
    同时,对于显示Hello World, TextDirection.ltr与TextDirection.rtl貌似没什么区别。

    在编写程序时,用到的Widget可能是无状态的StatelessWidge或者是有状态的StatefulWidget,如何选择取决于项目中的widget是否需要管理一些状态。widget的主要工作是实现一个build函数,用以构建自身。一个widget通常由一些较低级别widget组成。Flutter框架将依次构建这些widget,直到构建到最底层的子widget时,这些最低层的widget通常为RenderObject,它会计算并描述widget的几何形状。

    2
    基础Widget

    来看另一个Demo。

    首先要在pubspec.yaml文件中,将flutter的值设置为:uses-material-design: true。这允许我们可以使用一组预定义Material icons。

    name: my_app
    flutter:
      uses-material-design: true
    

    为了继承材料设计主题数据,widget需要位于MaterialApp内才能正常显示,因此我们使用MaterialApp来运行该应用。

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

    MyScaffold 通过一个Column widget,在垂直方向排列其子项。在Column的顶部,放置了一个MyAppBar实例,将一个Text widget作为其标题传递给应用程序栏。将widget作为参数传递给其他widget是一种强大的技术,可以创建各种复杂的widget。最后,MyScaffold使用了一个Expanded(require child)来填充剩余的空间,正中间包含一条message。

    class MyScaffold extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // Material 是UI呈现的“一张纸”
        return new Material(
          // Column is 垂直方向的线性布局.
          child: new Column(
            children: <Widget>[
              new MyAppBar(
                title: new Text(
                  'Example title',
                  style: Theme.of(context).primaryTextTheme.title,
                ),
              ),
              new Expanded(
                child: new Center(
                  child: new Text('Hello, world!'),
                ),
              ),
            ],
          ),
        );
      }
    }
    

    3
    Material组件
    使用Material widget构建Material App,程序需要以MaterialApp开始,该widget在应用程序的根部创建了一些有用的widget,其中包括一个Navigator, 它管理由字符串标识的Widget栈(即页面路由栈)。Navigator可以让应用程序在页面之间的平滑的过渡。 是否使用MaterialApp完全是可选的,但是使用它是一个很好的做法。

    又一个demo。

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(new MaterialApp(
        title: 'Flutter Tutorial',
        home: new TutorialHome(),
      ));
    }
    
    class TutorialHome extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        //Scaffold是Material中主要的布局组件.
        return new Scaffold(
          appBar: new AppBar(
            leading: new IconButton(
              icon: new Icon(Icons.menu),
              tooltip: 'Navigation menu',
              onPressed: null,
            ),
            title: new Text('Example title'),
            actions: <Widget>[
              new IconButton(
                icon: new Icon(Icons.search),
                tooltip: 'Search',
                onPressed: null,
              ),
            ],
          ),
          //body占屏幕的大部分
          body: new Center(
            child: new Text('Hello, world!'),
          ),
          floatingActionButton: new FloatingActionButton(
            tooltip: 'Add', // used by assistive technologies
            child: new Icon(Icons.add),
            onPressed: null,
          ),
        );
      }
    }
    

    这个demo从MyAppBar和MyScaffold切换到了AppBar和 Scaffold widget,应用程序现在看起来已经有一些“Material”了!例如,应用栏有一个阴影,标题文本会自动继承正确的样式。我们还添加了一个浮动操作按钮,以便进行相应的操作处理。这里再次将widget作为参数传递给其他widget。该 Scaffold widget 需要许多不同的widget的作为命名参数,其中的每一个被放置在Scaffold布局中相应的位置。同样,AppBar中,给参数leading、actions、title分别传一个widget。这种模式在整个框架中会经常出现,这也可能是在设计我们自己的widget时会考虑到一点。

    相关文章

      网友评论

          本文标题:Flutter笔记2

          本文链接:https://www.haomeiwen.com/subject/xldcmltx.html