包装组件

包装组件.png
Decoration 装饰.png

Transform 变换在绘制阶段,而非布局(layout)阶段,所以无论对子组件怎么变化,其占用空间的大小和位置都是固定不变,因为这些是在布局阶段就确定的。RotatedBox和Transform.rotate功能相似,都可对子组件进行旋转变换,但RotatedBox的变换是在layout阶段。

import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(
    debugShowCheckedModeBanner: false,
    home: LayoutWidget(),
  ));
}

class LayoutWidget extends StatefulWidget {
  const LayoutWidget({Key? key}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _LayoutState();
}

class _LayoutState extends State<LayoutWidget> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('包装组件'),
        ),
        body: Column(children: [
          //或者使用装饰容器 DecoratedBox
          Container(
            width: 100,
            height: 100,
            //设置子元素对齐方式
            alignment: Alignment.center,
            //设置内边距
            padding: const EdgeInsets.all(2),
            //设置外边距
            margin: const EdgeInsets.only(top: 10.0),
            //设置倾斜
            transform: Matrix4.rotationZ(0.2),
            decoration: BoxDecoration(
                //形状
                shape: BoxShape.rectangle,
                //背景渐变
                gradient: RadialGradient(
                    colors: [Colors.red, Colors.orange.shade700]),
                //3像素圆角
                borderRadius: BorderRadius.circular(3.0),
                boxShadow: const [
                  //阴影
                  BoxShadow(
                      color: Colors.black54,
                      offset: Offset(2.0, 2.0),
                      blurRadius: 4.0)
                ]),
            child: const Text("欢迎学习Flutter"),
          ),

          Container(
            color: Colors.black,
            margin: const EdgeInsets.only(top: 50.0, bottom: 10),
            child: Transform(
              alignment: Alignment.topRight,
              transform: Matrix4.skewY(0.3),
              child: Container(
                padding: const EdgeInsets.all(8.0),
                color: Colors.deepOrange,
                child: const Text('你好Flutter!'),
              ),
            ),
          ),

          const DecoratedBox(
            decoration: BoxDecoration(color: Colors.blue),
            //将Transform.rotate换成RotatedBox
            child: RotatedBox(
              //旋转90度
              quarterTurns: 1,
              child: Text("旋转测试"),
            ),
          ),
        ]));
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 容器类Widget和布局类Widget都作用于其子Widget,不同的是: 布局类Widget一般都需要接收一个w...
    CHS_8607阅读 5,370评论 0 0
  • Transform可以在其子组件绘制时对其实现一些特效。 1.平移 Transform.translate接收一个...
    zombie阅读 7,826评论 0 0
  • Transform可以在其子组件绘制时对其应用一些矩阵变换来实现一些特效。Matrix4是一个4D矩阵,通过它我们...
    toobai阅读 3,169评论 0 0
  • 一、Widget Flutter设计思想,Everything is Widget。 Widget 是一个比较宽泛...
    磊Se阅读 3,821评论 0 1
  • Transform可以在其子组件绘制时对其应用一些矩阵变换来实现一些特效 Matrix4是一个4D矩阵,通过它我们...
    maskerII阅读 5,499评论 0 1