[Flutter] 블로그 만들기 - 기본 프로젝트 설정

2025. 2. 8. 18:28·Flutter/App
728x90

Flutter로 블로그 앱을 만들기 위한 기본 프로젝트 설정을 정리한 글입니다. 필요한 라이브러리, 테마 설정, 네비게이션 및 기본 페이지 구조까지 포함되어 있습니다.


1. 프로젝트에 필요한 라이브러리 추가

pubspec.yaml에 필요한 라이브러리를 추가합니다.

cupertino_icons: ^1.0.8
flutter_svg: ^2.0.6
intl: ^0.18.1
dio: ^5.2.0 # 서버와 통신하기 위해 필요한 라이브러리 입니다.
flutter_riverpod: ^2.3.6 # 상태관리 Riverpod 라이브러리 입니다.
logger: ^1.3.0 # 콘솔창에서 결과물을 쉽게 확인할 수 있도록 하는 Log 라이브러리입니다.
flutter_secure_storage: ^8.0.0 # 어플리케이션 Secure Storage를 쉽게 사용할 수 있도록 도와주는 라이브러리입니다.
pull_to_refresh: ^2.0.0

📌 설명

  • dio: 서버와 HTTP 통신을 쉽게 처리할 수 있는 라이브러리
  • flutter_riverpod: 상태 관리를 위한 Riverpod 라이브러리
  • logger: 콘솔 로그를 보기 쉽게 출력하는 라이브러리
  • flutter_secure_storage: 보안 저장소를 쉽게 사용할 수 있도록 도와주는 라이브러리
  • pull_to_refresh: 리스트를 새로고침할 수 있도록 하는 라이브러리

2. Linter 설정

코드 스타일과 품질을 검사하는 linter 설정을 추가합니다.

linter
#linter란?
# 코드 스타일과 품질을 검사하여 코드에 있는 잠재적 오류
# 스타일 위반, 비효율적 패턴 등을 알려주는 도구입니다.
linter:
  # The lint rules applied to this project can be customized in the
  # section below to disable rules from the `package:flutter_lints/flutter.yaml`
  # included above or to enable additional rules. A list of all available lints
  # and their documentation is published at https://dart.dev/lints.
  #
  # Instead of disabling a lint rule for the entire project in the
  # section below, it can also be suppressed for a single line of code
  # or a specific dart file by using the `// ignore: name_of_lint` and
  # `// ignore_for_file: name_of_lint` syntax on the line or in the file
  # producing the lint.
  rules:
    # 상수로 선언 가능한 생성자에 대해 경고를 표시하지 않음으로 설정.
    prefer_const_constructors: false
    # 변하지 않는 변수에 대해 const로 선언하지 않아도 경고를 표시하지 않음.
    prefer_const_declarations: false
    # 불변 컬렉션(List, Map, Set 등)에 대해 const를 사용하지 않아도 경고를 표시하지 않음.
    prefer_const_literals_to_create_immutables: false
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule

📌 설명

  • prefer_const_constructors: 상수로 선언 가능한 생성자에 대해 경고를 표시하지 않음
  • prefer_const_declarations: 변하지 않는 변수에 대해 const를 선언하지 않아도 경고를 표시하지 않음
  • prefer_const_literals_to_create_immutables: 불변 컬렉션(List, Map, Set 등)에 대해 const를 사용하지 않아도 경고를 표시하지 않음

3. 기본 페이지 뼈대 만들기

아래와 같이 블로그의 기본적인 화면을 구성합니다.

📌 회원가입 페이지

import 'package:flutter/material.dart';

class JoinPage extends StatelessWidget {
  const JoinPage({super.key});

  @override
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}

📌 로그인 페이지

import 'package:flutter/material.dart';

class LoginPage extends StatelessWidget {
  const LoginPage({super.key});

  @override
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}

📌 게시글 작성 페이지

import 'package:flutter/material.dart';

class PostWritePage extends StatelessWidget {
  const PostWritePage({super.key});

  @override
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}

4. UI에서 사용될 공통 상수 정의

간격이나 화면 크기 등을 쉽게 관리할 수 있도록 상수를 설정합니다.

import 'package:flutter/material.dart';

const double smallGap = 5.0;
const double mediumGap = 10.0;
const double largeGap = 20.0;
const double xlargeGap = 100.0;

// 간혹 현재 모바일 크기의 가로 , 세로 크기를 동적으로 가져와야 할 때가 있다.
double getScreenWidth(BuildContext context) {
  return MediaQuery.of(context).size.width;
}

// Drawer의 너비 설정
double getDrawerWidth(BuildContext context) {
  return getScreenWidth(context) * 0.6;
}

// 현재 모바일 화면의 세로 크기 가져오기
double getScreenHeight(BuildContext context) {
  return MediaQuery.of(context).size.height;
}

5. 테마 설정 (ThemeData)

Flutter의 ThemeData를 설정하여 앱의 기본 스타일을 정의합니다.

import 'package:flutter/material.dart';

ThemeData theme() {
  return ThemeData(
    appBarTheme: appBarTheme(),
    useMaterial3: true,
  );
}

AppBarTheme appBarTheme() {
  return AppBarTheme(
    titleTextStyle: TextStyle(color: Colors.white, fontSize: 20),
    centerTitle: true,
    backgroundColor: Colors.black12,
    elevation: 0,
  );
}

