iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
Mobile Development

Flutter with GetX, loading*175%歷程 系列 第 15

[Day15] Flutter with GetX Wrap & Chip

  • 分享至 

  • xImage
  •  

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


上一篇
[Day14] Flutter with GetX animated_text_kit
下一篇
[Day16] Flutter with GetX 簡介 (狀態管理?)
系列文
Flutter with GetX, loading*175%歷程 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言