Flutter底部彈窗選擇器BottomSheet

效果圖

調(diào)用:

    List<CustomBottomSheetTitleModel> modelList = [
      CustomBottomSheetTitleModel('男'),
      CustomBottomSheetTitleModel('女'),
      CustomBottomSheetTitleModel('其他'),
      CustomBottomSheetTitleModel('保密'),
    ];
    CustomBottomSheet.showTitleSheet(context, modelList, (index) {
      print('----------${index}');
    });

實(shí)現(xiàn):

class CustomBottomSheetTitleModel {

  final String title;

  final TextStyle? textStyle;

  final VoidCallback? onTapCallback;

  CustomBottomSheetTitleModel(this.title, {this.textStyle, this.onTapCallback});
}

/// 點(diǎn)擊按鈕回調(diào)
typedef CustomBottomSheetOnTapCallback = void Function(int index);

class CustomBottomSheet {

  /// 顯示純文字
  static Future<void> showTitleSheet(
      BuildContext context,
      List<CustomBottomSheetTitleModel> modelList,
      CustomBottomSheetOnTapCallback sheetOnTapCallback) async {
    return await showModalBottomSheet(
      context: context,
      backgroundColor: Colors.transparent, //重點(diǎn) 去除黑色背景顏色 實(shí)現(xiàn)圓角
      isScrollControlled: true, // 不限制高度
      builder: (BuildContext context) {

        return GestureDetector(
          behavior: HitTestBehavior.opaque,
          onTap: () {
            Navigator.of(context).pop();
          },
          child: Container(
            alignment: Alignment.bottomCenter,
            height: MediaQuery.of(context).size.height,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Container(
                  height: 5,
                  width: 20,
                  decoration: const BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.all(Radius.circular(3)),
                  ),
                ),
                const SizedBox(height: 10),
                Container(
                  padding: const EdgeInsets.symmetric(vertical: 32),
                  decoration: const BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.only(
                      topLeft: Radius.circular(32),
                      topRight: Radius.circular(32),
                    ),
                  ),
                  child: ListView.builder(
                    physics: const NeverScrollableScrollPhysics(),
                    itemCount: modelList.length,
                    shrinkWrap: true,
                    itemBuilder: (context, index) {
                      return GestureDetector(
                        behavior: HitTestBehavior.opaque,
                        onTap: () {
                          Navigator.of(context).pop();
                          sheetOnTapCallback(index);
                          if (index < modelList.length) {
                            modelList[index].onTapCallback?.call();
                          }
                        },
                        child: Container(
                          alignment: Alignment.center,
                          padding: const EdgeInsets.symmetric(vertical: 10),
                          child: Text(
                            modelList[index].title,
                            style: modelList[index].textStyle ?? const TextStyle(color: Colors.black),
                          ),
                        ),
                      );
                    },
                  ),
                ),
              ],
            ),
          ),
        );
      },
    );
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市带膜,隨后出現(xiàn)的幾起案子寡壮,更是在濱河造成了極大的恐慌,老刑警劉巖征峦,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馆纳,死亡現(xiàn)場(chǎng)離奇詭異敌厘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)舌狗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)叽奥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痛侍,你說(shuō)我怎么就攤上這事朝氓。” “怎么了主届?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵赵哲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我君丁,道長(zhǎng)枫夺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任绘闷,我火速辦了婚禮橡庞,結(jié)果婚禮上较坛,老公的妹妹穿的比我還像新娘。我一直安慰自己扒最,他們只是感情好丑勤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吧趣,像睡著了一般法竞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上再菊,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音颜曾,去河邊找鬼纠拔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泛豪,可吹牛的內(nèi)容都是我干的稠诲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼诡曙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼臀叙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起价卤,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤劝萤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后慎璧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體床嫌,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年胸私,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厌处。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岁疼,死狀恐怖阔涉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捷绒,我是刑警寧澤瑰排,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站暖侨,受9級(jí)特大地震影響凶伙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜它碎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一函荣、第九天 我趴在偏房一處隱蔽的房頂上張望显押。 院中可真熱鬧,春花似錦傻挂、人聲如沸乘碑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兽肤。三九已至,卻和暖如春绪抛,著一層夾襖步出監(jiān)牢的瞬間资铡,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工幢码, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笤休,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓症副,卻偏偏與公主長(zhǎng)得像店雅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贞铣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容