Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

린트 추가 #51

Merged
merged 4 commits into from
Jul 21, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,6 @@ lib/firebase_options.dart

# Ignore metadata
.metadata

# vscode
.vscode/launch.json
34 changes: 0 additions & 34 deletions .vscode/launch.json

This file was deleted.

25 changes: 25 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"dart.analysisExcludedFolders": [
"build"
],
"dart.lineLength": 80,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": true
},
"[dart]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "Dart-Code.dart-code"
},
"files.exclude": {
"**/build": true,
"**/.dart_tool": true,
"**/ios/Flutter/Flutter.framework": true,
"**/ios/Flutter/Flutter.podspec": true,
"**/ios/Flutter/Flutter.xcworkspace": true,
"**/ios/Pods": true,
"**/ios/Runner.xcodeproj": true,
"**/ios/Runner.xcworkspace": true,
"**/.packages": true
}
}
31 changes: 31 additions & 0 deletions lib/analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
include: package:flutter_lints/flutter.yaml # 기본 flutter_lints 규칙 포함

linter:
rules:
avoid_print: true # print() 함수 사용을 피함
avoid_unused_constructor_parameters: true # 사용되지 않는 생성자 매개변수를 피함
camel_case_types: true # 타입 이름을 camelCase로 작성
constant_identifier_names: true # 상수 식별자를 대문자로 작성
control_flow_in_finally: true # finally 블록에서 제어 흐름을 사용하지 않음
curly_braces_in_flow_control_structures: true # 제어 구조에서 중괄호 사용
diagnostic_describe_all_properties: true # 진단 메시지에서 모든 속성 설명
directives_ordering: true # import 및 export 지시문의 순서 정렬
empty_constructor_bodies: true # 비어 있는 생성자 본문 피함
file_names: true # 파일 이름을 snake_case로 작성
library_prefixes: true # 라이브러리 접두사 사용
lines_longer_than_80_chars: true # 80자를 초과하는 줄 피함
list_remove_unrelated_type: true # List에서 관련 없는 타입 제거
no_logic_in_create_state: true # createState에서 로직 사용하지 않음
non_constant_identifier_names: true # 식별자를 camelCase로 작성
prefer_const_constructors: true # const 생성자 선호
prefer_final_fields: true # final 필드 사용 선호
prefer_is_empty: true # isEmpty 사용 선호
prefer_is_not_empty: true # isNotEmpty 사용 선호
prefer_typing_uninitialized_variables: true # 초기화되지 않은 변수에 타입 지정
public_member_api_docs: true # 공개 멤버에 대한 문서 작성
slash_for_doc_comments: true # 문서 주석에 슬래시 사용
sort_child_properties_last: true # 자식 속성을 마지막에 정렬
unnecessary_brace_in_string_interps: true # 문자열 보간에서 불필요한 중괄호 사용 피함
unnecessary_const: true # 불필요한 const 사용 피함
unnecessary_new: true # 불필요한 new 사용 피함
use_full_hex_values_for_flutter_colors: true # Flutter 색상에 전체 16진수 값 사용
72 changes: 35 additions & 37 deletions lib/providers/camera/fireStorageServiceProvider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,14 @@ import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:uuid/uuid.dart';

/**
* FirebaseStorageService.dart
*
* Firebase Storage Service
* - Firebase Storage에 이미지 업로드 서비스
* - uploadImageFromWeb(): 웹 이미지 업로드
* - uploadImageFromApp(): 앱 이미지 업로드
*
* @jwson-automation
*/
/// FirebaseStorageService.dart
///
/// Firebase Storage Service
/// - Firebase Storage에 이미지 업로드 서비스
/// - uploadImageFromWeb(): 웹 이미지 업로드
/// - uploadImageFromApp(): 앱 이미지 업로드
///
/// @jwson-automation

