[flutter] 플러터에서 sticky 헤더를 사용한 실시간 검색어 앱 만들기

이번에는 플러터에서 sticky 헤더를 사용하여 실시간 검색어 앱을 만들어보겠습니다. Sticky 헤더는 스크롤을 할 때 항상 화면 상단에 고정되어 있는 헤더를 말합니다. 이를 이용하면 검색어 입력창을 항상 화면 상단에 유지할 수 있게 됩니다.

프로젝트 설정

  1. 먼저 Flutter SDK를 설치합니다.
  2. 새로운 Flutter 프로젝트를 생성합니다.
    flutter create sticky_header_example
    

패키지 설치

sticky_header 패키지를 사용하여 sticky 헤더를 구현할 예정입니다. 이를 위해 pubspec.yaml 파일에 다음 코드를 추가합니다.

dependencies:
  sticky_header: ^0.4.0

그리고 패키지를 설치합니다.

flutter pub get

UI 구성

  1. main.dart 파일을 열고 MaterialApp 위젯을 수정합니다.

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Sticky Header Example',
          home: HomePage(),
        );
      }
    }
    
  2. HomePage 클래스를 생성합니다.

    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Sticky Header Example'),
          ),
          body: ListView.builder(
            itemCount: 100, // 임의의 아이템 개수
            itemBuilder: (context, index) {
              return ListTile(
                title: Text('Item $index'),
              );
            },
          ),
        );
      }
    }
    
  3. 검색어 입력창을 Sticky 헤더로 만들기 위해 StickyHeaderBuilder 위젯을 사용합니다. HomePage 클래스의 body 위젯을 다음으로 수정합니다.

    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Sticky Header Example'),
          ),
          body: StickyHeaderBuilder(
            builder: (BuildContext context, double stuckAmount) {
              return Container(
                height: 60.0,
                color: Colors.blue,
                child: Center(
                  child: TextField(
                    decoration: InputDecoration(
                      hintText: 'Search',
                      border: InputBorder.none,
                    ),
                  ),
                ),
              );
            },
            content: ListView.builder(
              itemCount: 100,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text('Item $index'),
                );
              },
            ),
          ),
        );
      }
    }
    
  4. 앱을 실행하고 스크롤을 테스트해보세요. 검색어 입력창이 항상 화면 상단에 고정되어 있는 것을 확인할 수 있습니다.

결론

플러터의 sticky_header 패키지를 사용하여 실시간 검색어 앱을 만드는 방법을 알아보았습니다. 이를 추가적으로 확장하여 여러 기능을 구현할 수 있습니다. 만약 해당 패키지로 동작하지 않는 경우, 여기에서 다른 sticky 헤더 관련 패키지를 찾아볼 수도 있습니다.