在 Flutter 中的组件样式,都是通过组件上的 style 属性进行设置的,这与 React Native 很类似。
例如,在 Text 组件里设置样式。

  1. new Text('Hello',
  2. style: new TextStyle(
  3. fontSize: 24.0,
  4. fontWeight: FontWeight.w900,
  5. fontFamily: "Georgia",
  6. )
  7. );
  1. ![image.png](https://cdn.nlark.com/yuque/0/2019/png/164272/1556115676773-d3ab7eb9-55a6-441b-b225-553833c8adfc.png#align=left&display=inline&height=190&name=image.png&originHeight=190&originWidth=189&size=19725&status=done&width=189)

与 React Native 不同的是,有一些样式不不能在 style 里面设置的。例如 width,height,color 等属性。因为 Flutter 认为这样应该是组件的属性而不是样式。

  1. new Text(
  2. 'Hello',
  3. style: new TextStyle(
  4. fontSize: 24.0,
  5. fontWeight: FontWeight.w900,
  6. fontFamily: "Georgia",
  7. ),
  8. textAlign: TextAlign.center,
  9. )

容器大小

  1. var container = new Container(
  2. width: 320.0,
  3. height: 240.0,
  4. );

容器边距

边距只要是 padding(内边距) 和 margin(外边距)两个设置。边距只适用于 Container。

  1. new Container(
  2. padding: new EdgeInsets.all(20.0),
  3. // padding: 20px;
  4. padding: new EdgeInsets.only(left: 30.0, right: 0.0, top: 20.0, bottom: 20.0),
  5. // padding-left: 30px;
  6. // padding-right: 0;
  7. // padding-top: 20px;
  8. // padding-bottom: 20px;
  9. padding: new EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
  10. // padding: 10px 20px;
  11. // 同理,对于 margin 也是一样
  12. margin: new EdgeInsets.all(20.0),
  13. )

位置信息

如果要使用绝对定位,那么需要把内容包裹在 Positioned 容器里,而 Positioned 又需要包裹在 Stack 容器里。

  1. var container = new Container(
  2. child: new Stack(
  3. children: [
  4. new Positioned(
  5. child: new Container(
  6. child: new Text("Lorem ipsum"),
  7. ),
  8. left: 24.0,
  9. top: 24.0,
  10. ),
  11. ],
  12. ),
  13. width: 320.0,
  14. height: 240.0,
  15. );

容器边框

容器的边框设置,使用 Border 对象。边框只适用于 Container。

  1. decoration: new BoxDecoration(
  2. color: Colors.red[400],
  3. // 这里设置
  4. border: new Border.all(width: 2.0, style: BorderStyle.solid),
  5. ),

容器圆角

要设置容器的圆角,使用 BorderRadius 对象,它只能使用于 Container。

  1. new Container(
  2. decoration: new BoxDecoration(
  3. color: Colors.red[400],
  4. // 这里设置
  5. borderRadius: new BorderRadius.all(
  6. const Radius.circular(8.0),
  7. ),
  8. ),
  9. padding: new EdgeInsets.all(16.0),
  10. ),

BorderRadius 有以下的属性与方法。

  • BorderRadius.all() - 创建所有半径的边界半径 radius。
  • BorderRadius.circular() - 同时设置四个圆角。
  • BorderRadius.horizontal() - 在水平方向上设置圆角。
  • BorderRadius.only() - 只设置某个角。
  • BorderRadius.vertical() - 在垂直方向上设置圆角。
    borderRadius: new BorderRadius.circular(5.0));

    阴影效果

    在 Flutter 里设置阴影效果,需要使用 BoxShadow 对象。阴影效果只适用于 Container。
    1. decoration: new BoxDecoration(
    2. color: Colors.red,
    3. boxShadow: <BoxShadow>[
    4. new BoxShadow (
    5. offset: new Offset(0.0, 2.0), // (x, y)
    6. blurRadius: 4.0,
    7. color: const Color(0xcc000000),
    8. ),
    9. new BoxShadow (
    10. offset: new Offset(0.0, 6.0),
    11. blurRadius: 20.0,
    12. color: const Color(0x80000000),
    13. ),
    14. ],
    15. ),
    等效于 css 上的阴影效果设置。
    1. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.8),
    2. 0 6px 20px rgba(0, 0, 0, 0.5);