当前位置:   article > 正文

Flutter 基础组件之 Stack_flutter stackfit

flutter stackfit

如果说 Row 和 Column 相当于 Android 的 LinearLayout 的话,那么 Stack 就有点像 Android 中 FrameLayout,它可以使子组件堆叠起来,但是它比 FrameLayout 要强大,它可以控制子组件的位置,使用起来也是很简单的。

 

1 构造方法

Stack({Key key, AlignmentGeometry alignment: AlignmentDirectional.topStart, TextDirection textDirection, StackFit fit: StackFit.loose, Overflow overflow: Overflow.clip, List<Widget> children: const [] })

Stack 只有这一个构造方法,而且也没有必须指定的属性,但是一般都会设置 children 属性,不然也没有什么意义。

 

2 常用属性

alignment:子组件对齐方式,同 Container 的 alignment 属性一样的,它指定的是所有子组件的对齐方式,所以建议在只有两个子组件的时候使用,如果有三个及以上的子组件时,建议使用 Positioned 包裹子组件来决定子组件的位置,具体参考 2.1 Positioned,alignment 的可选值有:
    AlignmentDirectional.topCenter:子组件垂直靠顶部水平居中对齐。
    AlignmentDirectional.topRight:子组件垂直靠顶部水平靠右对齐。
    AlignmentDirectional.centerLeft:子组件垂直居中水平靠左对齐。
    AlignmentDirectional.center:子组件垂直和水平居中都对齐。
    AlignmentDirectional.centerRight:子组件垂直居中水平靠右对齐。
    AlignmentDirectional.bottomLeft:子组件垂直靠底部水平靠左对齐。
    AlignmentDirectional.bottomCenter:子组件垂直靠底部水平居中对齐。
    AlignmentDirectional.bottomRight:子组件垂直靠底部水平靠右对齐。
也可以使用 alignmentDirectional(start,y) 指定具体的偏移量,start 就相当于 x,它是以整个组件的中心为坐标原点,x、y 偏移量取值范围为 [-1,1],如果 x 的偏移量大于 0,则表示向右偏移,小于 0 则向左偏移;如果 y 轴的偏移量大于 0 则向下偏移,小于 0 则向上偏移。

textDirection:子组件排列方向,可选值有:
    TextDirection.ltr:从左往右排列。
    TextDirection.rtl:从右往左排列。

fit:如何确定没有使用 Position 包裹的子组件的大小,可选值有:
    StackFit.loose:子组件宽松取值,可以从 min 到 max。
    StackFit.expand:子组件取最大值。
    StackFit.passthrough:不改变子组件约束条件。

overflow:超出部分的处理方式,可选值有 Overflow.clip 和 Overflow.visible,不过我没有看到该属性的效果。

下面是一个设置了上述属性的 Demo:

  1. import 'package:flutter/material.dart';
  2. void main() {
  3. runApp(MyApp());
  4. }
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. return MaterialApp(
  9. //是否显示 debug 标签
  10. debugShowCheckedModeBanner: false,
  11. title: "Stack",
  12. home: Scaffold(
  13. appBar: AppBar(
  14. title: Text("Stack"),
  15. ),
  16. body: Container(
  17. child: Stack(
  18. //子组件对齐方式,同 Container 的 alignment 属性一样的,它指定的是所有子组件的对齐方式,所以建议在只有两个子组件的时候
  19. //使用,如果有三个及以上的子组件时,建议使用 Positioned 包裹子组件来决定子组件的位置,alignment 的可选值有:
  20. //AlignmentDirectional.topCenter:垂直靠顶部水平居中对齐
  21. //AlignmentDirectional.topRight:垂直靠顶部水平靠右对齐
  22. //AlignmentDirectional.centerLeft:垂直居中水平靠左对齐
  23. //AlignmentDirectional.center:垂直和水平居中都对齐
  24. //AlignmentDirectional.centerRight:垂直居中水平靠右对齐
  25. //AlignmentDirectional.bottomLeft:垂直靠底部水平靠左对齐
  26. //AlignmentDirectional.bottomCenter:垂直靠底部水平居中对齐
  27. //AlignmentDirectional.bottomRight:垂直靠底部水平靠右对齐
  28. //也可以像我一样指定具体的偏移量,它是以整个组件的中心为坐标原点,x、y 偏移量取值范围为 [-1,1],如果 x 的偏移量大于 0
  29. //则表示向右偏移,小于 0 则向左偏移;如果 y 轴的偏移量大于 0 则向下偏移,小于 0 则向上偏移。
  30. alignment: AlignmentDirectional(0.8, -0.8),
  31. //子组件排列方向,可选值有:
  32. //TextDirection.ltr:从左往右排列
  33. //TextDirection.rtl:从右往左排列
  34. textDirection: TextDirection.ltr,
  35. //如何确定没有使用 Position 包裹的子组件的大小,可选值有:
  36. //StackFit.loose:子组件宽松取值,可以从 min 到 max
  37. //StackFit.expand:子组件取最大值
  38. //StackFit.passthrough:不改变子组件约束条件
  39. fit: StackFit.loose,
  40. //超出部分的处理方式,可选值有 Overflow.clip 和 Overflow.visible,不过我没有看到该属性的效果
  41. // overflow: Overflow.clip,
  42. children: <Widget>[
  43. CircleAvatar(
  44. backgroundImage: AssetImage("assets/images/a.jpg"),
  45. radius: 100,
  46. ),
  47. Text(
  48. "Itachi",
  49. style: TextStyle(fontSize: 30, color: Color(0xFF000000)),
  50. ),
  51. Positioned(
  52. //距离左边的距离
  53. left: 10,
  54. //距离顶部的距离
  55. // top: 10,
  56. //距离右边的距离,设置 left 后该距离失效
  57. // right: 10,
  58. //距离底部的距离,设置 top 后该距离失效
  59. bottom: 10,
  60. // //子组件的宽、高,注意,宽高与 topleftbottomright
  61. // width: 100,
  62. // height: 100,
  63. child: Text(
  64. "鼬",
  65. style: TextStyle(fontSize: 40, color: Color(0xFF000000)),
  66. ),
  67. ),
  68. ],
  69. ),
  70. ),
  71. ),
  72. );
  73. }
  74. }

 

运行效果如下:

 

 

2.1 Positioned

用来在 Stack 组件中辅助子组件定位的组件,建议在有三个及以上子组件的复杂布局时使用,它的常用属性有如下 6  个:

left:距离左边的距离。

top:距离顶部的距离。

right:距离右边的距离,设置 left 后该距离失效。

bottom:距离底部的距离,设置 top 后该距离失效。

width height:子组件的宽。

height:子组件的高。

注意,width、left、right 不能同时设置,height、top、bottom 也不能同时设置。

 

3 总结

stack 可以应对需要子组件堆叠的场景,而且使用 Positioned 辅助后定位子组件可以是相当灵活。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/341807
推荐阅读
相关标签
  

闽ICP备14008679号