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ランタイムを同梱した実行可能形式でビルドしてくれる
レスを投稿する
ニュース
- 高市首相「戦艦」言及、間違い否定 政府答弁書 ★2 [ぐれ★]
- 中国クルーズ船、日本への航海中止 日中関係悪化が影響か [蚤の市★]
- 【日中対立】在日本中国大使館、サンフランシスコ講和条約「不法かつ無効な文書」とSNSに投稿 高市首相が党首討論で引用 [ぐれ★]
- 拳銃24丁を中国から日本国内に輸入した疑い 中国人の46歳の男逮捕 1丁約3000円で販売 [七波羅探題★]
- 【文春】AKB48『紅白歌合戦』出場へ! 前田敦子&大島優子が限定復活! 『ヘビロテ』など黄金期メドレー披露 神7の多くが出場 [冬月記者★]
- 渡邊渚『日本は男性の性欲に甘い国』「女性をどうやって騙して呼び出すか力説するおじさん」日本で多発する性的搾取について思うこと ★3 [Ailuropoda melanoleuca★]
- 高市を逐一擁護していたJSF、さすがに高市の「戦艦」発言に耐えきれず批判 ネトウヨ発狂へ [165981677]
- 【悲報】日本政府、フランスに「習近平をG7に呼ばないで」と懇願していたwww [237216734]
- ワイのpcxさよくてリッター35ぐらいなんやけど
- 【悲報】阪神タイガースさん、助っ人全員クビにしてしまう
- 【悲報】人気VTuberの天音かなたさん、ホロライブ卒業★4 [485689427]
- 👊👊👊👊🏡👊👊👊👊
