欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Flutter:布局

程序员文章站 2022-05-29 20:27:26
...

布局

注意点
  1. column所占空间的决定因素:元素长度?alignment??
    例如:
    如果使用Column来做整体布局,设置图片时需要注意Column所占的空间。比如:
class layout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        new Image.asset(
          'images/image1.png',
          height: 250.0,
          fit: BoxFit.fill,
        ),
        new layoutTitle(),
      ],
    );
  }
}

如果不设置下面这句

crossAxisAlignment: CrossAxisAlignment.stretch,

则页面是这样的:


Flutter:布局
Column

2.Expanded()的作用??自适应的具体规则是?
使Expanded中的child保持可扩展性,而不是sizeToFit(自适应大小)
例如:

class layoutTitle extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Container(
      padding: const EdgeInsets.all(32),
      child: new Row(
        children: <Widget>[
          new Expanded(
            child:
            new twoLinesTextView(),
          ),
//          new Expanded(
//          child:
          new startView(),
//          )
        ],
      ),
    );
  }
}

结果:


Flutter:布局
Expanded

如果不使用Expande包裹住twoLinesTextView,结果:


Flutter:布局
Expanded

如果startView和twoLinesTextView两个都使用Expanded包裹:
Flutter:布局
Expanded

备注:文字展现不全的问题还与Text空间的softWrap属性有关

几个步骤
只需几个步骤即可在屏幕上放置文本,图标或图像。
可见widget添加到布局widget.
所有布局widget都有一个child属性(例如Center或Container),或者一个 children属性,如果他们需要一个widget列表(例如Row,Column,ListView或Stack)。

  1. 选择一个widget来保存该对象(布局widget)

  2. 创建一个widget来容纳可见对象(可见widget)

  3. 将可见widget添加到布局widget.
    所有布局widget都有一个child属性(例如Center或Container),或者一个 children属性,如果他们需要一个widget列表(例如Row,Column,ListView或Stack)。

  4. 将布局widget添加到页面.
    Flutter应用本身就是一个widget,大部分widget都有一个build()方法。在应用程序的build方法中创建会在设备上显示的widget。 对于Material应用程序,您可以将Center widget直接添加到body属性中

混合使用widget???

在设计用户界面时,您可以使用标准widget库中的widget,也可以使用Material Components中的widget。 您可以混合使用两个库中的widget,可以自定义现有的widget,也可以构建一组自定义的widget。

// 这个App没有使用Material组件,  如Scaffold.
// 一般来说, app没有使用Scaffold的话,会有一个黑色的背景和一个默认为黑色的文本颜色。
// 这个app,将背景色改为了白色,并且将文本颜色改为了黑色以模仿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)),
      ),
    );
  }
}

MaterialApp默认的文字方向

默认文字方向


Flutter:布局
文字方向