<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>torii0_12.log</title>
        <link>https://velog.io/</link>
        <description>기록하는 미미</description>
        <lastBuildDate>Wed, 18 Dec 2024 08:15:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>torii0_12.log</title>
            <url>https://velog.velcdn.com/images/torii0_12/profile/b7232894-7aa3-42db-b682-2caa87fdd886/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. torii0_12.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/torii0_12" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[FCM(Firebase Cloud Messaging)]]></title>
            <link>https://velog.io/@torii0_12/FCMFirebase-Cloud-Messaging</link>
            <guid>https://velog.io/@torii0_12/FCMFirebase-Cloud-Messaging</guid>
            <pubDate>Wed, 18 Dec 2024 08:15:56 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>포그라운드 상태 vs 백그라운드 상태
Flutter에서 FCM(Firebase Cloud Messaging)과 같은 푸시 알림에서 &quot;포그라운드(foreground) 상태&quot;와 &quot;백그라운드(background) 상태&quot;는 <strong>앱의 실행 상태</strong>를 가리킵니다. 각각의 상태는 앱이 사용자와 얼마나 상호작용 가능한지, 그리고 푸시 알림을 처리하는 방식에 영향을 미칩니다.</p>
</blockquote>
<hr>
<h3 id="1-포그라운드-상태-foreground">1. <strong>포그라운드 상태 (Foreground)</strong></h3>
<ul>
<li><p><strong>의미</strong>  </p>
<ul>
<li>앱이 현재 화면에 표시되고 있으며, 사용자가 앱과 직접 상호작용하고 있는 상태.</li>
<li>앱이 활성화된 상태로, <code>onResume</code> 또는 <code>onStart</code> 상태에 해당합니다.</li>
<li>앱이 열려있고, UI가 보이는 상태에서 알림을 수신했을 때의 처리를 다룹니다.</li>
</ul>
</li>
<li><p><strong>특징</strong>  </p>
<ul>
<li>기본적으로 푸시 알림은 <strong>시스템 트레이</strong>(알림 센터)에 표시되지 않습니다.</li>
<li>대신, FCM 메시지가 앱 내에서 바로 처리됩니다.</li>
<li>개발자는 포그라운드 상태에서도 알림을 표시하려면 <strong>사용자 정의 UI</strong>를 구현하거나 수동으로 알림을 띄워야 합니다.</li>
</ul>
</li>
<li><p><strong>예시 (Flutter FCM 포그라운드 처리)</strong>  </p>
<pre><code class="language-dart">FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print(&#39;포그라운드에서 메시지를 받았습니다: ${message.notification?.title}&#39;);
// 필요한 경우 로컬 알림 표시
});</code></pre>
</li>
</ul>
<hr>
<h3 id="2-백그라운드-상태-background">2. <strong>백그라운드 상태 (Background)</strong></h3>
<ul>
<li><p><strong>의미</strong>  </p>
<ul>
<li>앱이 실행 중이지만, 현재 화면에 보이지 않는 상태.</li>
<li>앱이 최소화되었거나, 다른 앱이 실행 중인 경우.</li>
<li>Flutter에서는 <code>onPause</code> 상태에 해당하며, 사용자는 앱과 직접 상호작용하지 않습니다.</li>
</ul>
</li>
<li><p><strong>특징</strong>  </p>
<ul>
<li>기본적으로 푸시 알림이 <strong>시스템 트레이</strong>(알림 센터)에 표시됩니다.</li>
<li>알림을 탭하면 앱이 다시 활성화(포그라운드 상태)되며, 해당 알림의 데이터를 처리할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>예시 (Flutter FCM 백그라운드 처리)</strong><br>백그라운드 상태에서는 알림을 자동으로 처리하고, 사용자가 알림을 탭할 때 앱이 실행됩니다. 개발자는 메시지를 처리하려면 <code>onBackgroundMessage</code>를 사용해야 합니다.</p>
</li>
</ul>
<pre><code class="language-dart">Future&lt;void&gt; _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  print(&#39;백그라운드에서 메시지를 받았습니다: ${message.notification?.title}&#39;);
  // 백그라운드에서 데이터 처리
}

