<?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: putu eka mulyana</title>
    <description>The latest articles on DEV Community by putu eka mulyana (@putuekamulyana).</description>
    <link>https://dev.to/putuekamulyana</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%2F245288%2F891d346c-c64d-485c-9dd1-95b77af11c89.jpeg</url>
      <title>DEV Community: putu eka mulyana</title>
      <link>https://dev.to/putuekamulyana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/putuekamulyana"/>
    <language>en</language>
    <item>
      <title>Custom queries AndroidManifest Pada Expo</title>
      <dc:creator>putu eka mulyana</dc:creator>
      <pubDate>Sat, 04 Nov 2023 14:11:45 +0000</pubDate>
      <link>https://dev.to/putuekamulyana/custom-queries-to-androidmanifest-pada-expo-2l04</link>
      <guid>https://dev.to/putuekamulyana/custom-queries-to-androidmanifest-pada-expo-2l04</guid>
      <description>&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Kenapa saya ingin membuat custom queries pada android AndroidManifest? saat membuat fitur share ke instagram stories saya mengalami kendala saat user klik share yang terbuka bukan instagram stories tapi aplikasi lain.   &lt;/p&gt;

&lt;p&gt;setelah melempar pertanyaan ke forum. ada yang menyarankan menambahkan custom &lt;code&gt;queries&lt;/code&gt; seperti pada &lt;code&gt;AndroidManifest.xml&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;queries&amp;gt;
      &amp;lt;!-- Specific apps you share to --&amp;gt;
      &amp;lt;package android:name="com.instagram.android" /&amp;gt;
      &amp;lt;intent&amp;gt;
        &amp;lt;action android:name="android.intent.action.SEND"/&amp;gt;
      &amp;lt;/intent&amp;gt;
    &amp;lt;/queries&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;masalahnya saat build menggunakan server &lt;code&gt;expo&lt;/code&gt; code di atas tidak ikut dibuild karena file &lt;code&gt;android&lt;/code&gt; yang ada di local computer tidak ikut di submit ke dalam server &lt;code&gt;expo&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Solusi
&lt;/h2&gt;

&lt;p&gt;Solusi yang saya temukan adalah dengan menambahakan code expo config plugins agar saat di build di server expo &lt;code&gt;queries&lt;/code&gt; ikut tergenerate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { withAndroidManifest } = require('@expo/config-plugins');

const withAndroidQueries = config =&amp;gt; {
  return withAndroidManifest(config, config =&amp;gt; {
    config.modResults.manifest.queries = [
      {
        package: [
          {
            $: { 'android:name': 'com.instagram.android' },
          },
        ],
        intent: [
          {
            action: [{ $: { 'android:name': 'android.intent.action.SEND' } }],
          },
        ],
      },
    ];

    return config;
  });
};

module.exports = withAndroidQueries;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;jika ingin mengecek apakah file &lt;code&gt;queries&lt;/code&gt; tergenerate di dalam &lt;code&gt;AndroidManifest.xml&lt;/code&gt; coba run :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo prebuild
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;lalu cek di dalam file &lt;code&gt;AndroidManifest.xml&lt;/code&gt; apakah sudah ada code seperti dibawah :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;queries&amp;gt;
      &amp;lt;!-- Specific apps you share to --&amp;gt;
      &amp;lt;package android:name="com.instagram.android" /&amp;gt;
      &amp;lt;intent&amp;gt;
        &amp;lt;action android:name="android.intent.action.SEND"/&amp;gt;
      &amp;lt;/intent&amp;gt;
    &amp;lt;/queries&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;Jika kamu memiliki saran atau cara yang lain &lt;code&gt;feel free to comment&lt;/code&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>expo</category>
      <category>mobile</category>
      <category>android</category>
    </item>
    <item>
      <title>Cara menjalankan emulator di Visual Studio Code</title>
      <dc:creator>putu eka mulyana</dc:creator>
      <pubDate>Wed, 18 Oct 2023 13:09:06 +0000</pubDate>
      <link>https://dev.to/putuekamulyana/cara-menjalankan-emulator-di-visual-studio-code-13l3</link>
      <guid>https://dev.to/putuekamulyana/cara-menjalankan-emulator-di-visual-studio-code-13l3</guid>
      <description>&lt;p&gt;Sekarang kamu tidak perlu membuka android studio untuk menjalankan emulator di komputer kamu, yang kamu lakukan cukup mengintall extension vscode ini &lt;a href="https://marketplace.visualstudio.com/items?itemName=DiemasMichiels.emulate"&gt;Android iOS Emulator&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Langkah - Langkah menjalankan emulator
&lt;/h2&gt;

