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

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

網站百科

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

Flutter布局錦囊---手機號登錄頁

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

設計給的效果如下:

UI布局圖

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

  1. “運營位”,使用自定義的旋轉木馬滑塊組件實現可以滾動的運營位。
  2. “登錄表單”,使用自定義的登錄表單組件實現手機號、驗證碼登錄的表單。
  3. “用戶協議”,使用自定義的用戶協議組件實現用戶協議的聲明文本。

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

第1步:繪制組件樹

手機號登錄頁的組件樹

第2步:實現“運營位”

先把需要引用的自定義組件一次引入,carousel_with_indicator.dartlogin_form.dartuser_agreement.dart文件,它們分別對應《Flutter布局錦囊---輪播圖片與滑塊》、《Flutter布局錦囊---蠟筆畫的表單》和《Flutter布局錦囊---用戶協議聲明》。

import 'package:flutter/material.dart'; import 'widgets/carousel_with_indicator.dart'; import 'widgets/login_form.dart'; import 'widgets/user_agreement.dart';/// 登錄頁面組件。 class LoginPage extends StatefulWidget { @override _LoginPageState createState() => _LoginPageState(); } 

實現“運營位”的UI很簡單,因為在《Flutter布局錦囊---輪播圖片與滑塊》中,已經完成了具體的實現,你只需要調用CarouselWithIndicator組件就可以了。

/// 與登錄頁面組件關聯的狀態子類。 class _LoginPageState extends State<LoginPage> { @override Widget build(BuildContext context) { // TODO: 第4步:實現“用戶協議”,實現“相對下方”布局。// 腳手架(`Scaffold`)組件,實現基本Material設計視覺布局結構。 return Scaffold( body: SafeArea( child: ListView( children: <Widget>[ CarouselWithIndicator(), // TODO: 第3步:實現“登錄表單”。 // TODO: 第4步:實現“用戶協議”。 ], ), ), ); } } 

第3步:實現“登錄表單”

同上,實現“登錄表單”也只需要調用LoginForm組件即可,具體實現在《Flutter布局錦囊---蠟筆畫的表單》中。

// TODO: 第3步:實現“登錄表單”。 LoginForm(), 

第4步:實現“用戶協議”

實現“用戶協議”的時候比較困難,因為你需要相對于屏幕下方來放置組件。筆者沒有在Flutter文檔中找到能同時實現靈活布局和相對屏幕下方布局的方法,只能采取非常土的方法,先計算出屏幕上剩余的空間。

// TODO: 第4步:實現“用戶協議”,實現“相對下方”布局。 /// 屏幕下方的剩余高度。 double screenHeight;// 媒體查詢(`MediaQuery`)類,建立媒體查詢解析給定數據的子樹,返回媒體查詢數據(`MediaQueryData`)類。 // 媒體查詢數據(`MediaQueryData`)類的方向(`orientation`)屬性,媒體的方向,即設備是處于橫向還是縱向模式。 if (MediaQuery.of(context).orientation == Orientation.portrait) { // 媒體查詢數據(`MediaQueryData`)類的大小(`size`)屬性,邏輯像素中的媒體大小,即屏幕的大小。 // 媒體查詢數據(`MediaQueryData`)類的填充(`padding`)屬性,應用程序可以呈現的顯示矩形每一側的物理像素數。 // 填充(`padding`)屬性的頂部(`top`)值是狀態欄高度,底部(`bottom`)值是系統操作欄高度。 screenHeight = MediaQuery.of(context).size.height - MediaQuery.of(context).padding.top -MediaQuery.of(context).padding.bottom - 536; } else { // 橫屏時的高度,用于避免因為切換橫豎屏導致的異常顯示。 screenHeight = 82.0; } 

然后用大小框(SizedBox)組件來占據屏幕剩余的空間,再通過垂直(Column)組件的主軸對齊(mainAxisAlignment)屬性把UserAgreement組件布局于屏幕下方。

// TODO: 第4步:實現“用戶協議”。 // 通過大小框(`SizedBox`)組件來利用屏幕剩余的空間,實現從屏幕下方布局。 SizedBox( height: screenHeight, child: Align( alignment: Alignment.bottomCenter, child: Column( // 垂直(`Column`)組件的主軸對齊(`mainAxisAlignment`)屬性,如何將子組件放在主軸上。 mainAxisAlignment : MainAxisAlignment.end, children: <Widget>[ UserAgreement(), SizedBox(height: 20.0), ], ), ), ), 

第5步:還原效果

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

多一份參考,總有益處

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

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

業務熱線:余經理:13699882642

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

主站蜘蛛池模板: 九色终合九色综合88| 小女生RAPPER入口| 国内国外精品影片无人区| 中文视频在线| 午夜十八岁禁| 飘雪在线观看免费完整版| 久久精品18| 国产欧美日韩国产高清| xx顶级欧美熟妞xxhd| 在线播放日韩欧美亚洲日本| 我要搞av| 日本特殊精油按摩| 伦理片 qvod| 精品久久久久久久国产潘金莲| 耽肉高h喷汁呻吟| 99视频在线观看免费| 伊人久久电影院| 亚洲精品久久久久久久蜜臀老牛| 神马午夜不卡片| 欧美最猛12teevideos| 老师那里好大又粗h男男| 后入式狂顶免费视频| 国产骚妇BB网| 国产精品久久久久久人妻香蕉| fyeex性欧美人与曾| 51成人精品午夜福利AV免费七| 一本道高清码| 亚洲欧美高清在线精品一区| 小舞被爆操| 亚洲 欧美 制服 视频二区| 吻嘴胸全身好爽床大全| 色琪琪无码成人AV视频| 日日a.v拍夜夜添久久免费| 人妖欧美一区二区三区四区| 欧美黑人经典片免费观看| 暖暖视频免费高清在线观看 视频| 快穿之H啪肉| 免费A级毛片无码鲁大师| 麻豆无人区乱码| 嫩草影院久久精品| 欧美日韩一区在线观看|