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

2019-04-09  本文已影响0人  kyuan

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

组件

Flutter is all about widgets

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

所有都是组件

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

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

组件树

创建第一个组件

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

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

class —— 面向对象语言(OOP)中 '类' 的概念

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

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 种方法实现:
Widget build(BuildContext context) {
  return null;
}
一条重要的规则:一个组件必须在 build 方法中返回另一个组件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(); // 注意这里必须带括号,因为这里创建了 MaterialApp 的对象
  }
}
MaterialApp

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

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

构造器需要什么参数可通过鼠标移动查看

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

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.

上一篇 下一篇

猜你喜欢

热点阅读