Flutter 重復造輪子 (11) Icon-text 圖標-文字 組件

詳細可以訪問倉庫 HcUi: 重復創(chuàng)造Flutter 的輪子 在原有組件上拓展 展現(xiàn)出新的特性 (gitee.com)

介紹

可以快速構(gòu)建一個圖片文字的排列組件 不限于Icon與文字可以自由搭配


Screenshot_2023-09-17-17-50-22-0508296502.png

代碼演示

文字在左圖標在右

        HcIconText(
            label: Text("文字"),
            icon: Icon(Icons.abc_outlined),
          ),

圖標在左文字在右

           HcIconText(
            reverse: true,
            label: Text("文字"),
            icon: Icon(Icons.abc_outlined),
          ),

圖標在上文字在下

          HcIconText(
            direction: Axis.vertical,
            label: Text("文字"),
            icon: Icon(Icons.abc_outlined),
          ),

圖標在下文字在上

        HcIconText(
            reverse: true,
            direction: Axis.vertical,
            label: Text("文字"),
            icon: Icon(Icons.abc_outlined),
          ),

增大間距

        HcIconText(
            reverse: true,
            direction: Axis.vertical,
            spacing: 20,
            label: Text("文字"),
            icon: Icon(Icons.abc_outlined),
          ),

復雜組件

         HcIconText(
            direction: Axis.vertical,
            label: Column(
              children: [Text("第一個組件"), Text("第二個組件")],
            ),
            icon: HcImage(
              width: 80,
              height: 80,
              src: 'assets/images/icon.jpeg',
            ),
          ),

API

props

參數(shù) 說明 類型 默認值 是否必填
label 文字 Widget? - false
icon 圖標 Widget? - false
spacing 間隔 double 8.0 false
direction 方向 Axis Axis.horizontal false
reverse 是否翻轉(zhuǎn) bool false false
crossAxisAlignment 次軸對齊方式 crossAxisAlignment false false
mainAxisAlignment 主軸對齊方式 mainAxisAlignment - false
mainAxisSize 主軸方向大小 mainAxisSize true false

項目源碼

class HcIconText extends StatelessWidget {
  //文字
  final Widget? label;

  //icon
  final Widget? icon;

  //間隔
  final double spacing;

  //排列
  final Axis direction;

  //是否翻轉(zhuǎn)
  final bool reverse;

  //主軸對齊方式
  final MainAxisAlignment mainAxisAlignment;

  //次軸對齊方式
  final CrossAxisAlignment crossAxisAlignment;

  //主軸大小
  final MainAxisSize mainAxisSize;

  const HcIconText({
    super.key,
    this.label,
    this.icon,
    this.spacing = 8.0,
    this.direction = Axis.horizontal,
    this.reverse = false,
    this.crossAxisAlignment = CrossAxisAlignment.center,
    this.mainAxisAlignment = MainAxisAlignment.center,
    this.mainAxisSize = MainAxisSize.min,
  });

  @override
  Widget build(BuildContext context) {
    List<Widget> list = List.empty(growable: true);
    if (icon != null) {
      list.add(icon!);
    }
    if (icon != null && label != null && (spacing != 0)) {
      list.add(HcSpace(
        width: spacing,
        height: spacing,
      ));
    }
    if (label != null) {
      list.add(label!);
    }
    if (list.isEmpty) {
      list.add(const SizedBox());
    }

    return list.length == 1
        ? list.first
        : direction == Axis.horizontal
            ? Row(
                mainAxisSize: mainAxisSize,
                crossAxisAlignment: crossAxisAlignment,
                mainAxisAlignment: mainAxisAlignment,
                textDirection: reverse ? TextDirection.rtl : TextDirection.ltr,
                children: list,
              )
            : Column(
                mainAxisSize: mainAxisSize,
                mainAxisAlignment: mainAxisAlignment,
                verticalDirection:
                    reverse ? VerticalDirection.up : VerticalDirection.down,
                crossAxisAlignment: crossAxisAlignment,
                children: list,
              );
  }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容