現(xiàn)學(xué)flutter開發(fā)一個app (3)

最近閑來無事學(xué)習(xí)flutter模仿開發(fā)一個應(yīng)用用來練手, 準(zhǔn)備將學(xué)習(xí)過程記錄成一系列文章備忘, 本文為該系列第(3)篇,全部代碼已上傳: github 界面布局就不再一一記錄,之后主要記錄下特別的地方

導(dǎo)航

  1. showModalBottomSheet
  2. 鍵盤遮蓋問題解決

showModalBottomSheet

商品詳情頁面有一個bottomSheet顯示商品規(guī)格,數(shù)量信息


image.png
showModalBottomSheet(
            context: context,
            builder: (context) {
              return ActivitySelectSpec(
                info: info,
                skus: skus,
                addShoppingCart: true,
              );
            });

鍵盤遮蓋問題解決

這里由于是modalBottomSheet存在一個問題是底部數(shù)量輸入框獲取焦點(diǎn)是會被鍵盤遮住..

正常界面在scaffold里有一個resizeToAvoidBottomInset參數(shù)默認(rèn)是true, 該參數(shù)控制鍵盤彈出時會重繪界面以防界面中元素被鍵盤遮擋. 但是在showModalBottomSheet中產(chǎn)生的widget是無效的


image.png

方案一 :

在showModalBottomSheet的builder中嵌套一個scaffold解決鍵盤遮擋問題. 效果如下


iphone5s

小屏幕下由于本身元素已經(jīng)布滿彈出窗口所以并沒什么問題.


iphone xs max

大屏情況下,鍵盤彈出問題是解決沒問題, 但是會看彈出框無法布滿底部會出現(xiàn)空白. 解決這種方法有控制彈出窗scaffold大小,并不知道內(nèi)部控件大小,

?? 這種方法當(dāng)android:theme為 @android:style/Theme.Light.NoTitleBar.Fullscreen 時無效, 為@android:style/Theme.Light.NoTitleBar時有效.. Fullscreen會影響這個效果 .. 如果想全屏只能initState時設(shè)置 SystemChrome.setEnabledSystemUIOverlays([]);

該方案可以解決鍵盤遮擋問題但會倒是布局不雅.. 目前本人測試可多種布局都無法解決空白問題, 哪位大神知道解決方法的可以告知一下

方案二 :

既然常規(guī)方案無法完成遮擋處理那就手工來控制
效果如下:


image.png

image.png

大小屏都沒問題.

解決思路如下:

當(dāng)鍵盤觸發(fā)時在整體布局底部padding加大底部變動區(qū)域,也就是修改整體界面的顯示區(qū)域接口,原因是滾動界面會記入當(dāng)前的滾動keepScrollOffset會自動調(diào)整顯示區(qū)到當(dāng)前獲取焦點(diǎn).

棄用純手工解決方案

當(dāng)鍵盤出發(fā)彈出時在整個界面下方插入一個鍵盤使得顯示界面變動區(qū)域,其值可以通過 MediaQuery.of(context).viewInsets.bottom 獲取.
取到值之后還需要對界面進(jìn)行滾動,因?yàn)槿绻麊渭冎皇遣迦胍粔K區(qū)域,并不能完全的讓鍵盤不遮擋,只不過是整個界面長度滾動到最下面的時候鍵盤不遮擋元素而已

代碼如下:

double viewport; //無鍵盤時顯示區(qū)域
double maxScroll; //無鍵盤是最大滾動區(qū)域
 void _keyBorderShow() {
    if (_focusNode.hasFocus) {
      Future.delayed(Duration(milliseconds: 150), () {
        double move = _controller.position.maxScrollExtent; // 移動到最底部
        if (maxScroll == 0) {
          //單界面就顯示完成的. 按顯示區(qū)域變動值移動
          move = _controller.position.viewportDimension - viewport + 10;
          if (move < 11) {
            move = _controller.position.maxScrollExtent;
          }
        } else {
          //原本就有滾動距離的,按多出來的距離移動
          move = _controller.position.maxScrollExtent - maxScroll + 10;
        }
        if (_controller.position.maxScrollExtent < move) {
          move = _controller.position.maxScrollExtent;
        }
        _controller.jumpTo(move);
      });
    }
  }

分為2種情況:
1.沒有鍵盤時一個界面就顯示完成了,那么控制器取到的最大滾動值就是0那也就需要計(jì)算顯示區(qū)域變動了多少,然后滾動多少.
2. 沒有鍵盤是一個界面顯示不完原本就有滾動值,那就需要計(jì)算新的最大滾動值和原本的滾動值變化了多少,就滾動多少
這里使用了150毫秒的延時,是為了在鍵盤顯示時等待鍵盤新界面繪制完成,獲取新界面的值.

?? 注意: 這些代碼不能通用,只能說是一個解決思路可以參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衫嵌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子陷舅,更是在濱河造成了極大的恐慌崭闲,老刑警劉巖定罢,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惊橱,死亡現(xiàn)場離奇詭異,居然都是意外死亡箫津,警方通過查閱死者的電腦和手機(jī)蔼紧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門婆硬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奸例,你說我怎么就攤上這事彬犯。” “怎么了查吊?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵谐区,是天一觀的道長。 經(jīng)常有香客問我逻卖,道長宋列,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任评也,我火速辦了婚禮炼杖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盗迟。我一直安慰自己坤邪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布罚缕。 她就那樣靜靜地躺著艇纺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邮弹。 梳的紋絲不亂的頭發(fā)上黔衡,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音腌乡,去河邊找鬼盟劫。 笑死,一個胖子當(dāng)著我的面吹牛导饲,可吹牛的內(nèi)容都是我干的捞高。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼渣锦,長吁一口氣:“原來是場噩夢啊……” “哼硝岗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袋毙,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤型檀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后听盖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胀溺,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年皆看,在試婚紗的時候發(fā)現(xiàn)自己被綠了仓坞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡腰吟,死狀恐怖无埃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毛雇,我是刑警寧澤嫉称,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站灵疮,受9級特大地震影響织阅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜震捣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一荔棉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒿赢,春花似錦江耀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晾腔,卻和暖如春舌稀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灼擂。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工壁查, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剔应。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓睡腿,卻偏偏與公主長得像语御,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子席怪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350