📌 설명

  • useMaterial3: true → Material 3 스타일 적용
  • appBarTheme() → 앱바의 배경 색상 및 제목 스타일 설정

6. Logger 설정

앱에서 로그를 쉽게 출력할 수 있도록 logger 라이브러리를 설정합니다.

import 'package:logger/logger.dart';

final logger = Logger();

📌 설명

  • Logger() → 디버깅 시 콘솔에서 로그를 보기 쉽게 출력

7. 네비게이션 설정

Flutter에서 페이지 이동을 관리하는 Navigator를 설정합니다.

import 'package:class_f_story/_core/constants/theme.dart';
import 'package:class_f_story/ui/pages/auth/join_page/join_page.dart';
import 'package:class_f_story/ui/pages/auth/login_page/login_page.dart';
import 'package:class_f_story/ui/pages/post/list_page/post_list_page.dart';
import 'package:class_f_story/ui/pages/post/write_page/post_write_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

void main() {
  runApp(const ProviderScope(child: MyApp()));
}

// 사전 기반 --> Navigator(화면 전환을 관리하는 객체)  -- stack 구조로 화면을 관리 한다.
GlobalKey<NavigatorState> navigatorkey = GlobalKey<NavigatorState>();
// 고유 키를 생성 (GlobalKey) -> 모든 위젯은 고유 값을 식별하기 위해 키를 가질 수 있다.
// 전역 변수로 navigatorkey 선언 -> Navigator 관리 상태에 접근이 가능하다
// 현재 가장 위에 있는 context 를 알아 낼 수 있습니다.

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // context 가 없는 곳에서 context를 사용할 수 있게 하는 방법
      navigatorKey: navigatorkey,
      debugShowCheckedModeBanner: false,
      home: LoginPage(),
      // initialRoute: LoginPage(),
      routes: {
        "/login": (context) => LoginPage(),
        "/join": (context) => JoinPage(),
        "/post/list": (context) => PostListPage(),
        "/post/write": (context) => PostWritePage()
      },
      theme: theme(),
    );
  }
}

📌 설명

  • GlobalKey<NavigatorState>() → 전역적으로 Navigator를 관리할 수 있도록 설정
  • routes → 로그인, 회원가입, 게시글 목록, 게시글 작성 페이지를 등록

8. 마무리

이번 글에서는 Flutter로 블로그 앱을 개발하기 위한 기본적인 프로젝트 설정을 다뤘습니다.

✅ 정리

  • 필수 라이브러리 추가 (dio, flutter_riverpod, logger 등)
  • linter 설정
  • 기본 페이지 (LoginPage, JoinPage, PostWritePage)
  • UI 상수 (gap, screenWidth, screenHeight 등)
  • 앱 전체 테마 (ThemeData)
  • logger 설정
  • Navigator 및 라우팅 설정

다음 글에서는 회원가입 및 로그인 기능을 구현해보겠습니다. 🚀

 

 

'Flutter > App' 카테고리의 다른 글

"[Flutter] 블로그 만들기 - 서버 통신의 모든 것 (Dio 활용)  (0) 2025.02.09
[Flutter] 블로그 만들기 - 로그인 UI 구성  (0) 2025.02.08
[Flutter] 상태 관리 앱 만들기 (라이브러리 사용)  (0) 2025.02.05
[Flutter]상태 관리 앱 만들기 (nheritedWidget 사용)  (0) 2025.02.03
[Flutter] 상태 관리 앱 만들기 (StatefulWidget 사용)  (1) 2025.02.03
'Flutter/App' 카테고리의 다른 글
  • "[Flutter] 블로그 만들기 - 서버 통신의 모든 것 (Dio 활용)
  • [Flutter] 블로그 만들기 - 로그인 UI 구성
  • [Flutter] 상태 관리 앱 만들기 (라이브러리 사용)
  • [Flutter]상태 관리 앱 만들기 (nheritedWidget 사용)
공돌이 출신 개발자
공돌이 출신 개발자
공돌이 출신 개발자입니다
  • 공돌이 출신 개발자
    공돌이 출신 개발자
    공돌이 출신 개발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • Database (0)
        • SQL (0)
        • 1일 1쿼리 (9)
      • Flutter (40)
        • Dart 언어 (18)
        • App (22)
      • Git (0)
      • Http 기초 지식 (14)
      • HTML5 & CSS3 (0)
      • Java (33)
      • JSP (0)
      • JavaScript (0)
      • Linux (0)
      • MSA (0)
      • Project (0)
      • React (0)
      • Spring (19)
      • 설치 메뉴얼 (1)
      • [Flutter] 프로젝트 (눈길) (8)
        • 작업일지 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    플러터
    앱 개발
    앱개발
    Java
    프로그래밍
    공부
    SQLD
    블로그 만들기
    클래스
    안드로이드 앱 개발
    JAVA 기초
    jsp
    android studio
    로그인
    dart
    데이터
    HTTP
    개발
    객체지향
    회원가입
    메서드
    객체
    프로젝트
    1일1쿼리
    flutter
    SQL
    spring boot
    안드로이드
    코딩
    Android
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
공돌이 출신 개발자
[Flutter] 블로그 만들기 - 기본 프로젝트 설정
상단으로

티스토리툴바