美文网首页
【学习 Flutter】将页面渲染到设备

【学习 Flutter】将页面渲染到设备

作者: kyuan | 来源:发表于2019-04-09 23:26 被阅读0次

在挂载页面之前先讨论一个 Flutter 里的关键概念组件

组件

Flutter is all about widgets

Flutter 的一个重要概念:组件,组件就像一块块的积木(用于嵌套构建成用户所看到的界面)

所有都是组件
  • 整个 app 是一个组件
  • 页面是一个组件
  • 组件可以包含着其他组件
  • 组件不单只负责显示,也同时会有逻辑(比如按钮一般会包含事件)

因此如何将 Flutter 应用挂到不同平台上这种繁琐工作并不需要开发者关心,需要关心的是如何利用 Flutter 提供的组件去组合我们的界面与实现业务逻辑

你可以认为 Flutter 应用就是一个组件树

  • 有一个根组件包裹着整个 app
  • 页面与页面之间是一个个不同的组件且可相互跳转
  • 嵌套组件列表组件、用户表单组件等等
组件树

创建第一个组件

整个 Flutter 就是通过组件构建而成,因此我们来创建第一个组件

Flutter 中的组件可以被继承,此处有两个 dart 的关键字

class —— 面向对象语言(OOP)中 '类' 的概念
  • 在 OOP 中所有都是对象
  • 对象简单而言是一个数据组织方案(数据结构)
  • 类允许你为对象创建的蓝图(里面有什么,可以做什么)

Classes are used to create objects - they serve as blueprint for objects.

  • Flutter 里自带了不少类,同时我们需要创建自己的类
  • 类的命名规则,首字母必须大写,多词可使用词首字母大写方式
  • 可为类添加两种特征
    • 属性(Property)
    • 动作(Method)
extends —— 面向对象语言中 '继承' 的概念

Flutter 中的组件有特定的功能来将组件内容渲染到设备里,因此需要将我们自己编写的类继承 Flutter 中的组件类,以获得对应的能力

继承的组件类来自于 Flutter,因此需要导入 Flutter 包(dart 是模块化语言,意味着可以按模块进行加载)

import 'package:flutter/material.dart'; // 导入 Flutter 包下的 material 文件

// 继承导入 Flutter 包中的组件类
class MyApp extends StatelessWidget {
}

实现 build 方法

在 VS Code 里会发现 MyApp 下会出现红色波浪线,鼠标移动到该出会出现提示需要实现 build 方法

VS Code 提示,需要实现 build 方法

为何需要实现 build 方法,因 Flutter 需要调用组件中的 build 方法将内容渲染到设备中

3 种方法实现:
  • 输入 build -> 按下 tab 或回车,VS Code 会自动为我们补全代码
  • 上图 IDE 提示的 Quick Fix... -> Create 1 missing override
  • 全手动输入
Widget build(BuildContext context) {
  return null;
}
一条重要的规则:一个组件必须在 build 方法中返回另一个组件

在这里我们使用 Flutter 里的组件 MaterialApp

  • 用于包装整个应用的特殊组件,定义整个 app 的结构风格,包含导航,主题设定等等功能
  • 每个页面上都会使用到的核心根组件
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(); // 注意这里必须带括号,因为这里创建了 MaterialApp 的对象
  }
}
MaterialApp

MaterialApp 组件可通过具名参数(非位置参数)方式定义这个组件的结构与风格

具名参数:指该参数是带有指定名字,参数与参数间顺序无关
位置参数:指该参数是没有指定名字,受其位置决定

构造器需要什么参数可通过鼠标移动查看
  • 参数名 home:是指当 app 加载后显示的第一个页面(组件),常用的值是 Scaffold
  • 组件 Scaffold:为应用创建一个新的白色页,同时可以加上 app bar(应用顶栏)等等
  • 参数名 appBar:Flutter 提供了常用的应用顶栏,这里我们选用 AppBar
  • 组件 AppBar:提供 title 参数,指一般为 Text 组件

文字难以描述关系,参考代码结构更为直观:

class MyApp extends StatelessWidget { // 最顶层的自定义根组件
  @override
  Widget build(BuildContext context) {
    return MaterialApp( // 这个是 material 包裹的应用
      home: Scaffold( // 一个可以设置页面结构的白色页面
        appBar: AppBar( // 应用顶栏
          title: Text('Hello world'), // 文字内容,这个字符串参数就属于位置参数
        ),
      ),
    );
  }
}

你会发现,所有的值都是组件。印证了 Flutter 官网的

The core of Flutter’s layout mechanism is widgets. In Flutter, almost everything is a widget—even layout models are widgets.

挂载界面到设备

最终挂载我们的根组件到 main 方法中,再运行我们的 Flutter 应用,就可以在模拟器上看到,我们的第一个 Hello world 应用

'main.dart'

import 'package:flutter/material.dart';

void main() {
  print('hello world');
  runApp(MyApp()); // 挂载我们的自定义根组件到 main 方法中
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Hello world'),
        ),
      ),
    );
  }
}
挂载到界面上的 Hello World

最终真正意义上的第一个 Hello World 已经在虚拟机上显示出来,接下来我们将继续学习更多的 Flutter 知识。

At the end of this part:"Every thing is widget in Flutter."
See you soon.

相关文章

网友评论

      本文标题:【学习 Flutter】将页面渲染到设备

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