void main() {
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
  runApp(MyApp());
}</code></pre>
<hr>
<h3 id="3-종료-상태-terminated">3. <strong>종료 상태 (Terminated)</strong></h3>
<ul>
<li><p><strong>의미</strong>  </p>
<ul>
<li>앱이 완전히 종료된 상태.</li>
<li>Flutter 앱이 메모리에서 제거되었거나, 앱이 실행 중이지 않은 경우.</li>
</ul>
</li>
<li><p><strong>특징</strong>  </p>
<ul>
<li>사용자가 알림을 탭하면 앱이 다시 시작되며, <code>getInitialMessage</code>로 초기 메시지를 처리할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>예시 (Flutter FCM 종료 상태 처리)</strong>  </p>
<pre><code class="language-dart">FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
if (message != null) {
  print(&#39;앱 종료 상태에서 메시지를 받았습니다: ${message.notification?.title}&#39;);
}
});</code></pre>
</li>
</ul>
<hr>
<h3 id="요약-비교">요약 비교</h3>
<table>
<thead>
<tr>
<th><strong>상태</strong></th>
<th><strong>설명</strong></th>
<th><strong>처리 방식</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>포그라운드</strong></td>
<td>앱이 열려 있고 사용자와 상호작용 중</td>
<td><code>onMessage</code>로 메시지 처리. 직접 UI 알림을 띄우는 추가 작업 필요.</td>
</tr>
<tr>
<td><strong>백그라운드</strong></td>
<td>앱이 최소화되거나 다른 앱이 실행 중</td>
<td>알림은 시스템 트레이에 자동 표시. <code>onBackgroundMessage</code>로 데이터 처리 가능.</td>
</tr>
<tr>
<td><strong>종료 상태</strong></td>
<td>앱이 메모리에서 완전히 종료된 상태</td>
<td>앱이 다시 시작되면 <code>getInitialMessage</code>로 초기 메시지를 처리.</td>
</tr>
</tbody></table>
<p>이렇게 각 상태를 이해하고 적절히 구현하면, 사용자 경험을 더 풍부하게 만들 수 있습니다. 😊</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ga,adb ]]></title>
            <link>https://velog.io/@torii0_12/gaadb</link>
            <guid>https://velog.io/@torii0_12/gaadb</guid>
            <pubDate>Mon, 23 Sep 2024 01:13:37 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/torii0_12/post/9795d61e-fb00-4830-a6ee-69b7d6d9c707/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[StreamBuilder와 Firebase에 컬랙션 등록 방법]]></title>
            <link>https://velog.io/@torii0_12/StreamBuilder%EC%99%80-Firebase%EC%97%90-%EC%BB%AC%EB%9E%99%EC%85%98-%EB%93%B1%EB%A1%9D-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@torii0_12/StreamBuilder%EC%99%80-Firebase%EC%97%90-%EC%BB%AC%EB%9E%99%EC%85%98-%EB%93%B1%EB%A1%9D-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Thu, 12 Sep 2024 08:11:44 GMT</pubDate>
            <description><![CDATA[<p>플러터에서 stream 사용하려면
streambuilder 위젯 사용
스트림으로 전달되는 데이터 (이벤트) 구독가능
새로 리빌드 되며 최신 데이터 반영 가능</p>
<p>스트림이란 데이터 소스가 바뀔 때 마다 새로운 값을 전달해주는 단순한 다트의 한 객체
모든 스트림의 과정은 클라우드 파이어스토어 패키지에 의해 관리됨</p>
<p>snapshot메소드는 스트림을 반환 =&gt;데이터가 바뀔때마다 새로운 밸류값 전달</p>
<p>snapshot.data 스냅샷 뒤 데이터를 불러오면 실제적으로 스트림으로 전달받은 데이터에 접근 가능
!: 데이터 필드는 당연히 데이터를 가지고 있어야하기 때문</p>
<pre><code>        body: StreamBuilder(
          stream: FirebaseFirestore.instance.collection(&#39;chats/BIbqhjgryoag9EFFXa7U/message&#39;).snapshots(), //클라우드 파이어스토어에 접근
          builder: (BuildContext context, AsyncSnapshot&lt;QuerySnapshot&lt;Map&lt;String, dynamic&gt;&gt;&gt; snapshot) {
           if(snapshot.connectionState == ConnectionState.waiting){
             return Center(
               child: CircularProgressIndicator(),
             );
           }
            final docs = snapshot.data!.docs;
            return ListView.builder(
              itemCount: docs.length,
              itemBuilder: (context, index) {
                return Container(
                  padding: EdgeInsets.all(8),
                  child: Text(
                    docs[index][&#39;text&#39;],
                    style: TextStyle(fontSize: 20),
                  ),
                );
              },
            );
          }, //가장 최신의 스냅샷을 가져오기 위한 클래스.
        )</code></pre><p><img src="https://velog.velcdn.com/images/torii0_12/post/04727523-4e0c-49f8-824e-50c1727da621/image.png" alt=""></p>
<p>이메일과 패스워드 통해 새로운 유저를 파이어베이스에 등록.
파이어베이스에 <strong>&#39;user&#39;</strong> 라는 새로운 컬렉션 등록. 
새로운 유저의 아이디를 등록함 (아이디:userName과  userEmail 동록 됨)</p>
<p><img src="https://velog.velcdn.com/images/torii0_12/post/6e678eab-16cd-48db-b151-570adeecbf5c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이어베이스 연동 중 버전 수정]]></title>
            <link>https://velog.io/@torii0_12/%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%97%B0%EB%8F%99-%EC%A4%91-%EB%B2%84%EC%A0%84-%EC%88%98%EC%A0%95</link>
            <guid>https://velog.io/@torii0_12/%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%97%B0%EB%8F%99-%EC%A4%91-%EB%B2%84%EC%A0%84-%EC%88%98%EC%A0%95</guid>
            <pubDate>Wed, 11 Sep 2024 04:36:15 GMT</pubDate>
            <description><![CDATA[<pre><code>E/flutter (15254): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(null-error, Host platform returned null value for non-null return value., null, null)</code></pre><p>앱을 실행 시키면 스플래쉬 화면에서 정지.위의 오류 출력</p>
<p>android 수준의 build.gradle에서
<img src="https://velog.velcdn.com/images/torii0_12/post/e1ebbd78-2c3c-42bc-bc01-65e44e244c4b/image.png" alt="">
<img src="https://velog.velcdn.com/images/torii0_12/post/20abfb3c-38d1-4cbe-a2b0-3f9daa1f6a01/image.png" alt=""></p>
<p>버전 낮춰주면 실행됨</p>
<p>또는 CLI 설정 수정</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[에러]fatal: The current branch feat/validation has no upstream branch.]]></title>
            <link>https://velog.io/@torii0_12/%EC%97%90%EB%9F%ACfatal-The-current-branch-featvalidation-has-no-upstream-branch</link>
            <guid>https://velog.io/@torii0_12/%EC%97%90%EB%9F%ACfatal-The-current-branch-featvalidation-has-no-upstream-branch</guid>
            <pubDate>Tue, 10 Sep 2024 06:20:39 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>fatal: The current branch feat/validation has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin 브랜치 이름</p>
</blockquote>
<p>원인:원격 저장소에 해당 브랜치 설정 안해줘서.</p>
<p>해결:
git push --set-upstream origin 브랜치 이름</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[flutter]TextFormField,Padding,Margin]]></title>
            <link>https://velog.io/@torii0_12/flutterTextFormFieldPaddingMargin</link>
            <guid>https://velog.io/@torii0_12/flutterTextFormFieldPaddingMargin</guid>
            <pubDate>Mon, 09 Sep 2024 08:10:39 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>TextField</p>
</blockquote>
<p>텍스트를 입력받기 위해 사용
텍스트필드에서 값을 입력받으면 텍스트에딧팅컨트롤러 사용해야함.
텍스트필드가 많으면 여러 컨트롤러 필요함 -&gt; 관리 어려움</p>
<blockquote>
<p>TextFormField</p>
</blockquote>
<p>유효성 검사 쉽게 할 수 있음
쉽게 밸리데이션 값 등을 받아올수 있음.</p>
<pre><code> Form(
                        child: Column(
                          children: [
                            TextFormField(
                              key: ValueKey(4),
                              decoration: InputDecoration(
                                  prefixIcon: Icon(
                                    Icons.email,
                                    color: Palette.iconColor,
                                  ),
                                  enabledBorder: OutlineInputBorder(
                                    borderSide: BorderSide(
                                      color: Palette.textColor1,
                                    ),
                                    borderRadius: BorderRadius.all(
                                      Radius.circular(35),
                                    ),
                                  ),
                                  focusedBorder: OutlineInputBorder(
                                    borderSide: BorderSide(
                                      color: Palette.textColor1,
                                    ),
                                    borderRadius: BorderRadius.all(
                                      Radius.circular(35),
                                    ),
                                  ),
                                  hintText: &#39;이메일&#39;,
                                  hintStyle: TextStyle(
                                    fontSize: 14,
                                    color: Palette.textColor1,
                                  ),
                                  contentPadding: EdgeInsets.all(10)),
                            ),
                            SizedBox(height: 8),</code></pre><blockquote>
<p>Padding</p>
</blockquote>
<p>padding은 위젯 내부의 여백을 말합니다. 위젯의 경계와 그 안에 포함된 콘텐츠 사이에 공간을 만드는 역할을 합니다. padding을 사용하면 위젯의 경계 안에서 콘텐츠를 일정 간격만큼 떨어뜨려 배치할 수 있습니다.</p>
<p>위치: 위젯 내부에 위치하는 콘텐츠와 위젯 경계 사이의 간격을 의미합니다.
사용 예: 텍스트, 이미지 등이 위젯 경계에서 떨어져 있게 하고 싶을 때 사용.</p>
<blockquote>
<p>Margin</p>
</blockquote>
<p>margin은 위젯 외부의 여백을 말합니다. 위젯과 다른 위젯(또는 부모 컨테이너) 사이의 간격을 설정할 때 사용됩니다. margin을 사용하면 위젯이 배치되는 공간 외부에 여백을 둘 수 있습니다.</p>
<p>위치: 위젯 바깥쪽과 다른 위젯 또는 부모 사이의 간격을 의미합니다.
사용 예: 위젯과 다른 위젯 사이의 간격을 만들고 싶을 때 사용.</p>
<p>시각적 차이점
<strong>padding</strong>은 위젯 안쪽에서의 간격을 조정하여 위젯의 콘텐츠가 안쪽으로 밀려납니다.
<strong>margin</strong>은 위젯 밖에서 간격을 만들어 다른 위젯들과의 거리를 조정합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[flutter]firebase 사용]]></title>
            <link>https://velog.io/@torii0_12/flutterfirebase-%EC%82%AC%EC%9A%A9</link>
            <guid>https://velog.io/@torii0_12/flutterfirebase-%EC%82%AC%EC%9A%A9</guid>
            <pubDate>Mon, 09 Sep 2024 06:10:21 GMT</pubDate>
            <description><![CDATA[<p>firebase를 사용하기 위해
firebase_core 패키지에서 firebase.initializeApp()메서드 호출 해야함
firebase.initializeApp()
:비동기 방식의 메서드</p>
<p>플러그인을 초기화 할때 플러그인의 초기화 메서드가 비동기방식이면 문제발생</p>
<p>runApp()-플러터 최상위 메서드 호출 전엔 플러터엔진이 초기화 되지 않아 접근할 수 없게 됨.</p>
<p>따라서, 파이어베이스 초기화(비동기 메서드) 사용하려면 
1.플러터 코어 엔진 초기화:
import &#39;package:firebase_core/firebase_core.dart&#39;;</p>
<p>WidgetsFlutterBinding.ensureInitialized();</p>
<p>2.Firebase.initializeApp();</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[flutter]오류]]></title>
            <link>https://velog.io/@torii0_12/flutter%EC%98%A4%EB%A5%98Execution-failed-for-task-appcompileDebugKotlin.-A-failure-occurred-while-executing-org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkersGradleKotlinCompilerWorkAction-Compilation-error.-See-log-for-more-details</link>
            <guid>https://velog.io/@torii0_12/flutter%EC%98%A4%EB%A5%98Execution-failed-for-task-appcompileDebugKotlin.-A-failure-occurred-while-executing-org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkersGradleKotlinCompilerWorkAction-Compilation-error.-See-log-for-more-details</guid>
            <pubDate>Mon, 09 Sep 2024 02:25:54 GMT</pubDate>
            <description><![CDATA[<p>firebase 와 연동하고, cloud_firestore를 설치한후 이뮬레이터를 돌려봤을때</p>
<blockquote>
<p>Execution failed for task &#39;:app:compileDebugKotlin&#39;. &gt; A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction &gt; Compilation error. See log for more details</p>
</blockquote>
<p>오류발생</p>
<p>당황해서 이것저것 찾아봤지만 
아래 flutter fix에서 해결책 제시해줌</p>
<blockquote>
<p> [!] Your project requires a newer version of the Kotlin Gradle plugin.<br> Find the latest version on <a href="https://kotlinlang.org/docs/releases.html#release-details">https://kotlinlang.org/docs/releases.html#release-details</a>, then<br> update the<br> version number of the plugin with id &quot;org.jetbrains.kotlin.android&quot; in the plugins block of 
 C:\프로젝트명\android\settings.gradle.                                               </p>
</blockquote>
<p> Alternatively (if your project was created before Flutter 3.19), update<br> C:\practice\todo_app\android\build.gradle<br> ext.kotlin_version = &#39;<latest-version>&#39;      </p>
<p>  setting.gradle에서 kotlin_version = &#39;<latest-version>&#39;수정해 주란다.</p>
<p>  <img src="https://velog.velcdn.com/images/torii0_12/post/f05565c4-6e5d-4e04-84da-8c908bcede53/image.png" alt=""></p>
<p>  코틀린 최신버전에 맞게 수정 
  <a href="https://kotlinlang.org/docs/releases.html#release-details">https://kotlinlang.org/docs/releases.html#release-details</a>
  에서 확인
<img src="https://velog.velcdn.com/images/torii0_12/post/0d53c8c1-9602-4f74-9454-1b418983b717/image.png" alt=""></p>
<p>  이뮬레이터 실행됨.</p>
<p>  오류를 잘 읽어보자~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[flutter Completer]]></title>
            <link>https://velog.io/@torii0_12/flutter-Completer</link>
            <guid>https://velog.io/@torii0_12/flutter-Completer</guid>
            <pubDate>Mon, 02 Sep 2024 01:45:47 GMT</pubDate>
            <description><![CDATA[<p><a href="https://api.flutter.dev/flutter/dart-async/Completer-class.html">https://api.flutter.dev/flutter/dart-async/Completer-class.html</a></p>
<p>Completer
 Dart의 Completer는 Future를 수동으로 완성시킬 수 있게 해주는 클래스. 보통 Future는 어떤 비동기 작업이 완료될 때 값을 반환하기 위해 사용되는데, Completer는 이 Future를 수동으로 제어할 수 있게 해준다.</p>
<p> Completer가 사용되는 상황
-비동기 작업의 결과를 수동으로 결정하고 싶을 때.
-여러 비동기 작업을 조합하여 하나의 작업으로 나타내고 싶을 때.
-이벤트 기반 시스템에서 특정 이벤트가 발생했을 때 비동기 작업을 완료시키고 싶을 때.</p>
<pre><code>import &#39;dart:async&#39;;

void main() {
  // Completer 생성
  Completer&lt;String&gt; completer = Completer();

  // Completer의 Future를 받아옴
  Future&lt;String&gt; future = completer.future;

  // Future에 대한 처리
  future.then((value) {
    print(&#39;Future completed with value: $value&#39;);
  }).catchError((error) {
    print(&#39;Future completed with error: $error&#39;);
  });

  // 비동기 작업이 완료되었다고 가정하고 Completer를 완료
  completer.complete(&#39;Hello, World!&#39;);

  // 또는 오류로 완료
  // completer.completeError(&#39;An error occurred!&#39;);
}
</code></pre><p>화면에서 뒤로가기를 누르거나 앱바에서 뒤로가기를 눌렀을때 다이어로그를 띄우고 싶어 사용.</p>
<p>다이어로그 중 Y/N 버튼이 있음.
Y -&gt; Navigator.pop(context,true);  //화면 닫히며 true 반환
N -&gt; Navigator.por(context,false);  //화면 닫히며 false 반환</p>
<p>onWilPop을 사용해 뒤로가기 눌렀을때 기능 작성</p>
<pre><code>final Completer&lt;bool&gt; completer =Completer(); //객체 생성
  _myDialog(context,(didCancel){
  completer.complete(didCancel); //사용자의 선택에 따라 완료
  });
  return completer.future; // completer가 완료될 때 까지 기다린 후 그 값을 반환
</code></pre><p>  didCancel로 true/false 확인 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Git 다른 브랜치에 저장]]></title>
            <link>https://velog.io/@torii0_12/Git-%EB%8B%A4%EB%A5%B8-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%97%90-%EC%A0%80%EC%9E%A5</link>
            <guid>https://velog.io/@torii0_12/Git-%EB%8B%A4%EB%A5%B8-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%97%90-%EC%A0%80%EC%9E%A5</guid>
            <pubDate>Mon, 03 Jun 2024 04:06:22 GMT</pubDate>
            <description><![CDATA[<p>당연히 branch에서 작업하고 있다 생각했는데 main해서 하고있었다.
공동 개발 작업이라 그대로 push 하면 사고다.</p>
<p>사용법
git stash
git checkout 커밋할 브랜치
git stash pop
main에 push</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AndroidStudio Markdown실행안될때]]></title>
            <link>https://velog.io/@torii0_12/AndroidStudio-Markdown%EC%8B%A4%ED%96%89%EC%95%88%EB%90%A0%EB%95%8C</link>
            <guid>https://velog.io/@torii0_12/AndroidStudio-Markdown%EC%8B%A4%ED%96%89%EC%95%88%EB%90%A0%EB%95%8C</guid>
            <pubDate>Thu, 16 May 2024 03:39:40 GMT</pubDate>
            <description><![CDATA[<p>ReadMe를 작성하기위해 Markdown을 다운받았는데 실행이 안됨.
<img src="https://velog.velcdn.com/images/torii0_12/post/26a009c4-c3e1-4047-97e3-76025ac0ef44/image.png" alt="">
설정 잘 되어있음.</p>
<p><img src="https://velog.velcdn.com/images/torii0_12/post/bad337ca-3533-4415-b380-4e46cc111628/image.png" alt="">
<img src="https://velog.velcdn.com/images/torii0_12/post/9b35300d-7b15-4e35-aa5b-b575f5d4743e/image.png" alt="">
제일 최신것으로 설정
<img src="https://velog.velcdn.com/images/torii0_12/post/ef20c8e8-0925-42cb-bd13-3519cdeed3e7/image.png" alt=""></p>
<hr>
<p><img src="https://velog.velcdn.com/images/torii0_12/post/af6f74a2-c54b-4b7f-854c-a94d0d482ad2/image.png" alt="">
<img src="https://velog.velcdn.com/images/torii0_12/post/eb4a001a-6e29-415a-a426-1df1048256c8/image.png" alt="">
value에 체크돼있는것 풀어주고 close-&gt;restart<img src="https://velog.velcdn.com/images/torii0_12/post/93c54444-e1b5-437c-8af9-fe66df094b31/image.png" alt="">
ReadMe 미리보기가 실행된다!</p>
<p>참고자료
<a href="https://stackoverflow.com/questions/53903641/where-is-android-studio-markdown-support-plugin-preview-preference">링크텍스트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[주요 http상태코]]></title>
            <link>https://velog.io/@torii0_12/%EC%A3%BC%EC%9A%94-http%EC%83%81%ED%83%9C%EC%BD%94</link>
            <guid>https://velog.io/@torii0_12/%EC%A3%BC%EC%9A%94-http%EC%83%81%ED%83%9C%EC%BD%94</guid>
            <pubDate>Mon, 22 Apr 2024 13:32:52 GMT</pubDate>
            <description><![CDATA[<h3 id="2xx성공"><strong>2XX:성공</strong></h3>
<p>200 OK 서버가 요청을 성공적으로 처리
201 CREATED     요청 처리-&gt;새로운 리소스 생성
202 ACCEPTED 요청접수/처리완료X</p>
<h3 id="3xx리다이렉션"><strong>3XX:리다이렉션</strong></h3>
<p>301 MOVED PERMANENTLY 지정한 리소스가 새로운 URI로 이동(영구이동)
302 FOUND 요청한 리소스를 다른 URI에서 찾음</p>
<h3 id="4xx클라이언트-에러"><strong>4XX:클라이언트 에러</strong></h3>
<p>400 BAD REQUEST 잘못된 요청
401 UNAUTHORIZED 지정한 리소스에 대한 엑세스 권한이 없다
403 FORBIDDEN 지정한 리소스에 대한 엑세스가 금지 됨
404 NOT FOUND 지정한 리소스를 찾을수 없다
405 METHOD NOT ALLOWED 요청한 URI가 지정한 메소드를 지원하지 않는다</p>
<h3 id="5xx서버-에러"><strong>5XX:서버 에러</strong></h3>
<p>500 INTERNAL SERVER ERROR 서버에 에러 발생
501 NOT IMPLEMENTED 요청한 URI의 메소드에 대해 서버가 구현하고 있지 않다
502 BAD GATEWAY 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받음
503 SERVICE UNAVAILABLE 현재 서버에서 서비스 제공할수 없다
504 GATEWAY TIMEOUT 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 응답을 기다리다 타임아웃 발생</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Flutter]GestureDetector위]]></title>
            <link>https://velog.io/@torii0_12/FlutterGestureDetector</link>
            <guid>https://velog.io/@torii0_12/FlutterGestureDetector</guid>
            <pubDate>Thu, 11 Apr 2024 16:37:21 GMT</pubDate>
            <description><![CDATA[<p>GestureDetector: 위젯이 터치, 드래그, 스와이프 등의 제스처를 감지하고 처리할 수 있게 해주는 기능을 제공. 이를 통해 사용자의 상호작용에 따라 화면에 대한 반응을 정의할 수 있습니다. </p>
<p>기능
onTap: 위젯이 탭(터치)되었을 때 실행할 콜백을 정의
onDoubleTap: 위젯이 더블 탭되었을 때 실행할 콜백을 정의
onLongPress: 위젯이 길게 눌렸을 때 실행할 콜백을 정의
onPanStart, onPanUpdate, onPanEnd: 드래그 제스처가 시작되었을 때, 업데이트될 때, 끝났을 때 실행할 콜백을 정의
onScaleStart, onScaleUpdate, onScaleEnd: 확대/축소 제스처가 시작되었을 때, 업데이트될 때, 끝났을 때 실행할 콜백을 정의
onHorizontalDragStart, onHorizontalDragUpdate, onHorizontalDragEnd: 수평 드래그 제스처가 시작되었을 때, 업데이트될 때, 끝났을 때 실행할 콜백을 정의
onVerticalDragStart, onVerticalDragUpdate, onVerticalDragEnd: 수직 드래그 제스처가 시작되었을 때, 업데이트될 때, 끝났을 때 실행할 콜백을 정의
child를 가짐</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[flutter에서 showSearch란?]]></title>
            <link>https://velog.io/@torii0_12/flutter%EC%97%90%EC%84%9C-showSearch%EB%9E%80</link>
            <guid>https://velog.io/@torii0_12/flutter%EC%97%90%EC%84%9C-showSearch%EB%9E%80</guid>
            <pubDate>Thu, 11 Apr 2024 11:08:26 GMT</pubDate>
            <description><![CDATA[<p>showSearch 함수
:검색기능 지원하는 검색화면 </p>
<p>매개변수
delegate: SearchDelegate의 하위 클래스. 검색창의 동작정의&amp;검색결과 관리
-기능
검색어 입력 및 관리
검색결과 표시
검색 결과 선택 및 처리
추천 검색어 제공
검색결과 정렬 및 필터링</p>
<p>buildSuggestions
:SearchDelegate 클래스의 메서드 중 하나
검색어를 입력하면 해당 검색어를 기반으로 검색 제안을 생성하여 표시
사용자가 검색어를 입력할 때마다 이 메서드가 호출되어 검색 제안을 업데이트</p>
<p>(주로 이 메서드에서는 사용자의 입력에 따라 동적으로 검색 제안을 생성하고 이를 ListView나 다른 위젯을 사용하여 화면에 표시합니다. 사용자가 검색 제안 중 하나를 선택하면 해당 검색 결과를 화면에 표시하거나 추가적인 동작을 수행할 수 있습니다.</p>
<p>예를 들어, 사용자가 &quot;apple&quot;이라는 검색어를 입력하면 buildSuggestions 메서드는 &quot;apple&quot;이라는 검색어와 관련된 제안 항목을 생성하여 표시할 수 있습니다. 이 항목들은 사용자가 터치하여 검색 결과를 확인하거나 선택할 수 있습니다.)</p>
]]></description>
        </item>
    </channel>
</rss>