iOS、Android、デスクトップ、Webに対応したUIフレームワークで手軽にアプリを作りましょう!
・各種プラットフォーム間でコードを共有可能
・宣言型UIによる最大100%のコードベース
・Kotlin Multiplatform (KMP) & Jetpack Composeベース
探検
【Kotlin】Compose Multiplatform 1
1デフォルトの名無しさん
2024/06/20(木) 23:47:17.52ID:vbElSNSS2デフォルトの名無しさん
2024/06/20(木) 23:47:44.97ID:vbElSNSS3デフォルトの名無しさん
2024/06/20(木) 23:57:21.20ID:wkeLzLVS KMP対応Composeライブラリ一覧
ttps://github.com/terrakok/kmp-awesome
ttps://github.com/terrakok/kmp-awesome
2024/06/21(金) 04:25:54.59ID:jKJT7aI8
これってなんなの?GUI部分しか作れないの?
5デフォルトの名無しさん
2024/06/21(金) 06:37:17.02ID:XqVI1f39 ビジネスロジック、GUIともにKotlinでコードを書けるよ
2024/06/21(金) 07:04:42.89ID:Atsq9vif
Kotlinは書いてて楽しいからすき
2024/06/21(金) 07:21:00.38ID:Rhs7e8T4
Jetpack Composeやってるけど特に状態まわりでFlutterより書きやすい
2024/06/21(金) 07:34:20.22ID:6EoJ4PVu
お、ついにComposeのスレが立ったか!
みんなKotlinのComposeやろうぜ!!
みんなKotlinのComposeやろうぜ!!
2024/06/21(金) 07:53:39.59ID:59+ROyU+
うおおおやるか
2024/06/24(月) 02:08:16.72ID:LPHYNtWT
Kotlin Fest 2024のメモまとめ
ttps://qiita.com/FalconFlat/items/7f802d95d6e1a686fb96
ttps://qiita.com/FalconFlat/items/7f802d95d6e1a686fb96
2024/06/29(土) 11:04:50.57ID:CFjt49h3
久しぶりに調べたけど
DataStore,RoomやLifeCycleやViewModelもKMPいけるのか?
NavigationもJetbrainsから出るの?
そろそろ感じやな
DataStore,RoomやLifeCycleやViewModelもKMPいけるのか?
NavigationもJetbrainsから出るの?
そろそろ感じやな
2024/06/29(土) 21:55:39.44ID:ootEijyj
SQLiteに関してはSQLDelightはちょっと使いにくいと感じてたからRoomのKMP対応は素直に嬉しい
あと最新SQLite3.46.0バイナリを同梱したドライバを泥のRoomで使えるようになったからON CONFLICTとかを書けるようになって便利
あと最新SQLite3.46.0バイナリを同梱したドライバを泥のRoomで使えるようになったからON CONFLICTとかを書けるようになって便利
2024/06/30(日) 11:47:30.99ID:V38GczC3
クライアントアプリのORMはRoomみたく
FlowみたくDBをwatchする機能ないとつらいよな
たいていリアクティブにつくってるからな
つか、最新のしたら大量アイテムのリストのスクロール
かなり速くなってるけど
デバッグ時はクソ重くてつらい
プロファイルリリースだと速いが
FlowみたくDBをwatchする機能ないとつらいよな
たいていリアクティブにつくってるからな
つか、最新のしたら大量アイテムのリストのスクロール
かなり速くなってるけど
デバッグ時はクソ重くてつらい
プロファイルリリースだと速いが
2024/06/30(日) 12:16:20.73ID:V38GczC3
ナビゲーションをまじめにやろうとしてるけど
どすればいいんだ?
Androidの場合、Activityと便利なサブコンポーネントFragment
でそろぞれ、バックスタックがあって作りやすいけど
Flutterの場合もナビゲーションをネストすれば画面とそのFragmentに
あたるWidgetそれぞれでバックスタックあってナビゲーヨンできるけど
どすればいいんだ?
Androidの場合、Activityと便利なサブコンポーネントFragment
でそろぞれ、バックスタックがあって作りやすいけど
Flutterの場合もナビゲーションをネストすれば画面とそのFragmentに
あたるWidgetそれぞれでバックスタックあってナビゲーヨンできるけど
2024/06/30(日) 12:38:20.77ID:V38GczC3
Androidの場合、ViewModelをActivityやFragmentにそれぞれ結びつけることで
UIの状態の管理が楽だったけど同じようにやりたい
まずActivityに相当するコンポーザブルにそれぞれViewModel結び付けて
さらにFragmentに相当するコンポーザブルにもそれぞれViewModel結び付けて
管理したい
でも例えば
https://zenn.dev/joo_hashi/books/f646fb076f58dc/viewer/42fdf7
だと、1Activity内で画面切り替えてるだけだからViewModelのスコープが望ましくない
UIの状態の管理が楽だったけど同じようにやりたい
まずActivityに相当するコンポーザブルにそれぞれViewModel結び付けて
さらにFragmentに相当するコンポーザブルにもそれぞれViewModel結び付けて
管理したい
でも例えば
https://zenn.dev/joo_hashi/books/f646fb076f58dc/viewer/42fdf7
だと、1Activity内で画面切り替えてるだけだからViewModelのスコープが望ましくない
2024/06/30(日) 13:17:38.17ID:0SycvWcc
androidx.lifecycle.viewmodel.composeのviewModel()を使えばコンポーザブルの中でViewModelを宣言できるようになる
17デフォルトの名無しさん
2024/06/30(日) 13:32:40.23ID:0SycvWcc コンポーザブルの中で画面ごとにViewModelを宣言しちゃうなんてライフライクル管理は大丈夫なの?っていう疑問はあると思うけど、ちゃんと
androidx.navigation:navigation-compose
がきっちり解決してくれてる
蛇足だけど内部実装ロジックについては
「navigation-compose は ViewModel のライフサイクルをどう管理しているのか」
https://y-anz-m.blogspot.com/2021/08/navigation-compose-viewmodel.html
の解説記事が参考になる
androidx.navigation:navigation-compose
がきっちり解決してくれてる
蛇足だけど内部実装ロジックについては
「navigation-compose は ViewModel のライフサイクルをどう管理しているのか」
https://y-anz-m.blogspot.com/2021/08/navigation-compose-viewmodel.html
の解説記事が参考になる
2024/06/30(日) 13:33:32.26ID:V38GczC3
つか、そもそもなぜAAC ViewModelを使いたいのかというと画面回転などの構成変更
でもUIの状態を保持できるからなんだけどそれは基本従来のViewベースのときに
Activityを再作成するからだよね
Jetpack Composeベースの時は基本、画面回転でもActivity再作成しないから
別にViewModel使う必要ねぇのか..
壮大な勘違いをしていたかも
でもUIの状態を保持できるからなんだけどそれは基本従来のViewベースのときに
Activityを再作成するからだよね
Jetpack Composeベースの時は基本、画面回転でもActivity再作成しないから
別にViewModel使う必要ねぇのか..
壮大な勘違いをしていたかも
2024/06/30(日) 13:35:59.53ID:V38GczC3
>>17
解説記事読んでみます
解説記事読んでみます
2024/06/30(日) 13:36:45.55ID:0SycvWcc
2024/06/30(日) 13:44:53.22ID:V38GczC3
>LocalViewModelStoreOwner には MainActivity ではなく NavBackStackEntry が入っていることがわかりました。
あぁ、なるほど
navigation-compose使うとViewModelがMainActivityではなくNavBackStackEntryに紐づくのではないのですね
大変参考になりました
あぁ、なるほど
navigation-compose使うとViewModelがMainActivityではなくNavBackStackEntryに紐づくのではないのですね
大変参考になりました
2024/06/30(日) 13:49:03.15ID:V38GczC3
>>20
ごめんなさい。間違ってました。
今、新規の空のCompose Empty Activity作ってマニュフェストのActivityの設定みたら
android:configChangesに何も設定されていませんでしたね
てっきり、ここにorientationとか設定されているのかと思いました
ごめんなさい。間違ってました。
今、新規の空のCompose Empty Activity作ってマニュフェストのActivityの設定みたら
android:configChangesに何も設定されていませんでしたね
てっきり、ここにorientationとか設定されているのかと思いました
2024/06/30(日) 14:27:03.12ID:V38GczC3
>NavBackStackEntryに紐づくのではないのですね
NavBackStackEntryに紐づくのですね
NavBackStackEntryに紐づくのですね
2024/07/05(金) 10:54:08.96ID:OeiRQJMt
Room絡みのKMP対応が進んでるけど
それにあわせてSqlDriver?
これでBundledDriverみたいなのあるけど
これってKMPじゃなくて普通のAndroidプロジェクトでも使えるのかな?
普通のAndroidプロジェクトでも最新のSqlite使いたい
それにあわせてSqlDriver?
これでBundledDriverみたいなのあるけど
これってKMPじゃなくて普通のAndroidプロジェクトでも使えるのかな?
普通のAndroidプロジェクトでも最新のSqlite使いたい
2024/07/05(金) 14:41:50.48ID:4QgwhxP+
>>24
使えるで
ttps://qiita.com/yuya2011/items/c3baea9a2fc4a6fce970
この記事はRoomでBundledSQLiteDriverしてUPSERT使っててGitHubに泥アプリのサンプルあげてるみたい
使えるで
ttps://qiita.com/yuya2011/items/c3baea9a2fc4a6fce970
この記事はRoomでBundledSQLiteDriverしてUPSERT使っててGitHubに泥アプリのサンプルあげてるみたい
2024/07/05(金) 20:29:17.42ID:OeiRQJMt
>>25
おお、ありがとう
そのついでにBundled版だけでいいからSqliteのウンコ実装も治ってくれると
いいんだが
巨大なBlob挿入するとBlobTooBigExceptionみたいな例外でたり(2MBまで?)
CursorWindowとか勝手に内部でページングしてひどいことしてる
ほんとうにひどい実装になってるからな
これはandroidのプロセス間通信の制限かなんかでなってるのかしらんが
おお、ありがとう
そのついでにBundled版だけでいいからSqliteのウンコ実装も治ってくれると
いいんだが
巨大なBlob挿入するとBlobTooBigExceptionみたいな例外でたり(2MBまで?)
CursorWindowとか勝手に内部でページングしてひどいことしてる
ほんとうにひどい実装になってるからな
これはandroidのプロセス間通信の制限かなんかでなってるのかしらんが
2024/07/08(月) 20:01:44.64ID:2ykBkBhu
Model層ではFlow使って、ViewModelではStateを使ってるけど
ViewModelのStateとFlowを合成したいんだけどStateってどうやってListenするの?
もしくはStateをFlowに変換できませんか?
class ViewModel {
var state by mutableStateOf()
fun watch() {
// stateの変化をリッスンしてモデル層のFlowと合成してcollectしたい
}
最初からStateFlowを使えばいいのかもしれんが、なるべくViewModelではStateで統一したい
ViewModelのStateとFlowを合成したいんだけどStateってどうやってListenするの?
もしくはStateをFlowに変換できませんか?
class ViewModel {
var state by mutableStateOf()
fun watch() {
// stateの変化をリッスンしてモデル層のFlowと合成してcollectしたい
}
最初からStateFlowを使えばいいのかもしれんが、なるべくViewModelではStateで統一したい
2024/07/08(月) 20:22:25.79ID:2ykBkBhu
つか、ちょっと気になった
class HogeViewModel {
@set:JvmName("privateSetHogeState")
var hogeState by mutableStateOf
private set //
fun setHogeState(newValue)
// validationなどのロジック
hogeState = newValue
}
}
名前がぶつかるんだな..
ということでアノテーションつけたけど
これJvm依存か?
class HogeViewModel {
@set:JvmName("privateSetHogeState")
var hogeState by mutableStateOf
private set //
fun setHogeState(newValue)
// validationなどのロジック
hogeState = newValue
}
}
名前がぶつかるんだな..
ということでアノテーションつけたけど
これJvm依存か?
2024/09/23(月) 22:23:25.10ID:oqrINLn7
derivedStateOfに関する記事、オーバーヘッドが大きいことなど書かれてて興味深い
How derivedStateOf works: a deep d(er)ive
https://blog.zachklipp.com/how-derivedstateof-works-a-deep-d-er-ive/
How derivedStateOf works: a deep d(er)ive
https://blog.zachklipp.com/how-derivedstateof-works-a-deep-d-er-ive/
2024/09/25(水) 22:51:12.35ID:5Vhwl/nZ
Composeの動画みるとクリーンアーキテクチャばかりつかってるけど
クリーンアーキテクチャがそんなおすすめなの?
クリーンアーキテクチャがそんなおすすめなの?
2024/09/26(木) 11:43:08.40ID:cTJXoivB
>>30
クリーンアーキテクチャは
・テストしやすい
・認知されていて誰が見てもわかりやすい
からチーム開発のプロジェクトで人気のアーキテクチャだね
ComposeならクリーンアーキテクチャのMVVMが主流、最近はMVVMのViewModelをPresenterに置き換えたMVPも注目されてる
参考
・クリーンアーキテクチャMVVMのアプリ
https://github.com/DroidKaigi/conference-app-2023
・クリーンアーキテクチャMVPのアプリ
https://github.com/DroidKaigi/conference-app-2024
クリーンアーキテクチャは
・テストしやすい
・認知されていて誰が見てもわかりやすい
からチーム開発のプロジェクトで人気のアーキテクチャだね
ComposeならクリーンアーキテクチャのMVVMが主流、最近はMVVMのViewModelをPresenterに置き換えたMVPも注目されてる
参考
・クリーンアーキテクチャMVVMのアプリ
https://github.com/DroidKaigi/conference-app-2023
・クリーンアーキテクチャMVPのアプリ
https://github.com/DroidKaigi/conference-app-2024
2024/09/26(木) 21:37:18.69ID:zQWFDqrj
2024/09/26(木) 22:10:51.19ID:cTJXoivB
>>32
いい感じね
いい感じね
2024/10/16(水) 20:52:08.67ID:mtIOo0k6
CMP 1.7.0きたね
2024/10/18(金) 22:21:01.68ID:vKy5WG2W
デスクトップのドラッグ アンド ドロップできるようになるのか
2024/10/19(土) 09:36:06.80ID:PrnduITI
デスクトップ向け配布ってどうなるのこれ
Javaが必要なんだろ
巨大でいいから.netみたく1パッケージでできるのかな
Javaが必要なんだろ
巨大でいいから.netみたく1パッケージでできるのかな
2024/10/19(土) 10:43:52.14ID:tkdgpds2
デスクトップアプリなら、
CMPで用意されてるgradleコマンドのpackageDistributionForCurrentOS、
あるいはJava標準のjpackageでいけるで
ちゃんとJavaランタイムを同梱した実行可能形式でビルドしてくれる
CMPで用意されてるgradleコマンドのpackageDistributionForCurrentOS、
あるいはJava標準のjpackageでいけるで
ちゃんとJavaランタイムを同梱した実行可能形式でビルドしてくれる
2024/10/19(土) 11:00:27.57ID:PrnduITI
できるのか
ありがとう
デスクトップアプリを作りたいんだがずっと漂流してて
Flutterはマルチウインドウがまだだし、キーボードフォーカスとか微妙というか変というか
その点Composeの方が新しいからもっと微妙かもしれんけど
ありがとう
デスクトップアプリを作りたいんだがずっと漂流してて
Flutterはマルチウインドウがまだだし、キーボードフォーカスとか微妙というか変というか
その点Composeの方が新しいからもっと微妙かもしれんけど
2024/10/19(土) 13:33:04.37ID:tkdgpds2
>>38
Flutterのことはよく知らないけど、
ComposeのデスクトップはJavaのSwingの上にComposeをグラフィックする仕組みで動いてるから、
ウィンドウまわりはかなり安定してるよ
JavaのSwingはJavaで昔からよく使われてきたデスクトップアプリ向けフレームワークね
Flutterのことはよく知らないけど、
ComposeのデスクトップはJavaのSwingの上にComposeをグラフィックする仕組みで動いてるから、
ウィンドウまわりはかなり安定してるよ
JavaのSwingはJavaで昔からよく使われてきたデスクトップアプリ向けフレームワークね
2025/01/17(金) 22:39:39.55ID:EniXNQz7
これは期待
Support multiplatform BackHandler/PredictiveBackHandler. #1771
https://github.com/JetBrains/compose-multiplatform-core/pull/1771
Support multiplatform BackHandler/PredictiveBackHandler. #1771
https://github.com/JetBrains/compose-multiplatform-core/pull/1771
レスを投稿する
ニュース
- 渡邊渚『日本は男性の性欲に甘い国』「女性をどうやって騙して呼び出すか力説するおじさん」日本で多発する性的搾取について思うこと [Ailuropoda melanoleuca★]
- 室外機の上に立っていた中国籍の男(44)逮捕「包丁を持ち歩いてはいけないという日本の法律は知らない」 [七波羅探題★]
- 【安倍元総理殺害事件裁判】「どこから撃つか考えていたら真後ろにいた警備が横に移動したので偶然に思えない何かがあると思った」被告 [煮卵★]
- 【文春】林芳正総務大臣がついに公職選挙法違反で刑事告発された!「常習犯の可能性」「大規模買収事件が明るみに」 [パンナ・コッタ★]
- “結婚隠し”が物議のたぬかな、イベント出演を見送り 運営が説明「本人および来場者の安全確保を…」 [ひかり★]
- 30代の中国籍の男逮捕 東京ディズニーシーのホテルミラコスタ宴会場に刃物持ち侵入、逃走 [どどん★]
- 【悲報】人気VTuberの天音かなたさん、ホロライブ卒業 [485689427]
- 志らく「中国とはあいまいな関係にしておけば上手くいくんです。でも俺らの孫・子が困るでしょうが! さすが高市さん!」 [592058334]
- 山上徹也「安倍晋三は統一教会と政治の関わりの中心にいる方だと思った」 [834922174]
- 【悲報】山上徹也「俺が作った銃なんかゴミみたいなもん。本来の1割の威力しかなかった」 [455031798]
- 小野田紀美クールジャパン戦略担当大臣「中国で公演中止なら、全世界にファン増やせばいいじゃない」 [256556981]
- 【悲報】高市早苗、進撃の巨人の台詞を知ったかでパクリ大炎上wwwwwwwwwwwwwwwwwwww [802034645]
