做自(zì)由與創造的先行者

Flutter 布局方法

Flutter開(kāi)發手冊

重點是什(shén)麽?

Widgets 是用(yòng)于構建 U I的類.

Widgets 用(yòng)于布局和(hé) UI 元素.

通過簡單的 widget 來(lái)構建複雜(zá)的 widget

Flutter 布局機制的核心就是 widget。在 Flutter 中,幾乎所有東西都是一個 widget - 甚至布局模型都是 widget。您在 Flutter 應用(yòng)中看(kàn)到(dào)的圖像、圖标和(hé)文(wén)本都是 widget。 甚至你(nǐ)看(kàn)不到(dào)的東西也(yě)是 widget,例如行(row)、列(column)以及用(yòng)來(lái)排列、約束和(hé)對(duì)齊這(zhè)些(xiē)可見 widget 的網格(grid)。

您可以通過構建 widget 來(lái)構建更複雜(zá)的 widget。

注意: 本教程中的大(dà)多數屏幕截圖都是在debugPaintSizeEnabled爲 true 時(shí)顯示的,因此您可以看(kàn)到(dào)布局結構。 有關更多信息,請(qǐng)參閱可視(shì)化調試,這(zhè)是調試 Flutter Apps中的一節。

大(dà)部分應該看(kàn)起來(lái)應該像您所期望的,但(dàn)你(nǐ)可能(néng)想了(le)解一下(xià) Container(以粉紅(hóng)色顯示)。 Container 也(yě)是一個 widget,允許您自(zì)定義其子 widget。如果要添加填充,邊距,邊框或背景色,請(qǐng)使用(yòng) Container 來(lái)設置(譯者語:隻有容器有這(zhè)些(xiē)屬性)。

在這(zhè)個例子中,每個 Text 放(fàng)置在 Container 中以添加邊距。整個行也(yě)被放(fàng)置在容器中以在行的周圍添加填充。

本例 UI 中的其他(tā)部分也(yě)可以通過屬性來(lái)控制。使用(yòng)其 color 屬性設置圖标的顔色。使用(yòng) Text 的 style 屬性來(lái)設置字體,顔色,粗細等。列和(hé)行的屬性允許您指定他(tā)們的子項如何垂直或水(shuǐ)平對(duì)齊,以及應該占據多少空(kōng)間。

布局一個 widget

重點是什(shén)麽?

即使應用(yòng)程序本身也(yě)是一個 widget.

創建一個 widget 并将其添加到(dào)布局widget中是很(hěn)簡單的.

要在設備上(shàng)顯示 widget,請(qǐng)将布局 widget 添加到(dào) app widget 中。

使用(yòng) Scaffold 是最容易的,它是 Material Components 庫中的一個 widget,它提供了(le)一個默認 banner,背景顔色,并且具有添加 drawer,snack bar 和(hé)底部 sheet 的 API。

如果您願意,可以構建僅使用(yòng)标準 widget 庫中的 widget 來(lái)構建您的應用(yòng)程序

如何在 Flutter 中布局單個 widget ?本節介紹如何創建一個簡單的 widget 并将其顯示在屏幕上(shàng)。它還展示了(le)一個簡單的 Hello World 應用(yòng)程序的完整代碼。

在 Flutter 中,隻需幾個步驟即可在屏幕上(shàng)放(fàng)置文(wén)本,圖标或圖像。

選擇一個 widget 來(lái)保存該對(duì)象。根據您想要對(duì)齊或約束可見窗口小(xiǎo)部件的方式,從(cóng)各種布局 widget 中進行選擇, 因爲這(zhè)些(xiē)特性通常會(huì)傳遞到(dào)所包含的 widget 中。這(zhè)個例子使用(yòng) Center,它可以将内容水(shuǐ)平和(hé)垂直居中。

創建一個 widget 來(lái)容納可見對(duì)象注意:Flutter 應用(yòng)程序是用(yòng) Dart 語言編寫的。如果您了(le)解 Java 或類似的面向對(duì)象編程語言,Dart 會(huì)感到(dào)非常熟悉。 如果不了(le)解的話(huà),你(nǐ)可以試試 DartPad 一個可以在任何浏覽器上(shàng)使用(yòng)的交互式 Dart playground。 Dart 語言之旅是一篇介紹 Dart 語言特性的概述。

例如,創建一個Text widget:

new Text('Hello World', style: new TextStyle(fontSize: 32.0))

創建一個 Image widget:

new Image.asset('images/myPic.jpg', fit: BoxFit.cover)

創建一個 Icon widget:

new Icon(Icons.star, color: Colors.red[500])

将可見 widget 添加到(dào)布局 widget。 所有布局 widget 都有一個 child 屬性(例如 Center 或 Container ),或者一個 children 屬性,如果他(tā)們需要一個 widget 列表(例如 Row,Column,ListView 或 Stack)。将 Text widget 添加到(dào) Center widget:

new Center(

child: new Text('Hello World', style: new TextStyle(fontSize: 32.0))

将布局 widget 添加到(dào)頁面。Flutter 應用(yòng)本身就是一個 widget,大(dà)部分 widget 都有一個 build() 方法。在應用(yòng)程序的 build 方法中創建會(huì)在設備上(shàng)顯示的 widget。 對(duì)于 Material 應用(yòng)程序,您可以将 Center widget 直接添加到(dào) body 屬性中。

class _MyHomePageState extends State {

@override

Widget build(BuildContext context) {

return new Scaffold(

appBar: new AppBar(

title: new Text(widget.title),

),

body: new Center(

child: new Text('Hello World', style: new TextStyle(fontSize: 32.0)),

),

);

}

}

Note:在設計(jì)用(yòng)戶界面時(shí),您可以使用(yòng)标準 widget 庫中的 widget,也(yě)可以使用(yòng) Material Components 中的 widget。 您可以混合使用(yòng)兩個庫中的 widget,可以自(zì)定義現(xiàn)有的 widget,也(yě)可以構建一組自(zì)定義的 widget。對(duì)于非 Material 應用(yòng)程序,您可以将 Center widget 添加到(dào)應用(yòng)程序的 build() 方法中:

// 這(zhè)個App沒有使用(yòng)Material組件, 如Scaffold.

// 一般來(lái)說, app沒有使用(yòng)Scaffold的話(huà),會(huì)有一個黑色的背景和(hé)一個默認爲黑色的文(wén)本顔色。

// 這(zhè)個app,将背景色改爲了(le)白(bái)色,并且将文(wén)本顔色改爲了(le)黑色以模仿Material app

import 'package:flutter/material.dart';

void main() {

runApp(new MyApp());

}

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return new Container(

decoration: new BoxDecoration(color: Colors.white),

child: new Center(

child: new Text('Hello World',

textDirection: TextDirection.ltr,

style: new TextStyle(fontSize: 40.0, color: Colors.black87)),

),

);

}

}

請(qǐng)注意,默認情況下(xià),非 Material 應用(yòng)程序不包含 AppBar,标題或背景顔色。 如果您想在非 Material 應用(yòng)程序中使用(yòng)這(zhè)些(xiē)功能(néng),您必須自(zì)己構建它們。此應用(yòng)程序将背景顔色更改爲白(bái)色,将文(wén)本更改爲深灰色以模仿 Material 應用(yòng)程序。

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:Flutter 布局多個widgets
上(shàng)一篇:Flutter 構建布局