{"id":57,"date":"2026-01-04T18:15:34","date_gmt":"2026-01-04T18:15:34","guid":{"rendered":"https:\/\/meumundomobile.com.br\/?p=57"},"modified":"2026-01-04T18:56:03","modified_gmt":"2026-01-04T18:56:03","slug":"realtime-database-firebase-kmp","status":"publish","type":"post","link":"https:\/\/meumundomobile.com.br\/?p=57","title":{"rendered":"How to implements Realtime Database Firebase in KMP"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"465\" src=\"https:\/\/meumundomobile.com.br\/wp-content\/uploads\/2026\/01\/firebase-database.png\" alt=\"\" class=\"wp-image-59\" style=\"aspect-ratio:2.2022389429253075;width:610px;height:auto\" srcset=\"https:\/\/meumundomobile.com.br\/wp-content\/uploads\/2026\/01\/firebase-database.png 1024w, https:\/\/meumundomobile.com.br\/wp-content\/uploads\/2026\/01\/firebase-database-300x136.png 300w, https:\/\/meumundomobile.com.br\/wp-content\/uploads\/2026\/01\/firebase-database-768x349.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This post is very similar to previous; how to implements remote config.<br>If you arrived here I hope this post will be useful. <br>First I will be show how to comunicate with Realtime Database &#8211; Firebase; <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This communication will works with inputs e outputs, other words reading and writing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I hope you have minimal know em native platforms (Android and iOS); remember this post I don&#8217;t use libs what will be facilitate to implementation Firebase Realtime Database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s go; I\u00b4m going this post in three parts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; Native implementation (basic configs)<br>&#8211; KMP implementation<br>&#8211; Native implementation (iOS configs)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Native implementation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For the natives platform follow the documentation official.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/firebase.google.com\/docs\/remote-config\/get-started\">https:\/\/firebase.google.com\/docs\/remote-config\/get-started<\/a><br><br>Also lets go use dependency injection in this project.<br>The dependency injection used is Koin; follow the official documentation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/insert-koin.io\/docs\/reference\/koin-mp\/kmp\">https:\/\/insert-koin.io\/docs\/reference\/koin-mp\/kmp<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">KMP implementation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s remember how to organize the project KMP.<br><br><strong>-Project<br>-Project\/ComposeApp<br>-Project\/ComposeApp\/androidMain<br>-Project\/ComposeApp\/commonMain<br>-Project\/ComposeApp\/iosMain<br>-Project\/iosApp\/iosApp<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">These are the main classes to be created in the project.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>-Project\/ComposeApp\/androidMain<\/strong>\/pack\/FirebaseDataBaseRealTimeBridge.android.kt<br><strong>-Project\/ComposeApp\/androidMain<\/strong>\/pack\/KoinInit.kt<br><strong>-Project\/ComposeApp\/androidMain<\/strong>\/pack\/KoinModuleAndroid.kt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>-Project\/ComposeApp\/commonMain\/<\/strong>pack\/FirebaseDataBaseRealTimeBridge.kt<br><strong>-Project\/ComposeApp\/commonMain<\/strong>\/pack\/FirebaseRealTimeDataBase.kt<br><strong>-Project\/ComposeApp\/commonMain\/<\/strong>pack\/KoinInit.kt<br><strong>-Project\/ComposeApp\/commonMain\/<\/strong>pack\/KoinModule.kt<br><strong>-Project\/ComposeApp\/commonMain\/<\/strong>pack\/FirebaseRealTimeDataBaseScreen.kt<br><strong>-Project\/ComposeApp\/commonMain\/<\/strong>pack\/FirebaseRealTimeDataBaseViewModel.kt<br><br><strong>-Project\/ComposeApp\/androidMain<\/strong>\/pack\/FirebaseDataBaseRealTimeBridge.ios.kt<br><strong>-Project\/ComposeApp\/androidMain<\/strong>\/pack\/KoinInit.kt<br><strong>-Project\/ComposeApp\/androidMain<\/strong>\/pack\/KoinModuleAndroid.kt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>-Project\/iosApp\/iosApp<\/strong>\/SwiftFirebaseDataBaseRealTime.swift<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We will create the following class inside <strong>&#8220;Project\/ComposeApp\/androidMain&#8221;<\/strong>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each with their own responsibility. This class will do communication with Firebase.<br>Which later will do implements by ViewModel.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>actual class FirebaseDataBaseRealTimeBridge : FirebaseRealTimeDataBase {\n\n    private val myFireBaseDataBase: FirebaseDatabase = Firebase.database\n\n    actual override fun fetchDataNodo(nodoName: String,\n                                      onSuccess: (String) -> Unit,\n                                      onError: (Exception) -> Unit) {\n\n        myFireBaseDataBase.getReference( nodoName)\n            .addValueEventListener(object : ValueEventListener {\n                override fun onDataChange(snapshot: DataSnapshot) {\n                    onSuccess(snapshot.toString())\n                }\n\n                override fun onCancelled(error: DatabaseError) {\n                    onCancelled(error)\n                }\n            })\n    }\n\n    actual override fun putDataByNodoName(nodoName: String, keyNewNodo: String, valueForNodo: String) {\n\n        val newValues = mapOf(\n            keyNewNodo to valueForNodo\n        )\n\n        myFireBaseDataBase.getReference(nodoName)\n            .updateChildren(newValues)\n            .addOnSuccessListener { }\n            .addOnFailureListener { error ->\n                throw Exception(\"Fail save\")\n            }\n    }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\">actual <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">FirebaseDataBaseRealTimeBridge<\/span><span style=\"color: #F8F8F2\"> : <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">private<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> myFireBaseDataBase: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseDatabase<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Firebase.database<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    actual <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">fetchDataNodo<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                      onSuccess: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                      onError: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">Exception<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        myFireBaseDataBase.<\/span><span style=\"color: #50FA7B\">getReference<\/span><span style=\"color: #F8F8F2\">( nodoName)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            .<\/span><span style=\"color: #50FA7B\">addValueEventListener<\/span><span style=\"color: #F8F8F2\">(object : <\/span><span style=\"color: #8BE9FD; font-style: italic\">ValueEventListener<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">onDataChange<\/span><span style=\"color: #F8F8F2\">(snapshot: <\/span><span style=\"color: #8BE9FD; font-style: italic\">DataSnapshot<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">onSuccess<\/span><span style=\"color: #F8F8F2\">(snapshot.<\/span><span style=\"color: #50FA7B\">toString<\/span><span style=\"color: #F8F8F2\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">onCancelled<\/span><span style=\"color: #F8F8F2\">(error: <\/span><span style=\"color: #8BE9FD; font-style: italic\">DatabaseError<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">onCancelled<\/span><span style=\"color: #F8F8F2\">(error)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            })<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    actual <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">putDataByNodoName<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, keyNewNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, valueForNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> newValues <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">mapOf<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            keyNewNodo to valueForNodo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        myFireBaseDataBase.<\/span><span style=\"color: #50FA7B\">getReference<\/span><span style=\"color: #F8F8F2\">(nodoName)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            .<\/span><span style=\"color: #50FA7B\">updateChildren<\/span><span style=\"color: #F8F8F2\">(newValues)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            .<\/span><span style=\"color: #50FA7B\">addOnSuccessListener<\/span><span style=\"color: #F8F8F2\"> { }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            .<\/span><span style=\"color: #50FA7B\">addOnFailureListener<\/span><span style=\"color: #F8F8F2\"> { error <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">throw<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">Exception<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;Fail save&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>actual class KoinInit() {\n\n    constructor(androidContext: Context) : this() {\n        initKoin(androidContext)\n    }\n\n    fun initKoin(androidContext: Context) {\n        val modules = sharedModules() + moduleAndroid()\n        startKoin {\n            androidLogger()\n            androidContext(androidContext = androidContext)\n            modules(modules = modules)\n        }\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\">actual <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">KoinInit<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">constructor<\/span><span style=\"color: #F8F8F2\">(androidContext: <\/span><span style=\"color: #8BE9FD; font-style: italic\">Context<\/span><span style=\"color: #F8F8F2\">) : <\/span><span style=\"color: #8BE9FD; font-style: italic\">this<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">initKoin<\/span><span style=\"color: #F8F8F2\">(androidContext)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initKoin<\/span><span style=\"color: #F8F8F2\">(androidContext: <\/span><span style=\"color: #8BE9FD; font-style: italic\">Context<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> modules <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">sharedModules<\/span><span style=\"color: #F8F8F2\">() <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">moduleAndroid<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">startKoin<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">androidLogger<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">androidContext<\/span><span style=\"color: #F8F8F2\">(androidContext <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> androidContext)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">modules<\/span><span style=\"color: #F8F8F2\">(modules <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> modules)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun moduleAndroid() = module {\n\n    single&lt;FirebaseRealTimeDataBase> { FirebaseDataBaseRealTimeBridge() }\n    factory { FirebaseRealTimeDataBaseViewModel(get&lt;FirebaseRealTimeDataBase>() as FirebaseDataBaseRealTimeBridge) }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">moduleAndroid<\/span><span style=\"color: #F8F8F2\">() <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">module<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">single<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\">&gt; { <\/span><span style=\"color: #50FA7B\">FirebaseDataBaseRealTimeBridge<\/span><span style=\"color: #F8F8F2\">() }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">factory<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">FirebaseRealTimeDataBaseViewModel<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">get&lt;<\/span><span style=\"color: #F8F8F2\">FirebaseRealTimeDataBase<\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\">() <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> FirebaseDataBaseRealTimeBridge) }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We will create the following class inside <strong>&#8220;Project\/ComposeApp\/iosMain&#8221;<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>actual class FirebaseDataBaseRealTimeBridge(private val delegateFirebaseRealTimeDataBase: FirebaseRealTimeDataBase) : FirebaseRealTimeDataBase {\n    actual override fun fetchDataNodo(\n        nodoName: String,\n        onSuccess: (String) -> Unit,\n        onError: (Exception) -> Unit,\n    ) {\n        delegateFirebaseRealTimeDataBase.fetchDataNodo(nodoName, onSuccess, onError)\n    }\n\n    actual override fun putDataByNodoName(\n        nodoName: String,\n        keyNewNodo: String,\n        valueForNodo: String,\n    ) {\n        delegateFirebaseRealTimeDataBase.putDataByNodoName(nodoName = nodoName, keyNewNodo = keyNewNodo, valueForNodo = valueForNodo)\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\">actual <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">FirebaseDataBaseRealTimeBridge<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">private<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> delegateFirebaseRealTimeDataBase: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\">) : <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    actual <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">fetchDataNodo<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        onSuccess: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        onError: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">Exception<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        delegateFirebaseRealTimeDataBase.<\/span><span style=\"color: #50FA7B\">fetchDataNodo<\/span><span style=\"color: #F8F8F2\">(nodoName, onSuccess, onError)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    actual <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">putDataByNodoName<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        keyNewNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        valueForNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        delegateFirebaseRealTimeDataBase.<\/span><span style=\"color: #50FA7B\">putDataByNodoName<\/span><span style=\"color: #F8F8F2\">(nodoName <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodoName, keyNewNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> keyNewNodo, valueForNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> valueForNodo)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Don&#8217;t forget to configure dependency injection in the iOS; follow the examples below:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@OptIn(ExperimentalObjCName::class, BetaInteropApi::class)\n@ObjCName(name = \"KoinInit\", exact = true)\n@ExportObjCClass\nactual class KoinInit() {\n\n    fun initKoin(delegateFirebaseRemoteConfigs: FirebaseRemoteConfigs,\n                 delegateFirebaseRealTimeDataBase: FirebaseRealTimeDataBase) {\n\n        val modules = sharedModules() + moduleIos(delegateFirebaseRemoteConfigs, delegateFirebaseRealTimeDataBase)\n        startKoin {\n            modules(modules = modules)\n        }.also {\n            koinInstance = it\n        }\n\n    }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8BE9FD; font-style: italic\">@OptIn<\/span><span style=\"color: #F8F8F2\">(ExperimentalObjCName::<\/span><span style=\"color: #50FA7B\">class<\/span><span style=\"color: #F8F8F2\">, BetaInteropApi::<\/span><span style=\"color: #50FA7B\">class<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8BE9FD; font-style: italic\">@ObjCName<\/span><span style=\"color: #F8F8F2\">(name <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;KoinInit&quot;<\/span><span style=\"color: #F8F8F2\">, exact <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8BE9FD; font-style: italic\">@ExportObjCClass<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">actual <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">KoinInit<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initKoin<\/span><span style=\"color: #F8F8F2\">(delegateFirebaseRemoteConfigs: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRemoteConfigs<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                 delegateFirebaseRealTimeDataBase: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> modules <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">sharedModules<\/span><span style=\"color: #F8F8F2\">() <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">moduleIos<\/span><span style=\"color: #F8F8F2\">(delegateFirebaseRemoteConfigs, delegateFirebaseRealTimeDataBase)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">startKoin<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">modules<\/span><span style=\"color: #F8F8F2\">(modules <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> modules)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }.<\/span><span style=\"color: #50FA7B\">also<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            koinInstance <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> it<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Note: one passed as a parameter cames iOS native;<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun moduleIos(delegateFirebaseRealTimeDataBase: FirebaseRealTimeDataBase) = module {\n\n    single&lt;FirebaseRealTimeDataBase> { FirebaseDataBaseRealTimeBridge(delegateFirebaseRealTimeDataBase) }\n    factory { FirebaseRealTimeDataBaseViewModel(get&lt;FirebaseRealTimeDataBase>() as FirebaseDataBaseRealTimeBridge) }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">moduleIos<\/span><span style=\"color: #F8F8F2\">(delegateFirebaseRealTimeDataBase: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\">) <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">module<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">single<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\">&gt; { <\/span><span style=\"color: #50FA7B\">FirebaseDataBaseRealTimeBridge<\/span><span style=\"color: #F8F8F2\">(delegateFirebaseRealTimeDataBase) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">factory<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">FirebaseRealTimeDataBaseViewModel<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">get&lt;<\/span><span style=\"color: #F8F8F2\">FirebaseRealTimeDataBase<\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\">() <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> FirebaseDataBaseRealTimeBridge) }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We will create the following class inside <strong>&#8220;Project\/ComposeApp\/commonMain&#8221;<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>expect class KoinInit<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\">expect <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">KoinInit<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun sharedModules() = module { }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">sharedModules<\/span><span style=\"color: #F8F8F2\">() <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">module<\/span><span style=\"color: #F8F8F2\"> { }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly> expect class FirebaseDataBaseRealTimeBridge: FirebaseRealTimeDataBase {\n\n     override fun fetchDataNodo(\n         nodoName: String,\n         onSuccess: (String) -> Unit,\n         onError: (Exception) -> Unit,\n     )\n\n     override fun putDataByNodoName(nodoName: String, keyNewNodo: String, valueForNodo: String)\n\n }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\"> expect <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">FirebaseDataBaseRealTimeBridge<\/span><span style=\"color: #F8F8F2\">: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">     <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">fetchDataNodo<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">         nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">         onSuccess: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">         onError: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">Exception<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">     )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">     <\/span><span style=\"color: #FF79C6\">override<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">putDataByNodoName<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, keyNewNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, valueForNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>interface FirebaseRealTimeDataBase {\n    fun fetchDataNodo(nodoName: String = \"messages\",\n                      onSuccess: (String) -> Unit,\n                      onError: (Exception) -> Unit)\n    fun putDataByNodoName(nodoName: String, keyNewNodo: String, valueForNodo: String)\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">interface<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">fetchDataNodo<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;messages&quot;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                      onSuccess: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                      onError: (<\/span><span style=\"color: #8BE9FD; font-style: italic\">Exception<\/span><span style=\"color: #F8F8F2\">) -&gt; <\/span><span style=\"color: #8BE9FD; font-style: italic\">Unit<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">putDataByNodoName<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, keyNewNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, valueForNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class FirebaseRealTimeDataBaseViewModel(\n    private val firebaseDataBaseRealTimeBridge: FirebaseDataBaseRealTimeBridge\n): BaseViewModel() {\n\n    private val _nodo = MutableStateFlow&lt;String>( \"messages\")\n    val nodo: StateFlow&lt;String> = _nodo\n\n    private val _stateSnapShotFiebaseDataBaseRealTimeByNodo = MutableStateFlow&lt;GetRealTimeDataBaseUiState>(GetRealTimeDataBaseUiState.Loading(step = \"\"))\n    val stateSnapShotFiebaseDataBaseRealTimeByNodo: StateFlow&lt;GetRealTimeDataBaseUiState> = _stateSnapShotFiebaseDataBaseRealTimeByNodo\n    var jobGetSnaptShotFirebaseDataBaseRealTime: Job? = SupervisorJob()\n\n\n    private val _statePutFiebaseDataBaseRealTimeByNodo = MutableStateFlow&lt;PutRealTimeDataBaseUiState>(PutRealTimeDataBaseUiState.Idle)\n    val statePutFiebaseDataBaseRealTimeByNodo: StateFlow&lt;PutRealTimeDataBaseUiState> = _statePutFiebaseDataBaseRealTimeByNodo\n    var jobPutDataFirebaseDataBaseRealTime: Job? = SupervisorJob()\n\n    init {\n        viewModelScope.launch {\n            getSnapShotFirebaseDataBaseRealTime(nodoName = nodo.value)\n        }\n    }\n    \n    fun putDataFirebaseDataBaseRealTime(nodoName: String, keyNewNodo: String, valueForNodo: String){\n\n        if(keyNewNodo.isEmpty() || valueForNodo.isEmpty() ){\n            return\n        }\n\n        jobPutDataFirebaseDataBaseRealTime?.cancel()\n        jobPutDataFirebaseDataBaseRealTime = viewModelScope.launch {\n            try {\n\n                if(nodoName != nodo.value){\n                    _nodo.value = nodoName\n                    async {\n                        getSnapShotFirebaseDataBaseRealTime(nodoName = nodoName)\n                    }.await()\n                }\n\n                delay(timeMillis = 1000)\n                async {\n                    firebaseDataBaseRealTimeBridge.putDataByNodoName(nodoName = nodoName, keyNewNodo = keyNewNodo, valueForNodo = valueForNodo)\n                }.await()\n                delay(timeMillis = 100)\n\n            }catch (exception: Exception){\n                _statePutFiebaseDataBaseRealTimeByNodo.value = PutRealTimeDataBaseUiState.Error(exception.message.toString())\n                delay(timeMillis = 100)\n            }\n\n        }\n    }\n\n    fun getSnapShotFirebaseDataBaseRealTime(nodoName: String) {\n        jobGetSnaptShotFirebaseDataBaseRealTime?.cancel()\n        jobGetSnaptShotFirebaseDataBaseRealTime = viewModelScope.launch {\n            try {\n\n                async {\n                    firebaseDataBaseRealTimeBridge.fetchDataNodo(\n                        nodoName = nodoName,\n                        onSuccess = { it ->\n                            _stateSnapShotFiebaseDataBaseRealTimeByNodo.value = GetRealTimeDataBaseUiState.Success(it)\n                        },\n                        onError =  { exception ->\n                            _stateSnapShotFiebaseDataBaseRealTimeByNodo.value = GetRealTimeDataBaseUiState.Error(exception.message.toString())\n                        }\n                    )\n                }.await()\n\n            }catch (exception: Exception){\n                _stateSnapShotFiebaseDataBaseRealTimeByNodo.value = GetRealTimeDataBaseUiState.Error(exception.message.toString())\n                delay(timeMillis = 100)\n            }\n        }\n    }\n\n    sealed class GetRealTimeDataBaseUiState {\n        data class Loading(val step: String = \"loading\") : GetRealTimeDataBaseUiState()\n        data class Error(val message: String = \"\") : GetRealTimeDataBaseUiState()\n        data class Success(val valueSnapShot: String = \"\") : GetRealTimeDataBaseUiState()\n    }\n\n    sealed class PutRealTimeDataBaseUiState {\n        object Idle : PutRealTimeDataBaseUiState()\n        data class Error(val message: String = \"\") : PutRealTimeDataBaseUiState()\n    }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">FirebaseRealTimeDataBaseViewModel<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">private<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> firebaseDataBaseRealTimeBridge: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseDataBaseRealTimeBridge<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">): <\/span><span style=\"color: #8BE9FD; font-style: italic\">BaseViewModel<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">private<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> _nodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">MutableStateFlow<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt;( <\/span><span style=\"color: #F1FA8C\">&quot;messages&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> nodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">StateFlow<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt; <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> _nodo<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">private<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> _stateSnapShotFiebaseDataBaseRealTimeByNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">MutableStateFlow<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">GetRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">&gt;(GetRealTimeDataBaseUiState.<\/span><span style=\"color: #50FA7B\">Loading<\/span><span style=\"color: #F8F8F2\">(step <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> stateSnapShotFiebaseDataBaseRealTimeByNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">StateFlow<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">GetRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">&gt; <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> _stateSnapShotFiebaseDataBaseRealTimeByNodo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> jobGetSnaptShotFirebaseDataBaseRealTime: <\/span><span style=\"color: #8BE9FD; font-style: italic\">Job<\/span><span style=\"color: #F8F8F2\">? <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">SupervisorJob<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">private<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> _statePutFiebaseDataBaseRealTimeByNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">MutableStateFlow<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">PutRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">&gt;(PutRealTimeDataBaseUiState.Idle)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> statePutFiebaseDataBaseRealTimeByNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">StateFlow<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">PutRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">&gt; <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> _statePutFiebaseDataBaseRealTimeByNodo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> jobPutDataFirebaseDataBaseRealTime: <\/span><span style=\"color: #8BE9FD; font-style: italic\">Job<\/span><span style=\"color: #F8F8F2\">? <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">SupervisorJob<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">init<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        viewModelScope.<\/span><span style=\"color: #50FA7B\">launch<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">getSnapShotFirebaseDataBaseRealTime<\/span><span style=\"color: #F8F8F2\">(nodoName <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">putDataFirebaseDataBaseRealTime<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, keyNewNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, valueForNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">){<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\">(keyNewNodo.<\/span><span style=\"color: #50FA7B\">isEmpty<\/span><span style=\"color: #F8F8F2\">() <\/span><span style=\"color: #FF79C6\">||<\/span><span style=\"color: #F8F8F2\"> valueForNodo.<\/span><span style=\"color: #50FA7B\">isEmpty<\/span><span style=\"color: #F8F8F2\">() ){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        jobPutDataFirebaseDataBaseRealTime?.<\/span><span style=\"color: #50FA7B\">cancel<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        jobPutDataFirebaseDataBaseRealTime <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> viewModelScope.<\/span><span style=\"color: #50FA7B\">launch<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">try<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\">(nodoName <\/span><span style=\"color: #FF79C6\">!=<\/span><span style=\"color: #F8F8F2\"> nodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\">){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    _nodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodoName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">async<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #50FA7B\">getSnapShotFirebaseDataBaseRealTime<\/span><span style=\"color: #F8F8F2\">(nodoName <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodoName)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }.<\/span><span style=\"color: #50FA7B\">await<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">delay<\/span><span style=\"color: #F8F8F2\">(timeMillis <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1000<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">async<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    firebaseDataBaseRealTimeBridge.<\/span><span style=\"color: #50FA7B\">putDataByNodoName<\/span><span style=\"color: #F8F8F2\">(nodoName <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodoName, keyNewNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> keyNewNodo, valueForNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> valueForNodo)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }.<\/span><span style=\"color: #50FA7B\">await<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">delay<\/span><span style=\"color: #F8F8F2\">(timeMillis <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">100<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><span style=\"color: #FF79C6\">catch<\/span><span style=\"color: #F8F8F2\"> (exception: <\/span><span style=\"color: #8BE9FD; font-style: italic\">Exception<\/span><span style=\"color: #F8F8F2\">){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                _statePutFiebaseDataBaseRealTimeByNodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> PutRealTimeDataBaseUiState.<\/span><span style=\"color: #50FA7B\">Error<\/span><span style=\"color: #F8F8F2\">(exception.message.<\/span><span style=\"color: #50FA7B\">toString<\/span><span style=\"color: #F8F8F2\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">delay<\/span><span style=\"color: #F8F8F2\">(timeMillis <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">100<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">getSnapShotFirebaseDataBaseRealTime<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        jobGetSnaptShotFirebaseDataBaseRealTime?.<\/span><span style=\"color: #50FA7B\">cancel<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        jobGetSnaptShotFirebaseDataBaseRealTime <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> viewModelScope.<\/span><span style=\"color: #50FA7B\">launch<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">try<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">async<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    firebaseDataBaseRealTimeBridge.<\/span><span style=\"color: #50FA7B\">fetchDataNodo<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        nodoName <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodoName,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        onSuccess <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> { it <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            _stateSnapShotFiebaseDataBaseRealTimeByNodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> GetRealTimeDataBaseUiState.<\/span><span style=\"color: #50FA7B\">Success<\/span><span style=\"color: #F8F8F2\">(it)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        onError <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\">  { exception <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            _stateSnapShotFiebaseDataBaseRealTimeByNodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> GetRealTimeDataBaseUiState.<\/span><span style=\"color: #50FA7B\">Error<\/span><span style=\"color: #F8F8F2\">(exception.message.<\/span><span style=\"color: #50FA7B\">toString<\/span><span style=\"color: #F8F8F2\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }.<\/span><span style=\"color: #50FA7B\">await<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><span style=\"color: #FF79C6\">catch<\/span><span style=\"color: #F8F8F2\"> (exception: <\/span><span style=\"color: #8BE9FD; font-style: italic\">Exception<\/span><span style=\"color: #F8F8F2\">){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                _stateSnapShotFiebaseDataBaseRealTimeByNodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> GetRealTimeDataBaseUiState.<\/span><span style=\"color: #50FA7B\">Error<\/span><span style=\"color: #F8F8F2\">(exception.message.<\/span><span style=\"color: #50FA7B\">toString<\/span><span style=\"color: #F8F8F2\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">delay<\/span><span style=\"color: #F8F8F2\">(timeMillis <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">100<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">sealed<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">GetRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">data<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">Loading<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> step: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;loading&quot;<\/span><span style=\"color: #F8F8F2\">) : <\/span><span style=\"color: #8BE9FD; font-style: italic\">GetRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">data<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">Error<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> message: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">) : <\/span><span style=\"color: #8BE9FD; font-style: italic\">GetRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">data<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">Success<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> valueSnapShot: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">) : <\/span><span style=\"color: #8BE9FD; font-style: italic\">GetRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">sealed<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">PutRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">object<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Idle<\/span><span style=\"color: #F8F8F2\"> : <\/span><span style=\"color: #8BE9FD; font-style: italic\">PutRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">data<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">Error<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> message: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">) : <\/span><span style=\"color: #8BE9FD; font-style: italic\">PutRealTimeDataBaseUiState<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Composable\nfun FirebaseRealTimeDataBaseScreen(\n    firebaseRealTimeDataBaseViewModel: FirebaseRealTimeDataBaseViewModel = koinInject&lt;FirebaseRealTimeDataBaseViewModel>()) {\n\n    var snapShotNodoValue: String by remember { mutableStateOf(\"\") }\n    var nodoValue: String by remember { mutableStateOf(firebaseRealTimeDataBaseViewModel.nodo.value ) }\n    var keyByKeyNodo: String by remember { mutableStateOf(\"\") }\n    var valueByKeyNodo: String by remember { mutableStateOf(\"\") }\n    val stateRealTimeDataBaseViewModel: FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState by firebaseRealTimeDataBaseViewModel.stateSnapShotFiebaseDataBaseRealTimeByNodo.collectAsState()\n    snapShotNodoValue = when(stateRealTimeDataBaseViewModel){\n        is FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Error -> {\n            (stateRealTimeDataBaseViewModel as FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Error).message\n        }\n        is FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Loading ->  {\n            (stateRealTimeDataBaseViewModel as FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Loading).step\n        }\n        is FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Success ->  {\n            (stateRealTimeDataBaseViewModel as FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Success).valueSnapShot\n        }\n    }\n\n    var errorMessagePut: String by remember { mutableStateOf(\"\") }\n    val statePutRealTimeDataBaseViewModel: FirebaseRealTimeDataBaseViewModel.PutRealTimeDataBaseUiState by firebaseRealTimeDataBaseViewModel.statePutFiebaseDataBaseRealTimeByNodo.collectAsState()\n    errorMessagePut = when (statePutRealTimeDataBaseViewModel){\n        is FirebaseRealTimeDataBaseViewModel.PutRealTimeDataBaseUiState.Error -> {\n            (statePutRealTimeDataBaseViewModel as FirebaseRealTimeDataBaseViewModel.PutRealTimeDataBaseUiState.Error) .message\n        }\n        FirebaseRealTimeDataBaseViewModel.PutRealTimeDataBaseUiState.Idle ->  {\n            \"\"\n        }\n    }\n\n    DisposableEffect(Unit) {\n        onDispose {\n        }\n    }\n\n    RegisterBackHandler  {\n        firebaseRealTimeDataBaseViewModel.clear()\n    }\n\n    MaterialTheme {\n        Column(\n            modifier = Modifier\n                .safeContentPadding()\n                .fillMaxSize().padding(4.dp),\n            horizontalAlignment = Alignment.CenterHorizontally,\n        ) {\n\n            TopAppBar(\n                actions = {\n                    IconButton(onClick = {\n        \n                    }) {\n                        Icon(\n                            imageVector = Icons.Default.BackHand,\n                            contentDescription = \"Localized description\"\n                        )\n                    }\n                },\n                navigationIcon = {\n                    IconButton(onClick = {  }) {\n                        Icon(\n                            imageVector = Icons.Default.CloudOff,\n                            contentDescription = \"Localized description\"\n                        )\n                    }\n                },\n                title = { Text(\"List teach\") }\n            )\n\n            Card(\n                modifier = Modifier.fillMaxWidth().border(\n                    width = 2.dp,\n                    color = AppColors.blueDark,\n                    shape = RoundedCornerShape(16.dp)\n                ),\n                shape = RoundedCornerShape(20.dp),\n                colors = CardDefaults.cardColors(\n                    containerColor = AppColors.blueLight,\n                    contentColor = AppColors.blueNormal\n                ),\n                elevation = CardDefaults.cardElevation()\n            ) {\n                Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) {\n                    Spacer(Modifier.height(8.dp))\n                    Text(text = \"Get all infos nodo -> $nodoValue\", color = AppColors.blackNormal)\n                    Text(text = \"HERE -> $snapShotNodoValue\", color = AppColors.blackNormal)\n\n                    Spacer(Modifier.height(60.dp))\n                    Text(text = \"Add $errorMessagePut\", color = AppColors.blackNormal)\n\n                    Spacer(Modifier.height(10.dp))\n                    Text(text = \"Nodo\", color = AppColors.blackNormal)\n                    BasicTextField(\n                        maxLines = 1,\n                        textStyle = TextStyle.Default.copy(\n                            fontSize = 30.sp,\n                            color = Color.DarkGray\n                        ),\n                        value = nodoValue,\n                        onValueChange = { nodoValue = it },\n                        modifier = Modifier\n                            .padding(8.dp)\n                            .border(2.dp, Color.Black)\n                            .background(Color.White)\n                            .fillMaxWidth()\n                            .height(40.dp)\n                    )\n\n                    Spacer(Modifier.height(10.dp))\n                    Text(text = \"key\", color = AppColors.blackNormal)\n                    BasicTextField(\n                        maxLines = 1,\n                        textStyle = TextStyle.Default.copy(\n                            fontSize = 30.sp,\n                            color = Color.DarkGray\n                        ),\n                        value = keyByKeyNodo,\n                        onValueChange = { keyByKeyNodo = it },\n                        modifier = Modifier\n                            .padding(8.dp)\n                            .border(2.dp, Color.Black)\n                            .background(Color.White)\n                            .fillMaxWidth()\n                            .height(40.dp)\n                    )\n\n                    Spacer(Modifier.height(10.dp))\n                    Text(text = \"value\", color = AppColors.blackNormal)\n                    BasicTextField(\n                        maxLines = 1,\n                        textStyle = TextStyle.Default.copy(\n                            fontSize = 30.sp,\n                            color = Color.DarkGray\n                        ),\n                        value = valueByKeyNodo,\n                        onValueChange = { valueByKeyNodo = it },\n                        modifier = Modifier\n                            .padding(8.dp)\n                            .border(2.dp, Color.Black)\n                            .background(Color.White)\n                            .fillMaxWidth()\n                            .height(40.dp)\n                    )\n\n                    Spacer(Modifier.height(10.dp))\n                    Button(onClick = {\n                     firebaseRealTimeDataBaseViewModel.putDataFirebaseDataBaseRealTime(\n                                nodoName = nodoValue,\n                                keyNewNodo = keyByKeyNodo,\n                                valueForNodo = valueByKeyNodo,\n                            )\n                    }) {\n                        Text(text = \"Click add value\", color = AppColors.whiteNormal)\n                    }\n\n                }\n\n            }\n            Spacer(Modifier.height(20.dp))\n        }\n\n    }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8BE9FD; font-style: italic\">@Composable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fun<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">FirebaseRealTimeDataBaseScreen<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    firebaseRealTimeDataBaseViewModel: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBaseViewModel<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">koinInject<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBaseViewModel<\/span><span style=\"color: #F8F8F2\">&gt;()) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> snapShotNodoValue: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">by<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">remember<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">mutableStateOf<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> nodoValue: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">by<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">remember<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">mutableStateOf<\/span><span style=\"color: #F8F8F2\">(firebaseRealTimeDataBaseViewModel.nodo.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> ) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> keyByKeyNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">by<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">remember<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">mutableStateOf<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> valueByKeyNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">by<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">remember<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">mutableStateOf<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> stateRealTimeDataBaseViewModel: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBaseViewModel<\/span><span style=\"color: #F8F8F2\">.GetRealTimeDataBaseUiState <\/span><span style=\"color: #FF79C6\">by<\/span><span style=\"color: #F8F8F2\"> firebaseRealTimeDataBaseViewModel.stateSnapShotFiebaseDataBaseRealTimeByNodo.<\/span><span style=\"color: #50FA7B\">collectAsState<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    snapShotNodoValue <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">when<\/span><span style=\"color: #F8F8F2\">(stateRealTimeDataBaseViewModel){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Error <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            (stateRealTimeDataBaseViewModel <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Error).message<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Loading <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            (stateRealTimeDataBaseViewModel <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Loading).step<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Success <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            (stateRealTimeDataBaseViewModel <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.GetRealTimeDataBaseUiState.Success).valueSnapShot<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> errorMessagePut: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">by<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">remember<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">mutableStateOf<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><span style=\"color: #F8F8F2\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">val<\/span><span style=\"color: #F8F8F2\"> statePutRealTimeDataBaseViewModel: <\/span><span style=\"color: #8BE9FD; font-style: italic\">FirebaseRealTimeDataBaseViewModel<\/span><span style=\"color: #F8F8F2\">.PutRealTimeDataBaseUiState <\/span><span style=\"color: #FF79C6\">by<\/span><span style=\"color: #F8F8F2\"> firebaseRealTimeDataBaseViewModel.statePutFiebaseDataBaseRealTimeByNodo.<\/span><span style=\"color: #50FA7B\">collectAsState<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    errorMessagePut <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">when<\/span><span style=\"color: #F8F8F2\"> (statePutRealTimeDataBaseViewModel){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.PutRealTimeDataBaseUiState.Error <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            (statePutRealTimeDataBaseViewModel <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> FirebaseRealTimeDataBaseViewModel.PutRealTimeDataBaseUiState.Error) .message<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        FirebaseRealTimeDataBaseViewModel.PutRealTimeDataBaseUiState.Idle <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #F1FA8C\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">DisposableEffect<\/span><span style=\"color: #F8F8F2\">(Unit) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">onDispose<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">RegisterBackHandler<\/span><span style=\"color: #F8F8F2\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        firebaseRealTimeDataBaseViewModel.<\/span><span style=\"color: #50FA7B\">clear<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">MaterialTheme<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">Column<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            modifier <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Modifier<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                .<\/span><span style=\"color: #50FA7B\">safeContentPadding<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                .<\/span><span style=\"color: #50FA7B\">fillMaxSize<\/span><span style=\"color: #F8F8F2\">().<\/span><span style=\"color: #50FA7B\">padding<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">.dp),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            horizontalAlignment <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Alignment.CenterHorizontally,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">TopAppBar<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                actions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">IconButton<\/span><span style=\"color: #F8F8F2\">(onClick <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #50FA7B\">Icon<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            imageVector <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Icons.Default.BackHand,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            contentDescription <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;Localized description&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                navigationIcon <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">IconButton<\/span><span style=\"color: #F8F8F2\">(onClick <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> {  }) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #50FA7B\">Icon<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            imageVector <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Icons.Default.CloudOff,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            contentDescription <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;Localized description&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                title <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;List teach&quot;<\/span><span style=\"color: #F8F8F2\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">Card<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                modifier <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Modifier.<\/span><span style=\"color: #50FA7B\">fillMaxWidth<\/span><span style=\"color: #F8F8F2\">().<\/span><span style=\"color: #50FA7B\">border<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    width <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">.dp,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blueDark,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    shape <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">RoundedCornerShape<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">16<\/span><span style=\"color: #F8F8F2\">.dp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                shape <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">RoundedCornerShape<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">20<\/span><span style=\"color: #F8F8F2\">.dp),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                colors <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> CardDefaults.<\/span><span style=\"color: #50FA7B\">cardColors<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    containerColor <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blueLight,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    contentColor <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blueNormal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                elevation <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> CardDefaults.<\/span><span style=\"color: #50FA7B\">cardElevation<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">Column<\/span><span style=\"color: #F8F8F2\">(modifier <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Modifier.<\/span><span style=\"color: #50FA7B\">fillMaxWidth<\/span><span style=\"color: #F8F8F2\">().<\/span><span style=\"color: #50FA7B\">padding<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">16<\/span><span style=\"color: #F8F8F2\">.dp)) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Spacer<\/span><span style=\"color: #F8F8F2\">(Modifier.<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">.dp))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;Get all infos nodo -&gt; <\/span><span style=\"color: #F8F8F2\">$nodoValue<\/span><span style=\"color: #F1FA8C\">&quot;<\/span><span style=\"color: #F8F8F2\">, color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blackNormal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;HERE -&gt; <\/span><span style=\"color: #F8F8F2\">$snapShotNodoValue<\/span><span style=\"color: #F1FA8C\">&quot;<\/span><span style=\"color: #F8F8F2\">, color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blackNormal)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Spacer<\/span><span style=\"color: #F8F8F2\">(Modifier.<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">60<\/span><span style=\"color: #F8F8F2\">.dp))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;Add <\/span><span style=\"color: #F8F8F2\">$errorMessagePut<\/span><span style=\"color: #F1FA8C\">&quot;<\/span><span style=\"color: #F8F8F2\">, color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blackNormal)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Spacer<\/span><span style=\"color: #F8F8F2\">(Modifier.<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">10<\/span><span style=\"color: #F8F8F2\">.dp))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;Nodo&quot;<\/span><span style=\"color: #F8F8F2\">, color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blackNormal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">BasicTextField<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        maxLines <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        textStyle <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> TextStyle.Default.<\/span><span style=\"color: #50FA7B\">copy<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            fontSize <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">30<\/span><span style=\"color: #F8F8F2\">.sp,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Color.DarkGray<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodoValue,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        onValueChange <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> { nodoValue <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> it },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        modifier <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Modifier<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">padding<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">.dp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">border<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">.dp, Color.Black)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">background<\/span><span style=\"color: #F8F8F2\">(Color.White)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">fillMaxWidth<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">40<\/span><span style=\"color: #F8F8F2\">.dp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Spacer<\/span><span style=\"color: #F8F8F2\">(Modifier.<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">10<\/span><span style=\"color: #F8F8F2\">.dp))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;key&quot;<\/span><span style=\"color: #F8F8F2\">, color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blackNormal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">BasicTextField<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        maxLines <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        textStyle <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> TextStyle.Default.<\/span><span style=\"color: #50FA7B\">copy<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            fontSize <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">30<\/span><span style=\"color: #F8F8F2\">.sp,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Color.DarkGray<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> keyByKeyNodo,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        onValueChange <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> { keyByKeyNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> it },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        modifier <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Modifier<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">padding<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">.dp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">border<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">.dp, Color.Black)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">background<\/span><span style=\"color: #F8F8F2\">(Color.White)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">fillMaxWidth<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">40<\/span><span style=\"color: #F8F8F2\">.dp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Spacer<\/span><span style=\"color: #F8F8F2\">(Modifier.<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">10<\/span><span style=\"color: #F8F8F2\">.dp))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;value&quot;<\/span><span style=\"color: #F8F8F2\">, color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.blackNormal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">BasicTextField<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        maxLines <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        textStyle <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> TextStyle.Default.<\/span><span style=\"color: #50FA7B\">copy<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            fontSize <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">30<\/span><span style=\"color: #F8F8F2\">.sp,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Color.DarkGray<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> valueByKeyNodo,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        onValueChange <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> { valueByKeyNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> it },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        modifier <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Modifier<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">padding<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">.dp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">border<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">.dp, Color.Black)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">background<\/span><span style=\"color: #F8F8F2\">(Color.White)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">fillMaxWidth<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            .<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">40<\/span><span style=\"color: #F8F8F2\">.dp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Spacer<\/span><span style=\"color: #F8F8F2\">(Modifier.<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">10<\/span><span style=\"color: #F8F8F2\">.dp))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #50FA7B\">Button<\/span><span style=\"color: #F8F8F2\">(onClick <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                     firebaseRealTimeDataBaseViewModel.<\/span><span style=\"color: #50FA7B\">putDataFirebaseDataBaseRealTime<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                nodoName <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nodoValue,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                keyNewNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> keyByKeyNodo,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                valueForNodo <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> valueByKeyNodo,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #50FA7B\">Text<\/span><span style=\"color: #F8F8F2\">(text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;Click add value&quot;<\/span><span style=\"color: #F8F8F2\">, color <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> AppColors.whiteNormal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">Spacer<\/span><span style=\"color: #F8F8F2\">(Modifier.<\/span><span style=\"color: #50FA7B\">height<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">20<\/span><span style=\"color: #F8F8F2\">.dp))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Native implementation (iOS configs)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Project\/iosApp\/iosApp<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now let&#8217;s work on the iOS part; where the firebase class value will be sent as a parameter.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class AppDelegate: NSObject, UIApplicationDelegate {\n\n    func application(\n        _ application: UIApplication,\n        didFinishLaunchingWithOptions launchOptions: &#91;UIApplication.LaunchOptionsKey: Any&#93;? = nil\n    ) -> Bool {\n        \n        FirebaseApp.configure()\n        \n        let swiftFirebaseDataBaseRealTime = SwiftFirebaseDataBaseRealTime()\n        ComposeApp.KoinInit().doInitKoin(\n            delegateFirebaseRealTimeDataBase: swiftFirebaseDataBaseRealTime\n        )\n        \n        return true\n    }\n    \n}\n\n\n@main\nstruct iOSApp: App {\n\n    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate\n\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n        }\n    }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">AppDelegate<\/span><span style=\"color: #F8F8F2\">: <\/span><span style=\"color: #8BE9FD; font-style: italic\">NSObject<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #50FA7B\">UIApplicationDelegate<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    func <\/span><span style=\"color: #50FA7B\">application<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        _ application: <\/span><span style=\"color: #8BE9FD; font-style: italic\">UIApplication<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        didFinishLaunchingWithOptions launchOptions: &#91;UIApplication.LaunchOptionsKey: <\/span><span style=\"color: #8BE9FD; font-style: italic\">Any<\/span><span style=\"color: #F8F8F2\">&#93;? <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> nil<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    ) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">Bool<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        FirebaseApp.<\/span><span style=\"color: #50FA7B\">configure<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        let swiftFirebaseDataBaseRealTime <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">SwiftFirebaseDataBaseRealTime<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ComposeApp.<\/span><span style=\"color: #50FA7B\">KoinInit<\/span><span style=\"color: #F8F8F2\">().<\/span><span style=\"color: #50FA7B\">doInitKoin<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            delegateFirebaseRealTimeDataBase: <\/span><span style=\"color: #8BE9FD; font-style: italic\">swiftFirebaseDataBaseRealTime<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8BE9FD; font-style: italic\">@main<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">struct iOSApp: <\/span><span style=\"color: #8BE9FD; font-style: italic\">App<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">@UIApplicationDelegateAdaptor<\/span><span style=\"color: #F8F8F2\">(AppDelegate.self) <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> delegate<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">var<\/span><span style=\"color: #F8F8F2\"> body: <\/span><span style=\"color: #8BE9FD; font-style: italic\">some<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Scene<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">WindowGroup<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">ContentView<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import FirebaseDatabase\nimport ComposeApp\n\n@objc public class SwiftFirebaseDataBaseRealTime: NSObject, FirebaseRealTimeDataBase {\n    let myFireBaseDataBase = Database.database()\n    \n    @objc public func fetchDataNodo(nodoName: String,\n                                    onSuccess: @escaping (String) -> Void,\n                                    onError: @escaping (KotlinException) -> Void) {\n        \n        let reference = myFireBaseDataBase.reference(withPath: nodoName)\n        reference.observe(.value) { snapshot in\n            print(\"fetchDataNodo: Value snapshot is: \\(snapshot)\")\n            onSuccess(snapshot.description)\n        } withCancel: { error in\n            print(\"fetchDataNodo: Cancelled with error: \\(error.localizedDescription)\")\n            onError(error as! KotlinException)\n        }\n    }\n    \n    @objc public func putDataByNodoName(nodoName: String, keyNewNodo: String, valueForNodo: String) {\n        \n        let values: &#91;String: String&#93; = &#91;\n                    keyNewNodo: valueForNodo\n                &#93;\n                \n        let reference = myFireBaseDataBase.reference(withPath: nodoName)\n        reference.updateChildValues(values) { error, _ in\n            if let error = error {\n                print(\"putDataByNodoName: Fail \\(error.localizedDescription)\")\n                \/\/ Se quiser lan\u00e7ar, pode usar uma completion ou delegate\n            } else {\n                print(\"putDataByNodoName: Success \\(nodoName)\")\n            }\n        }\n    }\n    \n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> FirebaseDatabase<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> ComposeApp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8BE9FD; font-style: italic\">@objc<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">SwiftFirebaseDataBaseRealTime<\/span><span style=\"color: #F8F8F2\">: <\/span><span style=\"color: #8BE9FD; font-style: italic\">NSObject<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #50FA7B\">FirebaseRealTimeDataBase<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    let myFireBaseDataBase <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Database.<\/span><span style=\"color: #50FA7B\">database<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">@objc<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> func <\/span><span style=\"color: #50FA7B\">fetchDataNodo<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                    onSuccess: <\/span><span style=\"color: #8BE9FD; font-style: italic\">@escaping<\/span><span style=\"color: #F8F8F2\"> (String) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> Void,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                    onError: <\/span><span style=\"color: #8BE9FD; font-style: italic\">@escaping<\/span><span style=\"color: #F8F8F2\"> (KotlinException) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> Void) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        let reference <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> myFireBaseDataBase.<\/span><span style=\"color: #50FA7B\">reference<\/span><span style=\"color: #F8F8F2\">(withPath: <\/span><span style=\"color: #8BE9FD; font-style: italic\">nodoName<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        reference.<\/span><span style=\"color: #50FA7B\">observe<\/span><span style=\"color: #F8F8F2\">(.<\/span><span style=\"color: #FF79C6\">value<\/span><span style=\"color: #F8F8F2\">) { snapshot <\/span><span style=\"color: #FF79C6\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;fetchDataNodo: Value snapshot is: <\/span><span style=\"color: #FF79C6\">\\(<\/span><span style=\"color: #F1FA8C\">snapshot)&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">onSuccess<\/span><span style=\"color: #F8F8F2\">(snapshot.description)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        } withCancel: { error <\/span><span style=\"color: #FF79C6\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;fetchDataNodo: Cancelled with error: <\/span><span style=\"color: #FF79C6\">\\(<\/span><span style=\"color: #F1FA8C\">error.localizedDescription)&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">onError<\/span><span style=\"color: #F8F8F2\">(error <\/span><span style=\"color: #FF79C6\">as!<\/span><span style=\"color: #F8F8F2\"> KotlinException)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">@objc<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> func <\/span><span style=\"color: #50FA7B\">putDataByNodoName<\/span><span style=\"color: #F8F8F2\">(nodoName: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, keyNewNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, valueForNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        let values: &#91;String: <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&#93; <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> &#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    keyNewNodo: <\/span><span style=\"color: #8BE9FD; font-style: italic\">valueForNodo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                &#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        let reference <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> myFireBaseDataBase.<\/span><span style=\"color: #50FA7B\">reference<\/span><span style=\"color: #F8F8F2\">(withPath: <\/span><span style=\"color: #8BE9FD; font-style: italic\">nodoName<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        reference.<\/span><span style=\"color: #50FA7B\">updateChildValues<\/span><span style=\"color: #F8F8F2\">(values) { error, _ <\/span><span style=\"color: #FF79C6\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> let error <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">error<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;putDataByNodoName: Fail <\/span><span style=\"color: #FF79C6\">\\(<\/span><span style=\"color: #F1FA8C\">error.localizedDescription)&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #6272A4\">\/\/ Se quiser lan\u00e7ar, pode usar uma completion ou delegate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;putDataByNodoName: Success <\/span><span style=\"color: #FF79C6\">\\(<\/span><span style=\"color: #F1FA8C\">nodoName)&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Extras<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can access also ours GitHub with all code and news features;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/flipnovidade\/integration_call_apps_nativos_app_kmp\">GitHub<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Don&#8217;t forget habilitate write and reading in your firebase console.<br>If you have doubts, question don&#8217;t hesitate to ask; Will be a pleasure to help.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post is very similar to previous; how to implements remote config.If you arrived here I hope this post will be useful. First I will be show how to comunicate with Realtime Database &#8211; Firebase; This communication will works with inputs e outputs, other words reading and writing. I hope you have minimal know em [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":59,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,7,3],"tags":[17,26,25,12,21,20,18,11,10,24,31,30,29,27],"class_list":["post-57","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android-native","category-ios-native","category-kotlin-multi-plataform","tag-android","tag-database-firebase","tag-databasefirebase","tag-firebase","tag-firebase-database","tag-firebasedatabase","tag-ios","tag-kmm","tag-kmp","tag-koltin","tag-real-time-database-firebase","tag-real-time-firebase","tag-realtime-firebase","tag-realtimefirebase"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=\/wp\/v2\/posts\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=57"}],"version-history":[{"count":11,"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":74,"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=\/wp\/v2\/posts\/57\/revisions\/74"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=\/wp\/v2\/media\/59"}],"wp:attachment":[{"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meumundomobile.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}