enum ImageType {
banner,
Expand All @@ -32,40 +30,40 @@ final fireStorageServiceProvider = Provider<FirebaseStorageService>((ref) {
class FirebaseStorageService {
final FirebaseStorage _storage = FirebaseStorage.instance;

Future<String> uploadImageFromWeb(Uint8List webImageFile, ImageType _type,
Future<String> uploadImageFromWeb(Uint8List webImageFile, ImageType type,
{String? fixedFileName}) async {
try {
// UUID를 사용하여 유니크한 파일 이름 생성
var uuid = Uuid();
var uuid = const Uuid();
String fullPath = '';

switch (_type) {
switch (type) {
case ImageType.banner:
fullPath = '${_type.name}/$fixedFileName';
fullPath = '${type.name}/$fixedFileName';
break;
case ImageType.profileimage:
fullPath = '${_type.name}/$fixedFileName';
fullPath = '${type.name}/$fixedFileName';
break;
case ImageType.event:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
case ImageType.item:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
case ImageType.productImage:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
case ImageType.descriptionImage:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
}

final ref = _storage.ref().child(fullPath);
await ref.putData(await webImageFile);
await ref.putData(webImageFile);
final url = await ref.getDownloadURL();
print('Image uploaded successfully : $url');
return url;
Expand All @@ -76,35 +74,35 @@ class FirebaseStorageService {
}
}

Future<String> uploadImageFromApp(File appImageFile, ImageType _type,
Future<String> uploadImageFromApp(File appImageFile, ImageType type,
{String? fixedFileName}) async {
try {
// UUID를 사용하여 유니크한 파일 이름 생성
var uuid = Uuid();
var uuid = const Uuid();

String fullPath = '';
switch (_type) {
switch (type) {
case ImageType.banner:
fullPath = '${_type.name}/$fixedFileName';
fullPath = '${type.name}/$fixedFileName';
break;
case ImageType.profileimage:
fullPath = '${_type.name}/$fixedFileName';
fullPath = '${type.name}/$fixedFileName';
break;
case ImageType.event:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
case ImageType.item:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
case ImageType.productImage:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
case ImageType.descriptionImage:
String fileName = uuid.v4() + '.jpg';
fullPath = '${_type.name}/$fileName';
String fileName = '${uuid.v4()}.jpg';
fullPath = '${type.name}/$fileName';
break;
}

Expand Down
28 changes: 13 additions & 15 deletions lib/providers/user/FirebaseAuthServiceProvider.dart
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

/**
* FirebaseAuthServiceProvider.dart
*
* Firebase Auth Service Provider
* - FirebaseAuthService를 제공하는 Provider
* - FirebaseAuthService: Firebase Auth 인증 서비스
* - user: 사용자 상태 스트림
* - signUpWithEmailPassword(): 이메일/비밀번호 회원가입
* - signInWithEmailPassword(): 이메일/비밀번호 로그인
* - signOut(): 로그아웃
* - getCurrentUser(): 현재 로그인한 사용자 가져오기
* - sendPasswordResetEmail(): 비밀번호 재설정 이메일 보내기
*
* @jwson-automation
*/
/// FirebaseAuthServiceProvider.dart
///
/// Firebase Auth Service Provider
/// - FirebaseAuthService를 제공하는 Provider
/// - FirebaseAuthService: Firebase Auth 인증 서비스
/// - user: 사용자 상태 스트림
/// - signUpWithEmailPassword(): 이메일/비밀번호 회원가입
/// - signInWithEmailPassword(): 이메일/비밀번호 로그인
/// - signOut(): 로그아웃
/// - getCurrentUser(): 현재 로그인한 사용자 가져오기
/// - sendPasswordResetEmail(): 비밀번호 재설정 이메일 보내기
///
/// @jwson-automation

final firebaseAuthServiceProvider = Provider<FirebaseAuthService>((ref) {
return FirebaseAuthService(FirebaseAuth.instance);
Expand Down
16 changes: 7 additions & 9 deletions lib/providers/user/ProfileImageProvider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

/**
* ProfileImageProvider.dart
*
* Profile Image Provider
* - 프로필 이미지 데이터를 제공하는 Provider
* - profileImageUrlStream(): 프로필 이미지 데이터 불러오기
*
* @jwson-automation
*/
/// ProfileImageProvider.dart
///
/// Profile Image Provider
/// - 프로필 이미지 데이터를 제공하는 Provider
/// - profileImageUrlStream(): 프로필 이미지 데이터 불러오기
///
/// @jwson-automation
Stream<String> profileImageUrlStream() {
final userId = FirebaseAuth
.instance.currentUser!.uid; // 안전하게 처리를 위해 non-null assertion 사용
Expand Down
18 changes: 8 additions & 10 deletions lib/providers/user/UserInfoProvider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../../model/UserModel.dart';

/**
* UserInfoProvider.dart
*
* User Info Provider
* - 사용자 정보 데이터를 제공하는 Provider
* - fetchUserInfoStream(): 사용자 정보 데이터 불러오기
*
* @jwson-automation
*/
/// UserInfoProvider.dart
///
/// User Info Provider
/// - 사용자 정보 데이터를 제공하는 Provider
/// - fetchUserInfoStream(): 사용자 정보 데이터 불러오기
///
/// @jwson-automation

// 사용자의 인증 상태를 실시간으로 추적
final loginStateProvider = StreamProvider<User?>((ref) {
Expand Down Expand Up @@ -53,7 +51,7 @@ final userInfoNotifierProvider =

// 유저 정보 업데이트를 위한 노티파이어
class UserNotifier extends StateNotifier<UserModel> {
UserNotifier(UserModel state) : super(state);
UserNotifier(super.state);

Future<void> updateUser(
{String? name, int? age, String? profilePicture}) async {
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/SplashScreen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import '../utils/ResponsiveLayoutBuilder.dart';
/// 내용: 앱 초기화와 필수 자원 로딩을 관리하는 스플래쉬 스크린 구현

class SplashScreen extends ConsumerStatefulWidget {
const SplashScreen({Key? key}) : super(key: key);
const SplashScreen({super.key});

@override
_SplashScreenState createState() => _SplashScreenState();
Expand Down
6 changes: 3 additions & 3 deletions lib/screens/TopScreen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ class TopScreen extends ConsumerWidget {
final selectedIndex = ref.watch(selectedIndexProvider);

final List<Widget> pages = [
ChatScreen(),
MatchScreen(),
LoginScreen(),
const ChatScreen(),
const MatchScreen(),
const LoginScreen(),
];

return Scaffold(
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/chat/ChatScreen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class ChatScreen extends StatelessWidget {
body: Center(
child: Column(
children: [
Expanded(child: ChatListWidget()),
const Expanded(child: ChatListWidget()),
ChatSendWidget(),
],
),
Expand Down
6 changes: 3 additions & 3 deletions lib/screens/match/MatchScreen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,23 @@ import 'ProfileScreen.dart';


final List<DogProfileModel> dogProfiles = [
DogProfileModel(
const DogProfileModel(
name: '멍멍이',
gender: '수컷',
breed: '골든 리트리버',
location: '서울',
bio: '산책을 좋아하는 활발한 강아지예요!',
imageUrl: 'https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY8RCd%2FbtsC31gfzPL%2FbSnADONPu66xPesaWHmW00%2Fimg.jpg',
),
DogProfileModel(
const DogProfileModel(
name: '뭉치',
gender: '암컷',
breed: '푸들',
location: '부산',
bio: '애교 많고 사랑스러운 강아지입니다.',
imageUrl: 'https://image.dongascience.com/Photo/2017/07/14994185580021.jpg',
),
DogProfileModel(
const DogProfileModel(
name: '초코',
gender: '수컷',
breed: '비글',
Expand Down
8 changes: 4 additions & 4 deletions lib/screens/match/ProfileScreen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ class ProfileScreen extends StatelessWidget {
children: [
Text(
dogProfile.name,
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
SizedBox(height: 8),
const SizedBox(height: 8),
Text('성별: ${dogProfile.gender}'),
Text('종족: ${dogProfile.breed}'),
Text('사는 곳: ${dogProfile.location}'),
SizedBox(height: 16),
Text(
const SizedBox(height: 16),
const Text(
'소개',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
Expand Down
Loading
Loading