Flutter開發(fā)問題匯總(持續(xù)更新)

問題匯總(持續(xù)更新)

(1) 軟鍵盤

頁面彈出一個(gè)帶有文本輸入框的居中彈框,輸入文本時(shí),軟鍵盤彈出(非覆蓋式彈出)會(huì)將整個(gè)頁面可布局空間高度減小,導(dǎo)致頁面底部的‘確定’按鈕出現(xiàn)在了軟鍵盤上方,影響視覺體驗(yàn)。

Tags: Flutter

解決方案:當(dāng)軟鍵盤彈出時(shí)隱藏‘確定’按鈕,軟鍵盤消失時(shí)再顯示‘確定’按鈕。

思考:采用軟鍵盤覆蓋頁面的方式可以防止頁面可繪制區(qū)域高度被縮小,之所以沒有采用這種方式的原因是這樣做會(huì)導(dǎo)致彈框每次都會(huì)出現(xiàn)在頁面中間,可能也會(huì)被軟鍵盤覆蓋。

(2) 點(diǎn)擊事件失效

FLutter項(xiàng)目中點(diǎn)擊A頁面的某個(gè)button,按下去后手指別松開并靜止不動(dòng),在此buttononTapDown回調(diào)函數(shù)中push頁面B,并且頁面B完全覆蓋頁面A中的這個(gè)button。此時(shí)再松開手指,發(fā)現(xiàn)buttononTapUponTap回調(diào)函數(shù)未被執(zhí)行。

Tags: FlutterGestureDetector、Gesture

解決方案:=未解決

(3)一種好的單例模式寫法

基于靜態(tài)類(static修飾的類)運(yùn)行過程中只被加載一次的事實(shí),實(shí)現(xiàn)了單例模式中單例類始終只有一個(gè)實(shí)例的效果

Tags: Java、設(shè)計(jì)模式、單例模式

class SampleClass{

    private SampleClass(){}

    private static GerateSingleInstance class{
        public static SampleClass instance = new SampleClass();
    }

    public static SampleClass instance(){
        return SampleClass.GerateSingleInstance.instance;
    }
}

(4)Android XML布局tools開頭的屬性

Android Studio支持工具(tools)命名空間中的各種XML屬性,這些屬性支持設(shè)計(jì)時(shí)功能(例如,在片段中顯示哪種布局)或編譯時(shí)行為(例如應(yīng)用于XML資源的縮小模式)。 構(gòu)建應(yīng)用程序時(shí),構(gòu)建工具會(huì)刪除這些屬性,因此不會(huì)影響APK大小或運(yùn)行時(shí)行為。

Tags: Java、tools、xml布局預(yù)覽屬性、Android

<TextView
    xmlns:tools="http://schemas.android.com/tools"
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="@string/hello_world" //tools屬性,僅預(yù)覽時(shí)生效
    tools:showIn="@layout/activity_main" //tools屬性,僅預(yù)覽時(shí)生效
    />

(5)Android創(chuàng)建并添加Module依賴時(shí)報(bào)錯(cuò)ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve project :login_component.

Tags: Java、Android、moudle

解決方案:
1.將新建的`module_name`目錄下`build.gradle`的`apply plugin: 'com.android.application'`改為`apply plugin: 'com.android.library'`
2.刪除上述`build.gradle`中`defaultConfig`里面的`applicationId`
3.此時(shí)即可在`app`模塊里添加新建`module_name`的依賴

(6)報(bào)錯(cuò):Could not find an option named "target-platform"

Tags: FlutterJava、Android

解決方案:

  1. 編輯文件 flutter/packages/flutter_tools/lib/src/android/gradle.dart, 設(shè)置 -Ptarget-platform=android-arm;
  2. 刪除文件 flutter/bin/cache/flutter_tools.snapshot;
  3. 運(yùn)行flutter run編譯運(yùn)行程序(注意:需要移除--target-platform=android-arm參數(shù)!!)。

(7)華為手機(jī)(Huawei DUB AL00AHuawei DUB AL00、Huawei BKK AL10、Huawei ARS AL00、Huawei DUB AL20、...)App啟動(dòng)閃退,F(xiàn)lutter引擎報(bào)錯(cuò):[ERROR:flutter/shell/gpu/gpu_surface_gl.cc(70)] Failed to setup Skia Gr context.

Tags: Flutter、Engine、Android

解決方案

截止目前Flutter最新穩(wěn)定版本是v1.12.13+hotfix6。經(jīng)過測(cè)試,F(xiàn)lutter版本高于v1.10.9時(shí),在以上所屬機(jī)型上必現(xiàn)啟動(dòng)Crash。當(dāng)把Flutter版本切換至v1.10.9及以下時(shí)則不會(huì)出現(xiàn)問題。因此如果在華為手機(jī)上出現(xiàn)此類問題時(shí)只需將Flutter版本降至v1.10.9及以下即可。

最后附上issue地址: https://github.com/flutter/flutter/issues/46866

(8)安卓打包時(shí),gradle用錯(cuò)了包名(pm installing wrong package name)

Tags: Android、Gradle、Cache

解決方案

1、移除.gradle/caches緩存目錄
2、點(diǎn)擊Android Studio File -> Sync project with Gradle files選項(xiàng)
3、第2步執(zhí)行完之后重新打包app就ok啦

參考文獻(xiàn):https://stackoverflow.com/questions/22155938/android-studio-gets-package-name-wrong-when-running-apk/29862639#29862639

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容