&lt;p&gt;Gunakan Command ini untuk membuka All command pada vs code  &lt;code&gt;Cmd-Shift-P&lt;/code&gt; lalu ketik &lt;code&gt;Emulator&lt;/code&gt; dan pilih emulalor yang ingin kamu jalankan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z3cnpOaH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/055bk7kbfj7wnbo3v7f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z3cnpOaH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/055bk7kbfj7wnbo3v7f0.png" alt="menjalankan emulator di Visual Studio Code" width="800" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>tip</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Improve FlatList Performance Pada React Native Dengan Case Infinite Scroll</title>
      <dc:creator>putu eka mulyana</dc:creator>
      <pubDate>Wed, 11 Oct 2023 10:24:58 +0000</pubDate>
      <link>https://dev.to/putuekamulyana/improve-list-view-performance-pada-react-native-dengan-case-infinite-scroll-10h6</link>
      <guid>https://dev.to/putuekamulyana/improve-list-view-performance-pada-react-native-dengan-case-infinite-scroll-10h6</guid>
      <description>&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Bisanya dalam membuat list saya menggunakan &lt;strong&gt;FlatList&lt;/strong&gt;. dalam menggunakan FlatList saya tidak mengalami banyak kendala ketika di staging mungkin karena list yang saya render jumlahnya sedikit karena menggunakan data dummy di staging. masalah mulai muncul ketika aplikasi running di production dengan jumlah item list yang dirender sangat banyak. didalam case saya me-render 30 item sekali render dan saya menerapkan &lt;strong&gt;infinite scroll&lt;/strong&gt;. masalahnya mulai muncul ketika scrollnya sudah sampai 3 sampai 4 page atau setara dengan 4 * 30 item.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solusi
&lt;/h2&gt;

