標籤: Flutter

  • riverpod 3.0

    不知不覺就更新了。

    當初它還在 dev 的時候我就有試過一些東西,今天也把我直播畫面上的聊天室給更新上去了。

    在我的聊天室專案中最主要被影響到的應該是 StateNotifierProvider 被移到 legacy 了,基本上這一升級就會跑紅線出來,很容易找到。

    偷懶的做法,就是引用 legacy 的檔案,這樣程式碼本身就不用改。

    勤勞一點的話,就改用 NotifierProvider,如果是像我一樣沒有使用程式碼生成情況,要把 (ref) => Notifier() 中的 ref 給拿掉,Notifier 則要實作它的 build()。

    另外就是 StateProvider 也被丟到 legacy 了,這個比較煩,因為我覺得這個沒要做什麼的話,一行就能寫完還是比較輕鬆的。

    有用程式碼生成的是我在公司寫的範例專案,但現在公司有去限制套件庫得用公司內部的, riverpod 的升級還得申請,那邊的話就先放著吧……。

  • 啟動 Android Studio 就跑 build_runner watch

    記錄一下,因為很煩。

    這東西經常會忘記跑,尤其是產生出來的東西明明不會動到 hashcode 會變這點更煩。

    到 File -> Settings -> Tools -> Startup Tasks 新增一個 Execute 選 Script text,指令是 dart run build_runner watch,有用 fvm 的話記得加在開頭。

  • 14年

    有時候就是你也沒有很想要相信,甚至這個社會會教你一些傳統美德,努力會出頭天啊、先累積實力啊之類的。

    沒有,你運氣好就能做14年工作才被開除。

    搞不好運氣再好一點,法官還能判一個做不到新人做三個月能做完的工作的大佬復職。

    再厲害一點的話,大概就是工作18年,不會民國轉西元,但當到資訊室副主任吧。

    希望我昨天教了我的上級工程師怎麼在建構式用 super 能累積我的功德、讓我中樂透頭獎。

  • Flutter 跳兩個版

    最近在升級專案使用的 flutter 到 3.27,也升級了AGP,遇到各種問題。

    先是有套件是沒有在 gradle 放 namespace,丟了 PR 也不理,只好自己 fork。

    然後不知道為什麼,沒放 jvmTarget 的套件也會有相容性問題,就隨便給他指定一個低的。

    allprojects {
        tasks.withType(KotlinCompile).configureEach {
            kotlinOptions {
                if (jvmTarget == null) {
                    jvmTarget = JavaVersion.VERSION_1_8.toString()
                }
            }
        }
    }

    然後其他的事讓 toolchain 處理。

    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(21)
        }
    }

    然後怪事就來了,flutter_statusbarcolor_ns 這個套件不知道為什麼,toolchain 指定 21 的時候會跟你說沒辦法跟 17 相容,指定 17 的時候又會跳 class file has wrong version 65.0, should be 61.0,後來實在搞不定,最後只好在 gradle.properties 加個設定忽略這個檢查。

    kotlin.jvm.target.validation.mode = IGNORE

    有空再研究為什麼。

  • Spacer 與 Expanded

    同事問了我就寫一下。

    我們在 Column 裡有時會放 Spacer(),插在中間可以把其他元件用剩的空間填滿,實現左邊元件歸左邊,右邊元件歸右邊的效果。

    同事問的是,現在的元件中,頭尾都有元件外,中間有個 TextView 與 Spacer,那他想把 TextView 占滿以讓它的 overflow 設成 ellipsis 的時候達到想像中的效果,Spacer 要不要拿掉?

    首先要知道,Expanded 是一個 fit: FlexFit.tight 的 Flexible,而 Spacer 也只是包著 SizedBox.shrink() 的 Expanded。

    所以問題的答案是:要拿掉。

    否則 Expanded 與 Spacer 會分掉剩餘空間。