<?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: SangUn</title>
    <description>The latest articles on DEV Community by SangUn (@coderealsw).</description>
    <link>https://dev.to/coderealsw</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%2F793769%2F76008844-39e9-42df-91ea-c08869c62336.jpeg</url>
      <title>DEV Community: SangUn</title>
      <link>https://dev.to/coderealsw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/coderealsw"/>
    <language>en</language>
    <item>
      <title>Provider Cheatsheet</title>
      <dc:creator>SangUn</dc:creator>
      <pubDate>Thu, 20 Jan 2022 00:42:48 +0000</pubDate>
      <link>https://dev.to/coderealsw/provider-cheatsheet-2o4c</link>
      <guid>https://dev.to/coderealsw/provider-cheatsheet-2o4c</guid>
      <description>&lt;h3&gt;
  
  
  ChangeNotifierProvider
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;
&lt;span class="n"&gt;ChangeNotifierProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ChangeNotifier&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Provider&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Create an instance of ChangeNotifier.&lt;br&gt;
(&lt;code&gt;ChangeNotifier&lt;/code&gt;의 어떠한 원본으로 부터의 복제본을 생성한다.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;ChangeNotifier&lt;/code&gt; when needed, 필요할때 인스턴스 생성.(lazy),&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ChangeNotifier&lt;/code&gt; no longer needed, 더이상 필요로 하지 않을때 메모리에서 지워짐.(dispose)&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Provide an easy way to access ChangeNotifier for widgets that need it, and rebuilds the UI if necessary&lt;br&gt;
(&lt;code&gt;ChangeNotifier&lt;/code&gt;를 필요로 하는 위젯에 &lt;code&gt;ChangeNotifier&lt;/code&gt;를 쉽게 적용할 수 있는 수단을 제공하고 필요하면 UI 다시 만든다.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Constructor를 통해서 인스턴스를 전달할 필요없이 &lt;code&gt;Provider.of&lt;/code&gt;를 통해서 &lt;code&gt;ChangeNotifier&lt;/code&gt;의 인스턴스에 쉽게 액세스할 수 있다.&lt;/li&gt;
&lt;li&gt;Provider.of를 통해서 type T에 인스턴스를 적용할 때 두가지 방법으로 가능&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Provider.of&amp;lt;T&amp;gt;(context)&lt;/code&gt; : 인스턴스를 액세스하고 변화가 있으면 리빌드. -&amp;gt; 데이터와 UI의 동기화&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Provider.of&amp;lt;T&amp;gt;(context&lt;/code&gt;, listen:false) : 인스턴스를 액세스만 하고 변화를 추적하지 않는다.  -&amp;gt; Dependency Injection&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Provider extendsion methods
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;//1. value change not listen (변화 감지x)&lt;/span&gt;
&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;read&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Provider&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;listen:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;//* 2. value change listen(변화 감지O) + ChangeNotifierProvider, StreamPorvider, FutureProvider로 부터의 value를 listen.*/&lt;/span&gt;
&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;watch&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Provider&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;//* 3. property를 많이 가지고 있는 object의 특정 property만 리슨할 때 사용, 자기가 listen하고 싶은 것만 선별적으로 가능*/&lt;/span&gt;
&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="n"&gt;selector&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; 
&lt;span class="c1"&gt;//개의 이름이 변할때만 리빌드, 퍼포먼스 향상 도움&lt;/span&gt;
&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Dog&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;((&lt;/span&gt;&lt;span class="n"&gt;Dog&lt;/span&gt; &lt;span class="n"&gt;dog&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;dog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>flutter</category>
      <category>provider</category>
    </item>
  </channel>
</rss>
