<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bernat Borrás Paronella</title>
    <description>The latest articles on DEV Community by Bernat Borrás Paronella (@alorma).</description>
    <link>https://dev.to/alorma</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F476758%2F25186673-94df-4fca-854a-7eb1c4a2ccac.jpeg</url>
      <title>DEV Community: Bernat Borrás Paronella</title>
      <link>https://dev.to/alorma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alorma"/>
    <language>en</language>
    <item>
      <title>Jetpack Compose - Alert Dialogs</title>
      <dc:creator>Bernat Borrás Paronella</dc:creator>
      <pubDate>Fri, 02 Jul 2021 09:06:02 +0000</pubDate>
      <link>https://dev.to/adevintaspain/jetpack-compose-alert-dialogs-8j</link>
      <guid>https://dev.to/adevintaspain/jetpack-compose-alert-dialogs-8j</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo01g8yp2oy2uzd2olkb9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo01g8yp2oy2uzd2olkb9.png" alt="Material Aalert Dialog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code presented in this article is using compose &lt;em&gt;rc01&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Jetpack Compose brings us with a cool new UI toolkit, but some things are completely different from how we are used to it, one of these cases is &lt;code&gt;AlertDialog&lt;/code&gt; a common component on any application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to display an AlertDialog on compose:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a state as a flag to check if we need to show the dialog or not.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;showDialog&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="nf"&gt;remember&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;mutableStateOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You may need to import:&lt;br&gt;
&lt;code&gt;import androidx.compose.runtime.getValue&lt;/code&gt;&lt;br&gt;
&lt;code&gt;import androidx.compose.runtime.setValue&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Basic AlertDialog:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;showDialog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;AlertDialog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;onDismissRequest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;confirmButton&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;dismissButton&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's see what's each param of &lt;code&gt;AlertDialog&lt;/code&gt; composable method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;    &lt;span class="n"&gt;onDismissRequest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Will be called when clicking outside of a dialog, here we must set &lt;code&gt;showDialog&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt; to remove it from our stack.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;    &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Add a &lt;code&gt;Text&lt;/code&gt; to show a title and message of our &lt;code&gt;AlertDialog&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;    &lt;span class="n"&gt;confirmButton&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;dismissButton&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Define a &lt;code&gt;Button&lt;/code&gt; or &lt;code&gt;TextButton&lt;/code&gt; and its &lt;code&gt;Text&lt;/code&gt; to get actions like "Accept" or "Cancel"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When click on confirm or button we must set our &lt;code&gt;showDialog&lt;/code&gt; to false also, to avoid showing the dialog on the next recomposition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;    &lt;span class="n"&gt;onDismissRequest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;showDialog&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;confirmButton&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;showDialog&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;dismissButton&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;showDialog&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Other dialogs
&lt;/h2&gt;

&lt;p&gt;What if we want to display custom content, like a list of items to select one?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    text = { 
       LazyColumn {
          items(...) { item -&amp;gt; Text(text = item) }
       }
    },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the &lt;code&gt;text&lt;/code&gt; field of &lt;code&gt;AlertDialog&lt;/code&gt; to display any content that is needed and handle the dialog in the same way of buttons: &lt;code&gt;showDialog = false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hope you enjoyed the article!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://careers.adevinta.es/ofertas/?search=android&amp;amp;stc=aff-blog%20dev.to-jetpack%20compose%20_%20alert%20dialogs%20bernat%20borras"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c861pb7skrzwx301tqg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>compose</category>
      <category>dialogs</category>
    </item>
    <item>
      <title>Meetup - Android Themes</title>
      <dc:creator>Bernat Borrás Paronella</dc:creator>
      <pubDate>Wed, 18 Nov 2020 17:18:02 +0000</pubDate>
      <link>https://dev.to/adevintaspain/meetup-android-themes-iba</link>
      <guid>https://dev.to/adevintaspain/meetup-android-themes-iba</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zvgLowWLQFQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;¿Conoces Material Design? En este video hablamos de colores y temas en Android y como generar una buena estructura que permita cambios de manera ágil.&lt;/p&gt;

&lt;p&gt;Y si! Hablamos de dark mode!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
