網站首頁 編程語言 正文
本文實例為大家分享了Flutter實現滾動選擇數字的具體代碼,供大家參考,具體內容如下
前言
本來想百度查的,結果沒查到,只有自己寫,順便記錄一下,加深印象
頁面需求要用戶輸入頁碼,之前選擇的是使用TextField。后來覺得用showDialog彈出選項,讓用戶自己選擇。類似這樣的:
確定了樣式就開始寫吧。關于Dialog的選擇,我用的是SimpleDialog,有對細節上有要求的可以自己自定義一個。
showDialog( ? ? ? ? ? ? ? ? context: context, ? ? ? ? ? ? ? ? barrierDismissible: true, ? ? ? ? ? ? ? ? builder: (ctx){ ? ? ? ? ? ? ? ? ? return SimpleDialog( ? ? ? ? ? ? ? ? ? ? title: Text('頁碼選擇'), ? ? ? ? ? ? ? ? ? ? contentPadding: EdgeInsets.zero, ? ? ? ? ? ? ? ? ? ? children: [ ? ? ? ? ? ? ? ? ? ? ? PageChoose(changeBookIdCallBack: (pageNum2){ ? ? ? ? ? ? ? ? ? ? ? ? setState(() { ? ? ? ? ? ? ? ? ? ? ? ? ? pageNum = pageNum2; ? ? ? ? ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? ? ? ? ? ? }), ? ? ? ? ? ? ? ? ? ? ? Divider(height: 1,), ? ? ? ? ? ? ? ? ? ? ? FlatButton( ? ? ? ? ? ? ? ? ? ? ? ? child: Text('取消'), ? ? ? ? ? ? ? ? ? ? ? ? onPressed: () { ? ? ? ? ? ? ? ? ? ? ? ? ? Navigator.of(context).pop(); ? ? ? ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? ? ? ), ? ? ? ? ? ? ? ? ? ? ? Divider(height: 1,), ? ? ? ? ? ? ? ? ? ? ? FlatButton( ? ? ? ? ? ? ? ? ? ? ? ? child: Text('確認'), ? ? ? ? ? ? ? ? ? ? ? ? onPressed: () { ? ? ? ? ? ? ? ? ? ? ? ? ? })); ? ? ? ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? ? ? ), ? ? ? ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? ? ); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? );
我將contentPadding設置為零,看著舒服點。目前已經完成一部分了,還差中間的滾動選擇數字。
新建文件,創建一個StatelessWidget組件,這里不需要用到StatefulWidget,用不到setState。滾動數字我首先想到的是PageView組件,將它的scrollDirection變為Axis.vertical,就可以實現上下的滑動,這里我需要預覽當前前后兩個數字,在設置PageController的時候就需要給viewportFraction值,這里我給了0.3,具體看你給組件的寬高。
class PageChoose extends StatelessWidget { ? PageChoose({this.changeBookIdCallBack}); ? final ValueChangedchangeBookIdCallBack; ? final PageController pagecontroller = new PageController(viewportFraction: 0.3,initialPage: 1); ? @override ? Widget build(BuildContext context) { ? ? return Center( ? ? ? child: Container( ? ? ? ? alignment: Alignment.center, ? ? ? ? height: 150, ? ? ? ? width: 60, ? ? ? ? child: Stack( ? ? ? ? ? children: [ ? ? ? ? ? ? Center( ? ? ? ? ? ? ? child: Container( ? ? ? ? ? ? ? ? height: 50, ? ? ? ? ? ? ? ? decoration: BoxDecoration( ? ? ? ? ? ? ? ? ? border: Border(top: BorderSide(width: 0.5),bottom: BorderSide(width: 0.5)) ? ? ? ? ? ? ? ? ), ? ? ? ? ? ? ? ), ? ? ? ? ? ? ), ? ? ? ? ? ? PageView.builder( ? ? ? ? ? ? ? itemCount: 50, ? ? ? ? ? ? ? controller: pagecontroller, ? ? ? ? ? ? ? scrollDirection: Axis.vertical, ? ? ? ? ? ? ? pageSnapping: true, ? ? ? ? ? ? ? physics: AlwaysScrollableScrollPhysics(), ? ? ? ? ? ? ? itemBuilder: (ctx ,index ){ ? ? ? ? ? ? ? ? return Center(child: Text('$index',style: TextStyle(fontSize: 20),)); ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? onPageChanged: (int index) { ? ? ? ? ? ? ? ? changeBookIdCallBack(index); ? ? ? ? ? ? ? }, ? ? ? ? ? ? ), ? ? ? ? ? ], ? ? ? ? ), ? ? ? ), ? ? ); ? } }
我還給組件加了子傳父的方法,這樣在選完后直接傳值給父頁面。這樣就完成了。
總結
希望可以幫到初學Flutter的同學。
原文鏈接:https://blog.csdn.net/qq_44124643/article/details/110727159
相關推薦
- 2023-01-11 React中映射一個嵌套數組實現demo_React
- 2022-08-13 Linux管理員root密碼忘記了怎么辦?
- 2022-03-26 C++實現關機功能詳細代碼_C 語言
- 2022-08-15 Python包裝異常處理方法_python
- 2023-06-19 CentOS7使用yum安裝Golang的超詳細步驟_Golang
- 2022-12-09 C/C++中時間庫函數的使用詳解_C 語言
- 2022-01-20 console基礎用法,輸出添加css,打印時間差,計數等
- 2022-06-12 Python取讀csv文件做dbscan分析_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支