一区二区三区欧美日韩-一区二区三区欧美-一区二区三区免费在线视频-一区二区三区免费在线观看-久久精品店-久久精品第一页

歡迎您光臨深圳塔燈網絡科技有限公司!
電話圖標 余先生:13699882642

網站百科

為您解碼網站建設的點點滴滴

Flutter布局錦囊---蠟筆畫的表單

發表日期:2019-01 文章編輯:小燈 瀏覽次數:2185

設計給的效果如下:

UI布局圖

拿到設計后,先把整體拆分成幾個部分:

  1. “手機號輸入框”,使用自定義的登錄表單字段組件實現的輸入框。
  2. “驗證碼輸入框”,使用自定義的登錄表單驗證碼組件和登錄表單字段組件組合實現的輸入框。
  3. “登錄按鈕”,使用自定義的涂鴉按鈕組件實現的按鈕。

然后就可以開始進行編碼了。

第1步:繪制組件樹

蠟筆畫的表單的組件樹

第2步:實現“手機號輸入框”

首先引入需要的自定義組件,login_form_field.dart文件是《Flutter布局錦囊---帶彩條的文本字段》中的代碼,login_form_code.dart文件是《Flutter布局錦囊---驗證碼倒計時》中的代碼,doodle_button.dart文件是《Flutter布局錦囊---涂鴉風格按鈕》中的代碼。

import 'package:flutter/material.dart'; import 'login_form_field.dart'; import 'login_form_code.dart'; import '../common/doodle_button.dart';/// 自定義的登錄表單組件。 class LoginForm extends StatefulWidget { @override _LoginFormState createState() => _LoginFormState(); } 

然后定義一些用來控制文本字段狀態、驗證碼按鈕狀態的成員變量,同時把UI布局的基本輪廓描繪出來。

/// 與自定義的登錄表單組件關聯的狀態子類。 class _LoginFormState extends State<LoginForm> { /// 手機號文本字段的控制器。 final _phoneController = TextEditingController(); /// 驗證碼文本字段的控制器。 final _codeController = TextEditingController(); /// 發送驗證碼按鈕是否可用。 bool _codeAvailable = false; /// 手機號文本字段是否符合格式。 bool _phoneActivation = false; /// 驗證碼文本字段是否符合格式。 bool _codeActivation = false;@override Widget build(BuildContext context) { return Row( children: <Widget>[ Expanded( flex: 1, child: SizedBox(), ), Expanded( flex: 8, child: Column( children: <Widget>[ // TODO: 實現“手機號輸入框”。 // TODO: 第3步:實現“驗證碼輸入框”。 // TODO: 第4步:實現“登錄按鈕”。 ], ), ), Expanded( flex: 1, child: SizedBox(), ), ] ); } } 

通過《Flutter布局錦囊---帶彩條的文本字段》中實現的LoginFormField組件,你可以迅速實現“手機號輸入框”。

// TODO: 實現“手機號輸入框”。 SizedBox(height: 20.0), LoginFormField( hintText: '請輸入手機號', textEditingController: _phoneController, maxLength: 11, minLength: 7, legitimateCallback: () { setState(() { _phoneActivation = true; _codeAvailable = true;}); }, illegalCallback: () { setState(() { _phoneActivation = false; _codeAvailable = false;}); }, ), 

第3步:實現“驗證碼輸入框”

通過《Flutter布局錦囊---帶彩條的文本字段》中實現的LoginFormField組件、《Flutter布局錦囊---驗證碼倒計時》中實現的LoginFormCode組件,你可以迅速實現“驗證碼輸入框”。

// TODO: 第3步:實現“驗證碼輸入框”。 SizedBox(height: 30.0), Stack( children: <Widget>[ LoginFormField( hintText: '請輸入驗證碼', textEditingController: _codeController, maxLength: 6, minLength: 6, legitimateCallback: () { setState(() { _codeActivation = true; }); }, illegalCallback: () { setState(() { _codeActivation = false; }); }, ), // 對齊(`Align`)組件,用于將其子項與其自身對齊,并根據子級的大小自行調整大小。 Align( // 高度因子(`heightFactor`)屬性,如果為非空值,則將其高度設置為子組件高度乘以此系數。 // 可以更大也可以小于`1.0`,但必須是正數。 heightFactor: 1.7, // 對準(`alignment`)屬性,如何調整子組件。 // 對準(`Alignment`)類的中心右邊(`centerRight`)常量,沿右邊的中心點對準。 alignment: Alignment.centerRight, child: LoginFormCode( countdown: 60, available: _codeAvailable, onTapCallback: () { print(_codeController.text); }, ), ), ], ), 

第4步:實現“登錄按鈕”

最后,通過《Flutter布局錦囊---涂鴉風格按鈕》中的DoodleButton組件,迅速實現“登錄按鈕”。

// TODO: 第4步:實現“登錄按鈕”。 SizedBox(height: 48.0), DoodleButton( promptText: '登錄', activation: _codeActivation && _phoneActivation, onTapCallback: (){ print('點擊了“登錄”按鈕'); }, ), 

第5步:還原效果

蠟筆畫的表單的還原效果
本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.junxiaosheng.cn/17658.html
相關APP開發
 八年  行業經驗

多一份參考,總有益處

聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

咨詢相關問題或預約面談,可以通過以下方式與我們聯系

業務熱線:余經理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

主站蜘蛛池模板: 国产亚洲精品视频在线网| 天堂岛www| 国产乱码一区二区三区| 中国女人内谢69xxxxxx直播| 日韩欧美国产免费看清风阁| 久久笫一福利免费导航| 国产成人在线视频播放| a级毛片高清免费视频| 亚洲中文字幕乱码熟女在线| 水蜜桃亚洲一二三四在线| 美女撒尿无遮挡免费中国| 国产一区二区三区影院| 耽肉高h喷汁呻吟| 99er热精品视频国产免费| 亚洲欧美自拍明星换脸| 色爰情人网站| 秋霞成人午夜鲁丝一区二区三区| 久久人妻熟女中文字幕AV蜜芽| 国产网址在线观看| 成人午夜剧场| DASD-700美谷朱里| 538prom国产在线视频一区| 亚洲国产精品嫩草影院久久| 日日摸夜夜添夜夜爽出水| 欧美14videosex性欧美成人| 久久只精品99品免费久| 精品视频在线播放| 国产在线亚洲v天堂a| 国产精品午夜小视频观看| 丰满艳妇亲伦| 东北老妇人70OLDMAN| 拔擦拔擦8X永久华人免费播放器| 99re5久久热在线| 69成人免费视频| 2021国产在线视频| 中文字幕 亚洲 有码 在线| 野花香在线观看免费观看大全动漫| 亚洲高清一区二区三区电影| 西施打开双腿下面好紧| 午夜成a人片在线观看| 亚洲AV久久无码精品热九九|