<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev-nam.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 13 Feb 2022 13:34:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dev-nam.log</title>
            <url>https://images.velog.io/images/dev-nam/profile/55551f9c-1037-45a2-b0f8-7b89e740899a/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dev-nam.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev-nam" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Flutter FutureBuilder List]]></title>
            <link>https://velog.io/@dev-nam/Flutter-FutureBuilder-List-Example</link>
            <guid>https://velog.io/@dev-nam/Flutter-FutureBuilder-List-Example</guid>
            <pubDate>Sun, 13 Feb 2022 13:34:39 GMT</pubDate>
            <description><![CDATA[<h3 id="flutter-futurebuilder-example">Flutter FutureBuilder Example</h3>
<pre><code class="language-dart">@override
Widget build(BuildContext context) {
  return Scaffold(
    ...,
    body: Center(
      child: FutureBuilder&lt;List&lt;Model&gt;&gt;(
        future: DBHelper.instance.getItems(),
        builder: (BuildContext context, AsyncSnapshot&lt;List&lt;Model&gt;&gt; snapshot) {
          if (!snapshot.hasData) {
            return Container();
          }
          return snapshot.data!.isEmpty
            ? Container()
            : ListView(
                children: snapshot.data!
                .where((item) =&gt; true) 
                .map((item) =&gt; Model(
                  id: item.id,
                  title: item.title,
                  ...,
                ))
                .toList(),
              );
        }
      ),
    ),
  );
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flutter ListView Scroll 위치 초기화]]></title>
            <link>https://velog.io/@dev-nam/Flutter-ListView-Scroll-%EC%9C%84%EC%B9%98-%EC%B4%88%EA%B8%B0%ED%99%94</link>
            <guid>https://velog.io/@dev-nam/Flutter-ListView-Scroll-%EC%9C%84%EC%B9%98-%EC%B4%88%EA%B8%B0%ED%99%94</guid>
            <pubDate>Sun, 13 Feb 2022 13:23:16 GMT</pubDate>
            <description><![CDATA[<h3 id="listview-scroll-위치-초기화">ListView Scroll 위치 초기화</h3>
<p>리스트 검색 기능을 구현하다보면 사용자 요청에 의해 검색 내용이 변경되거나 초기화될 때, 리스트 위치를 최상단으로 위치시켜주는게 사용자 편의성을 높여준다고 생각한다.</p>
<p>이때 Scroll Controller를 이용해서 ListView의 스크롤 위치를 변경할 수 있다.</p>
<pre><code class="language-dart">final ScrollController _scrollController = ScrollController();

void _scrollToTop() {
  _scrollController.jumpTo(0);
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ListView(
      controller: _scrollController,
      children: &lt;Widget&gt;[
        ...,
      ],
    ),
  );
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQLITE 테이블 초기화]]></title>
            <link>https://velog.io/@dev-nam/SQLITE-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B4%88%EA%B8%B0%ED%99%94</link>
            <guid>https://velog.io/@dev-nam/SQLITE-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B4%88%EA%B8%B0%ED%99%94</guid>
            <pubDate>Mon, 07 Feb 2022 13:39:09 GMT</pubDate>
            <description><![CDATA[<h3 id="sqlite-테이블-초기화">SQLITE 테이블 초기화</h3>
<p>SQLite에는 Truncate 명령어가 없어서 모든 데이터를 지우려면 Delete 처리해야 한다. 그리고 Autoincrement 값을 보기 좋게 처리하기 위해 seq 값을 초기화하면 Truncate과 비슷하게(?) 된다.</p>
<pre><code class="language-sql">// 테이블에 모든 데이터를 삭제한다.
DELETE FROM {TABLE_NAME};

// 테이블 seq 값을 0으로 초기화한다.
UPDATE SQLITE_SEQUENCE SET seq = 0 WHERE name = &#39;{TABLE_NAME}&#39;;</code></pre>
]]></description>
        </item>
    </channel>
</rss>