[flutter] 플러터 앱에서 sticky 헤더를 사용한 사진 공유 앱 구현하기

목차

개요

이번 포스트에서는 플러터 앱에서 sticky 헤더를 사용하여 사진 공유 기능을 가진 앱을 구현하는 방법에 대해 알아보겠습니다. sticky 헤더는 스크롤시 화면 위에 고정되어 나타나는 헤더로, 사용자에게 추가적인 정보나 기능을 제공할 수 있습니다.

준비사항

이 프로젝트를 진행하기 위해 Flutter 개발 환경이 설치되어 있어야 합니다. Flutter 개발환경 설치에 대한 자세한 내용은 Flutter 공식 문서를 참고하세요.

sticky 헤더 구현하기

  1. 플러터 프로젝트 생성하기
  2. sticky 헤더 패키지 추가하기
  3. 스크롤 가능한 페이지 구현하기

1. 플러터 프로젝트 생성하기

터미널에서 다음 명령어를 실행하여 플러터 프로젝트를 생성합니다.

flutter create sticky_header_app
cd sticky_header_app

2. sticky 헤더 패키지 추가하기

pubspec.yaml 파일을 열고 sticky_headers 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  sticky_headers: ^0.2.0

다음으로 터미널에서 flutter packages get 명령어를 실행하여 패키지를 다운로드합니다.

3. 스크롤 가능한 페이지 구현하기

main.dart 파일을 열고 다음 코드를 작성합니다.

import 'package:flutter/material.dart';
import 'package:sticky_headers/sticky_headers.dart';

void main() {
  runApp(StickyHeaderApp());
}

class StickyHeaderApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sticky Header App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Sticky Header App'),
        ),
        body: ListView.builder(
          itemCount: 50,
          itemBuilder: (context, index) {
            return StickyHeader(
              header: Container(
                height: 50,
                color: Colors.blue,
                alignment: Alignment.center,
                child: Text(
                  'Header $index',
                  style: TextStyle(color: Colors.white),
                ),
              ),
              content: Container(
                height: 200,
                color: Colors.grey[300],
                child: Center(
                  child: Text(
                    'Content $index',
                  ),
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}

위 코드는 StickyHeader 위젯을 사용하여 스크롤 가능한 페이지를 구현한 예제입니다. header 속성에는 sticky 헤더를 위한 위젯을, content 속성에는 페이지의 내용을 구성하는 위젯을 넣어줍니다. 적절히 header와 content를 작성하고, 스크롤하여 동작을 확인해보세요.

사진 공유 기능 추가하기

사진 공유 기능을 추가하기 위해 디바이스의 갤러리에 접근하고 선택된 사진을 공유하는 기능을 구현해보겠습니다.

  1. permission_handler 패키지 추가하기
  2. 사진 공유 기능 구현하기

1. permission_handler 패키지 추가하기

pubspec.yaml 파일을 열고 permission_handler 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  sticky_headers: ^0.2.0
  permission_handler: ^10.0.0

다음으로 터미널에서 flutter packages get 명령어를 실행하여 패키지를 다운로드합니다.

2. 사진 공유 기능 구현하기

main.dart 파일에 다음 코드를 추가합니다.

import 'package:flutter/material.dart';
import 'package:sticky_headers/sticky_headers.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(StickyHeaderApp());
}

class StickyHeaderApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sticky Header App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Sticky Header App'),
        ),
        body: ListView.builder(
          itemCount: 50,
          itemBuilder: (context, index) {
            return StickyHeader(
              header: Container(
                height: 50,
                color: Colors.blue,
                alignment: Alignment.center,
                child: Text(
                  'Header $index',
                  style: TextStyle(color: Colors.white),
                ),
              ),
              content: GestureDetector(
                onTap: () async {
                  if (await Permission.photos.request().isGranted) {
                    final image = await ImagePicker().getImage(
                      source: ImageSource.gallery,
                    );
                    // 이미지를 공유하는 로직 추가
                  } else {
                    print('Permission denied');
                  }
                },
                child: Container(
                  height: 200,
                  color: Colors.grey[300],
                  child: Center(
                    child: Text(
                      'Content $index',
                    ),
                  ),
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}

위 코드에서 content 속성에 있는 GestureDetector 위젯은 터치 이벤트가 발생했을 때 기능을 수행합니다. onTap 콜백에서는 사용자의 권한 동의 후 갤러리에서 사진을 선택하고, 사진을 공유하는 기능을 구현할 수 있습니다.

결론

이번 포스트에서는 플러터 앱에서 sticky 헤더를 사용하여 사진 공유 앱을 구현하는 방법에 대해 알아보았습니다. sticky 헤더를 활용하여 사용자에게 추가적인 정보 및 기능을 제공할 수 있으며, 다양한 기능을 추가하여 사용자가 편리하게 앱을 이용할 수 있도록 개발해보세요.