[Day15] Flutter with GetX Wrap & Chip

Wrap & Chip

https://cdn-images-1.medium.com/max/800/1*UBm5TBvQ9TORBJivaKy0uw.png

原生的Widget, 对於之前接触iOS的人来说一开始看到有惊讶一下(居然有原生的!),
有一点像是hash tag, 个人把Wrap理解成另一种形式的ListView.
而Chip的部分则是ListView的item, 而flutter原生已经处理好.
以下范例将用GetX的Obx作结合

Widget部分

@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(title: Text('ToastPage')),
  body: SafeArea(
    child: SizedBox.expand(
      child: Stack(
        children: [
          Obx(
            () {
              return Wrap(
                spacing: 5,
                runSpacing: 0,
                children:
                    List.generate(controller.chipList.length, (index) {
                  final title = controller.chipList[index];
                  return Chip(
                    label: Text(title),
                    onDeleted: () => controller.removeChipData(index),
                  );
                }),
              );
            },
          ),
          Positioned.fill(
            bottom: 8,
            child: Align(
              alignment: Alignment.bottomCenter,
              child: SizedBox(
                height: Get.width * 0.8 * 0.14,
                child: FloatingActionButton(
                  onPressed: () {
                    controller.addChipData();
                  },
                  child: Text("+", style: TextStyle(fontSize: 20)),
                ),
              ),
            ),
          ),
        ],
      ),
    ),
  ),
);
}

GetxController部分
(+ 按钮)点击事件addChipData用random 产生数字後加入List,
删除的部分Chip的onDeleted事件呼叫controller的removeChipData().

class WrapPageController extends GetxController {
  final _chipList = <String>[].obs;
  get chipList => _chipList.toList();

  @override
  void onInit() {
    super.onInit();
  }

  addChipData() {
    Random random = Random();
    int randomNumber = random.nextInt(200);
    _chipList.add("$randomNumber");
  }

  removeChipData(int index) {
    _chipList.removeAt(index);
  }
}

效果如下
https://cdn-images-1.medium.com/max/800/1*SzuTHvYUoD49iU2JhB5Gvw.gif

本篇的GitHub source code

更多范例参考

下一篇将为大家简介 GetX


<<:  33岁转职者的前端笔记-DAY 29 前端面试题目练习

>>:  认识与建立javascript(DAY16)

每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day11

tags: ItIron2021 Javascript 前言 昨天我们简单的带过IIFE,今天的主题...

30天打造品牌特色电商网站 Day.18 文字的样子

之前曾在 Day8 有跟大家提过字体常用的样式,今天来带大家深入探讨各式文字怎麽设计,才会带给使用者...

【第九天 - Flutter Bloc+Cubit 架构教学】

今日的程序码 Bloc 范例 => GITHUB Bloc Cubit 范例 => GI...

[Tableau Public] day 11:针对原始资料做新增修改

第11天,接续昨天遇到的状况,我们必须要在原始资料中新增各个行政区的经纬度资料,资料来源是「台湾公开...

Class

终於来到Class的章节了,Class是ES6所新增,在这之前都是使用Prototype去进行物件导...