&lt;p&gt;setelah saya googling saya menemukan alternatif dari FlatList yaitu &lt;a href="https://github.com/Shopify/flash-list"&gt;flash-list&lt;/a&gt; dan &lt;a href="https://github.com/Flipkart/recyclerlistview"&gt;recyclerlistview&lt;/a&gt;. setelah saya baca documentasi dari kedua library itu akhirnya saya memutuskan menggunakan flash-list karena documentasinya lebih mudah di pahami dan flash-list juga menggunakan(depend) library &lt;strong&gt;recyclerlistview&lt;/strong&gt; didalamnya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;contohimplementasi &lt;strong&gt;FlashList&lt;/strong&gt; di dalam code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;FlashList
   estimatedItemSize={100}
   data={this.state.list}
   renderItem={({ item, index }) =&amp;gt; &amp;lt;Content item={item} index={index} /&amp;gt;}
   onEndReachedThreshold={0.8}
   onEndReached={() =&amp;gt; {
       this._populateNextBatch()
   }}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;code untuk fetch data dari backend&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async _populateNextBatch(){
   // fetch api
   const json = await response.json();
   let shallowCopy = [...this.state.list];
   await json.data.forEach((content) =&amp;gt; {
        if (!this.listIds.has(content.id)) {
          // add only non-duplicate
          this.listIds.add(content.id);
          shallowCopy.push(content);
        }
   })
   this.setState({list: shallowCopy })
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sekian contoh implementasi flash-list dengan tujuan untuk &lt;strong&gt;Improve List View Performance&lt;/strong&gt; dengan case Infinite Scroll. &lt;br&gt;
Jika kamu memiliki cara yang lain silahkan di share di dalam Kolom Komentar.👍&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Kenapa Project Android Setelah release atau build Gagal Fetch Api</title>
      <dc:creator>putu eka mulyana</dc:creator>
      <pubDate>Tue, 27 Sep 2022 15:29:09 +0000</pubDate>
      <link>https://dev.to/putuekamulyana/kenapa-project-android-setelah-release-atau-build-gagal-fetch-api-1jle</link>
      <guid>https://dev.to/putuekamulyana/kenapa-project-android-setelah-release-atau-build-gagal-fetch-api-1jle</guid>
      <description>&lt;h1&gt;
  
  
  Pendahuluan
&lt;/h1&gt;

&lt;p&gt;hari ini saya mengalami error pada project android saya, setalah saya relase apk dan mau ditest ternyata muncul error gagal fatch api kebackend. setalah saya googling ternyata penyebab errornya karena domain server saya masi menggunakan http.&lt;/p&gt;

&lt;h1&gt;
  
  
  Solusi
&lt;/h1&gt;

&lt;p&gt;untuk fix error gagal fetch yang pertama bisa ubah url dari http menjadi https, yang kedua bisa tambahakan  &lt;code&gt;android:usesCleartextTraffic="true"&lt;/code&gt; di file &lt;code&gt;AndroidManifest.xml&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  refrensi
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/nowsecure/secure-mobile-development/blob/master/en/android/set-usescleartexttraffic-to-false.md"&gt;https://github.com/nowsecure/secure-mobile-development/blob/master/en/android/set-usescleartexttraffic-to-false.md&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>reactnative</category>
      <category>bahasaindonesia</category>
    </item>
    <item>
      <title>Cara Membuat Helpers di Larave Terbaru</title>
      <dc:creator>putu eka mulyana</dc:creator>
      <pubDate>Sat, 27 Aug 2022 05:36:00 +0000</pubDate>
      <link>https://dev.to/putuekamulyana/cara-membuat-helpers-di-larave-menggunakan-traits-44j3</link>
      <guid>https://dev.to/putuekamulyana/cara-membuat-helpers-di-larave-menggunakan-traits-44j3</guid>
      <description>&lt;h2&gt;
  
  
  Apa Itu Traits ?
&lt;/h2&gt;

&lt;p&gt;Dengan menggunakan Traits kita bisa membuat method yang dapat digunakan / wariskan di banyak kelas, cukup menggunakan keyword &lt;code&gt;use&lt;/code&gt; untuk menggunakanya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contoh implementasi Traits
&lt;/h2&gt;

&lt;p&gt;disini saya memberikan contoh cara membuat helpers di laravel menggunakan Traits agar code kita &lt;code&gt;reusable&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
namespace App\Helpers;

trait Helpers
{
 public function getMessage($name){
     return "Hay, Terimakasi ". $name;
 }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cara Menggunakan helper
&lt;/h2&gt;

&lt;p&gt;cara menggunakan helper pada controller laravel dengan cara &lt;code&gt;use Helpers&lt;/code&gt; pada controller tersebut.&lt;/p&gt;

&lt;p&gt;contohnya :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
namespace App\Http\Controllers;

class UserController extends Controller
{
  use Helpers;

  public function sendMessage(Request $request)
  {
      $message = $this-&amp;gt;getMessage($request-&amp;gt;customer_name);
      return $message;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;referensi : &lt;br&gt;
&lt;a href="https://www.php.net/manual/en/language.oop5.traits.php"&gt;https://www.php.net/manual/en/language.oop5.traits.php&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>beginners</category>
      <category>indonesia</category>
    </item>
    <item>
      <title>Cara Upload File Atau Image Ke Firebase Pada React Native</title>
      <dc:creator>putu eka mulyana</dc:creator>
      <pubDate>Thu, 12 May 2022 09:05:00 +0000</pubDate>
      <link>https://dev.to/putuekamulyana/tutorial-upload-filephoto-ke-firebase-pada-react-native-l87</link>
      <guid>https://dev.to/putuekamulyana/tutorial-upload-filephoto-ke-firebase-pada-react-native-l87</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;install &lt;a href="https://www.npmjs.com/package/firebase" rel="noopener noreferrer"&gt;firebase&lt;/a&gt; pada projek kamu&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i firebase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;atau&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add firebase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tambahkan Firebase configuration pada projeck kamu&lt;/strong&gt;&lt;br&gt;
saya menyimpan Firebase configuration pada &lt;code&gt;root/src/config/Firebase.js&lt;/code&gt; isi file Firebase configuration seperti ini :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;initializeApp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;firebase/app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firebaseConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;authDomain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;databaseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;storageBucket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messagingSenderId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;appId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;measurementId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Initialize Firebase&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;initializeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firebaseConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;view button&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TouchableOpacity&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;btnUpload&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Text&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;btnLabel&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Upload&lt;/span&gt; &lt;span class="nx"&gt;Photo&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Text&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/TouchableOpacity&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;install image picker&lt;/strong&gt;&lt;br&gt;
saya menggunakan library &lt;a href="https://www.npmjs.com/package/react-native-image-picker" rel="noopener noreferrer"&gt;react-native-image-picker&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i react-native-image-picker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;atau&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add react-native-image-picker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;import &lt;a href="https://www.npmjs.com/package/react-native-image-picker" rel="noopener noreferrer"&gt;react-native-image-picker&lt;/a&gt; pada file screen kamu, misalkan &lt;code&gt;root/src/screens/UploadPhoto.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {launchImageLibrary} from 'react-native-image-picker';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;install react-native-uuid&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i react-native-uuid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;atau&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add react-native-uuid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;import pada file screen kamu&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import uuid from 'react-native-uuid';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;import firebase&lt;/strong&gt;&lt;br&gt;
jangan lupa import firebase juga&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;StyleSheet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;TouchableOpacity&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;uuid&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native-uuid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;launchImageLibrary&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native-image-picker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;getStorage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;uploadBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;firebase/storage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;firebase&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../config/Firebase&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Buat function upload photo&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uploadPhoto&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;launchImageLibrary&lt;/span&gt;&lt;span class="p"&gt;({},&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;didCancel&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;Alert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;oops, batal memilih foto.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;fileName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firebase&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rersult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rersult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="nf"&gt;uploadBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;contentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image/jpeg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;firebaseStorageDownloadTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Upload With blob&lt;/span&gt;&lt;span class="dl"&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;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tambahkan onPress pada button&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TouchableOpacity&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;btnUpload&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;onPress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;uploadPhoto&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Text&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;btnLabel&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Upload&lt;/span&gt; &lt;span class="nx"&gt;Photo&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Text&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/TouchableOpacity&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Selesai 🚀😎&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>firebase</category>
      <category>reactnative</category>
    </item>
  </channel>
</rss>
