Flutter深入浅出组件篇---AspectRatio、FractionallySizedBox
AspectRatio介绍
AspectRatio
主要的作用是调整子组件设定的宽高比,如播放视频时16:9或4:3等。
示例代码
本文中很多效果都没有截图,可下载源代码运行项目 源代码地址,或者通过视频教程查看 视频教程地址
AspectRatio构造函数
const AspectRatio({
Key? key,
required this.aspectRatio,
Widget? child,
}) : assert(aspectRatio != null),
assert(aspectRatio > 0.0),
// can't test isFinite because that's not a constant expression
super(key: key, child: child);
AspectRatio属性和说明
字段 | 属性 | 描述 |
---|---|---|
aspectRatio | double | 纵横比例 |
child | Widget | 子组件 |
aspectRatio
主要用来设定子组件的纵横比例,而child
就是需要被设定纵横比例的子组件。AspectRatio基本使用
import 'package:flutter/material.dart';
class AspectRatioExample extends StatefulWidget {
@override
_AspectRatioExampleState createState() => _AspectRatioExampleState();
}class _AspectRatioExampleState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("AspectRatioExample"),
),
body: Container(
color: Colors.blue,
alignment: Alignment.center,
width: double.infinity,
height: 100.0,
child: AspectRatio(
aspectRatio: 16 / 9,
child: Container(
color: Colors.orangeAccent,
),
),
),
);
}
}
AspectRatio效果展示 我们看到橙色盒子的宽度是他父组件的高度*16/9
文章图片
FractionallySizedBox介绍 当我们需要一个控件的尺寸是相对尺寸时,比如当前按钮的宽度占父组件的70%,可以使用
FractionallySizedBox
来实现此效果。FractionallySizedBox构造函数
const FractionallySizedBox({
Key? key,
this.alignment = Alignment.center,
this.widthFactor,
this.heightFactor,
Widget? child,
}) : assert(alignment != null),
assert(widthFactor == null || widthFactor >= 0.0),
assert(heightFactor == null || heightFactor >= 0.0),
super(key: key, child: child);
FractionallySizedBox属性和说明
字段 | 属性 | 描述 |
---|---|---|
alignment | AlignmentGeometry | 子组件的对齐方式 |
widthFactor | double | 宽度系数 |
heightFactor | double | 高度系数 |
child | Widget | 子组件 |
关于
alignment
这个字段在前面的文章中我们详细讲过,在Flutter深入浅出组件篇---Align、AnimatedAlign 可以看到更详细的介绍2、widthFactor
子组件相对于父组件的宽度系数
3、heightFactor
子组件相对于父组件的高度系数
4、child
子组件
FractionallySizedBox基本使用
import 'package:flutter/material.dart';
class AspectRatioExample extends StatefulWidget {
@override
_AspectRatioExampleState createState() => _AspectRatioExampleState();
}class _AspectRatioExampleState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("AspectRatioExample"),
),
body: Container(
color: Colors.blue,
alignment: Alignment.center,
width: 150,
height: 150.0,
child: FractionallySizedBox(
alignment: Alignment.topLeft,
widthFactor: 1.5,
heightFactor: 0.5,
child: new Container(
color: Colors.red,
),
),
),
);
}
}
FractionallySizedBox效果展示 我们看到子组件红色盒子是父组件蓝色盒子的1.5倍,所以超出
【Flutter深入浅出组件篇---AspectRatio、FractionallySizedBox】
文章图片
推荐阅读
- 深入浅出谈一下有关分布式消息技术(Kafka)
- 动态组件与v-once指令
- Flutter的ListView
- vue组件中为何data必须是一个函数()
- (六)Component初识组件
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- vuex|vuex 基础结构
- SwiftUI|SwiftUI iOS 瀑布流组件之仿CollectionView不规则图文混合(教程含源码)
- 运用flutter|运用flutter 构建一个发布版(release)APK
- Vue组件之事件总线和消息发布订阅详解