Flutter Home_Widget続きをやるぜ!

へいへいへーい
数日困ったHomeWidgetが通ってちょっと浮かれ気分のわたしだよ。

前回はホーム画面にウェジット表示するところまでできました✨
今回はですね、そのウェジットに動的に?内容を表示しようという思惑がありまする。

さてさて、さっそくやりますかね、、
Home_Widgetの公式ドキュメントを読みますとFlutter→Kotlinへの渡し(kotlinだけじゃなく、iOSなんかもですかね?)をするためのコードは以下です、

HomeWidget.saveWidgetData<???>(id,値)

こんなんでいけるそうです。
えっとね、渡せる値の形式は決まっておりまして、Listはダメだよってさっき言われた所。(´・ω・`)
(厳密にいうとListで渡せるけど、受け取る側がListを許容できないみたい)
えっとね、、
渡すデータとしては
Boolean,Float,String,Double,Long,
は使えるよってことなので、<>の中は<boolean>とか<String>とかなるわけです。
で、idの部分はKotlin側でデータを拾うときのタグみたいなもんなので、わかりやすい名前を使うと良いです。
で、実際に渡す値はidの後ろにつけると。

HomeWidget.saveWidgetData<String>('testdata', 'てすとだよ');

まぁ、こんな感じでいけるとのこと。
で、ですね、Kotlin側は何を書くかと言いますと、、

    private fun GlanceContent(context: Context, currentState: HomeWidgetGlanceState){
        val data = currentState.preferences
        val restr = data.getString("testdata","うまくいかんかってん、、")

        Box(
            modifier = GlanceModifier.background(Color.White).padding(10.dp)
        ){
            Column {
                Text(restr)
                Text("テストだよ")
                Text("text")
            }
        }

    }

コード一部抜粋。
kotlinの場合(ほかは確認してないからわからんです)
currentState.preferencesからFlutterから渡したデータを取り出せます。
で、実際に(今回は)文字列をゲットしてる処理はここ!

 val restr = data.getString("testdata","うまくいかんかってん、、")

お試し実施なので、いろいろ雑ですが、、
えっとですね、data.getStringで値を拾っていきます。一個目の引数がFlutter側で指定していたIDですね。
で、その次がそのIDが存在しなかったときにセットされる値です。
(この例だと”うまくいかんかってん、、”です)

で、実行しますとこうなるのです。

やほやほーできるぅ

まぁ、ここまではまぁうん。大丈夫なのはわかっておる。
問題は複数データ持たせたいわしの願望が果たせるかであるのである。

・・・とはいえ、Listでは渡せないと言われたので?一個ずつ渡してやりゃいいんだろうと。。いうことで
Flutter
For文クルクルする
Kotlin
While文クルクルする
で、どうにかなりそうです(雑)
ま、ざっくり書くか、、

int counta = 1;
For(String a in stringList){
    HomeWidget.saveWidgetData<String>('text${counta.toString().padleft(3,'0')}', a);
    counta += 1;
}

Flutter側はこんな感じでいけるでしょう
(手打ちしたから間違ってるかも)
で、Kotlin側

val data = currentState.preferences
var loop = true
val strList = ArrayList<String>()
var counta = 1
while(loop){
    val getstr = data.getString("text${counta.toString().padStart(3,'0')}","error")
    if(getstr == null || getstr == "error"){
        loop = false
    }else{
        strList.add(getstr)
        counta += 1
    }
}

ほぉ、久しぶりにwhile文書いたわぁ
まぁ、これで配列データの受け渡しは行ける気がする。
後どうするか?そりゃ何作るかによりますわ。

と、いうことで次はListに入れたデータを全部表示するという処理を考えるですよ!

さて、コードはこんな感じですわ(すぐできちゃった。。

        Box(
            modifier = GlanceModifier.background(Color.White).padding(10.dp)
        ){
            Column {
                for(strData in strList){
                    Text(strData)
                }
                Text("テストだよ")
                Text("text")
            }
        }

Kotlin(Jetpack)ってFlutterに似てるっちゃ似てるんだよね、後ろに「;」とか「,」がつかないくらいかな、(絶対違うw
List.Generate(まちがってるかもw)使えないのはちょっとあれだな。
とはいえ、レイアウト作成の中でfor文とか使えちゃうのはなかなか楽しいですわ。

余談
そういや、画像の受け渡しもできないよなぁ、、と思いましたが、
事前に画像を準備しておけばいいのか
(kotlin側で準備→渡されたデータによって表示する画像を切り替える)
ふむふむ、、なんだ、やりたいことができそうな気がしてきたぞ。。

ではでは。


この記事が気に入ったらサポートをしてみませんか?