티스토리 뷰
목차
비쥬얼코드
flutter extension
- flutter Dart Code : 플러터 실행환경
- Awesome Flutter Snippets : 빠른생산성
- dart-import : 서드파트,디벨로퍼 패키지 구분, shift+ctrl+p
- Pubspec Assist : vs내에서 extension을 바로 확인 : shift+ctrl+p -> pubspect 를 찾아서 모듈검색
- Dart Data Class Generator : dart클래스를 쉽게 만든다(제작자 recardo emerson)
- Error Lens
- Image preview :
- Bracket Pair Colorizer 2
- Gruvbox Concoctis : theme
- vscode-icons
- Freezed
- Flutter Riverpod Snippets
- Remove Comments 코멘트를 지워준다 : shift+ctrl+p -> "Remove all comments" 입력후 엔터
- Peacock : 메뉴영역색깔 변경
- indent-rainbow : 들여쓰기 영역 색깔 구분 지원
- Flutter UI guides
Setting > search for 'preview flutter ui guides' > Dart > Preview Flutter UI Guides,Preview Flutter Ui guideds Custom Tracking 두개항목 체크
에서 체크 하고 재시작
====================================
플러터 개발시 const 일일이 붙이기 싫을때
세팅
1. ctrl+shift+P 입력 또는 메뉴의 view - Command Pallet 선택 후
입력창에 Preferences: Open User Setting(json)을 입력하여해당 메뉴를 선택하면 json 파일이 열림
setting.json 파일내
"[dart]": {
"editor.codeActionsOnSave": {
"source.fixAll": true // vscode 가 업데이트 되면서 "explicit" 값으로 바뀜
},
}
---
vs 코드에서 프로젝트 생성 command 명령
flutter create 프로젝트명
---
vs 코드에서 에뮬레이터 실행환경 ( 안드로이드 스튜디오의 AVD MANAGER에서 Create Virtual Device 로 AVD를 설치해두어야함)
VSCode command palette 실행 : ctrl+shift+p 에서 flutterse 입력하 AVD 선택하면됨
====================================
vs 코드 라인정렬
shift + alt + F
vs 코드 위젯 Wrap 메뉴 나오기
ctrl + .
================================
pubspc.yaml
flutter pub add 패키지명
flutter pub get
설정
-개발시 귀찮은 lint룰 제거
analysis_options.yaml 파일의 include: package:flutter_lints/flutter.yaml 라인 주석처리함
======================================
디버그 배너 제거
메인의 MaterialApp 속성에서 debugShowCheckedModeBanner: false,
=======================================
리스트뷰 ListView
리스트뷰에서 컨텐츠가 Column 영역 의 중간으로 가려면 shrinkWrap: true로 주면 된다.
ListView(
shrinkWrap: true,
children: []
)
=======================================
다트 getter 샘플
enum AppState{ initial, loading, success, error,} // 이넘
class Appprovider with ChangeNotifier{
AppState _state = AppState.initial;
AppState get state => _state; // 게터
notifyListeners(); // 리스너들에게 변경이되었다고 알려줌
}
//리스너 사용법 예제
context.read<클래스>().함수(); // changeNotifier를 믹스인한 클래스의 함수가 실행됨
final appState = context.watch<Appprovider>().state; // state값이 변경될때마다 appstate에 저장
==============================================================
Riverpod
패키지
- riverpod_lint : 개발자들의 실수를 줄여줌
-> development dependency에 추가, custom_lint 도 함께 설치되어야함
-> analysis_options.yaml 파일 내
analyzer:
plugins:
- custom_lint 항목 추가
Riverpod 코드 제네레이션 사용하기 위한 dependencies
dependencies:
riverpod_annotation: ^2.2.1
dev_dependencies:
build_runner : ^2.4.6
riverpod_generator: ^2.4.4
==============================================================
구글 폰트
flutter pub add google_fonts
=============================================================
uuid 생성 (랜덤id)
flutter pub add uuid
import 'package:uuid/uuid.dart';
final uuid = Uuid();
class Place {
Place({required this.title }) : id = uuid.v4(); //id 생성
final String id;
final String title;
}
=============================================================
플러터 로컬 장치에 데이터를 저장할때 사용하는 패키지
1. path_provider : 이미지를 저장해야할 경로에 쉽게 접근할수 있게해줌
- flutter pub add path_provider
2. path 1.8.3 : 파일 경로 작업 프로세스를 단순하게 해줌 ( 수동으로 잡는 경로를 이패키지는 단순히 경로를 쉽게 구성해 다양한 운영체제에서 작동하게 함)
- flutter pub add path
- 장치에 DB를 저장하는 건 여러 방식이 있는데 둘중 하나 쓰면 됨 sqflite 또는 shared_preferences
3. sqflite : sql 명령을 이용해 장치에 데이터를 저장함
4. shared_preferences : 장치에 데이터를 저장할수있도록 도와줌, sqflite 보단 단순하며 key,value 로저장함
=======================================================
플러터 포커스제거(키보드창 제거)
FocusScope.of(context).unfocus(); //입력창에서 포커스를 제거 함으로써 키보드를 비활성화시키는 효과
=======================================================
플러터 Form validation
final _form = GlobalKey<FormState>(); // form 영역변수 선언
void _submit() { //버튼에서 해당 함수 실행
final isValid = _form.currentState!.validate(); // 유효성 검사
if(isValid){ // 정상이라면
_form.currentState!.save(); //Form 영역의 onSaved 속성 실행
}
}
child: Form(
key: _form, // Form form키 매핑
child: Column(...)
)
TextFormField(
decoration: const InputDecoration(
labelText: 'Password',
),
obscureText: true,
validator: (value) {
if (value == null || value.trim().length < 6) {
return 'Password must be at least 6 characters long.';
}
return null;
},
onSaved: (value) {
_enteredPassword = value!;
},
),
=======================================================
파이어 베이스 설치
1.SDK 설치
npm install -g firebase-tools
get-executionpolicy
set-ExecutionPolicy RemoteSigned
firebase
firebase login
firebase projects:list
dart pub global activate flutterfire_cli
2.모듈설치
flutter pub add firebase_core <= 파이어베이스 코어
flutter pub add firebase_auth <= 파이어베이스 인증모듈
flutterfire configure
flutter pub add firebase_storage <= 이미지저장용 스토리지 모듈
flutter pub add firebase_messaging <= FCM 플러그인 설치
=======================================================
파이어 베이스 설치시 오류
1. 터미널 PSSecurityException 에러
->해당 에러는 powershell의 스크립트 실행 정책 오류 메시지로 powerShell의 Set-ExecutionPolicy 설정 변경이 필요
Windows PowerShell 스크립트 실행 정책 옵션 설명
Restricted : PowerShell 대화형 모드에서만 실행할 수 있고, 다른 곳에서는 스크립트 실행 불가
AllSigned : 신뢰한 사용자가 서명한 스크립트만 실행할 수 있습니다.
RemoteSigned : 스크립트를 실행하기 전에는 신뢰할 수 있는 게시자가 먼저 서명을 해야합니다.
Unrestricted : 제한 없음
해결방법
1. Windows PowerShell 관리자 모드 실행
2. get-executionpolicy 입력 (생략가능) = 현재 내 컴퓨터의 스크립트 실행 정책 확인
3. Set-ExecutionPolicy RemoteSigned 입력 후 엔터
4. Y 입력
5. get-executionpolicy 입력 (변경 확인)
6. webStorm의 현재 실행 중인 터미널 종료 후 새로운 터미널 실행
2. Failed to list Firebase projects 오류
-> firebase login --reauth 를 통해 해결
================================================================
플러터 이미지 선택 모듈
flutter pub add image_picker <== 이미지 선택 라이브러리
================================================================
파이어베이스 스토리지 이미지 저장 : user_images라는 폴더를 만들고 아래 jpg파일을 생성
FirebaseStorage.instance.ref().child('user_images').child('${userCredentials.user!.uid}.jpg');
생성한 파일명에 파일 저장
await storageRef.putFile(_selectedImage!);
저장된 파일 경로 가져오기
final imageUrl = await storageRef.getDownloadURL();
================================================================
파이어 베이스 접속한 ID 가져오기
final user = FirebaseAuth.instance.currentUser!;
================================================================
Firestore Database (파이어베이스 스토어드 데이터베이스)
1. 파이어베이스 설정
!!! 데이터베이스 console에서 생성후 native 모드로 해서 파이어베이스 화면에서 규칙(rule 변경: 인증된사용자만)
=> allow read, write: if request.auth != null;
2. 플러터 라이브러리 설치
flutter pub add cloud_firestore
3. 데이터 저장 방법
FirebaseFirestore.instance
.collection('users')
.doc(userCredentials.user!.uid)
.set({
'username': _enteredusername,
'email': _enteredEmail,
'image_url': imageUrl,
});
4. 데이터 가져와 사용하기
final user = FirebaseAuth.instance.currentUser!;
final userData = await FirebaseFirestore.instance
.collection('users')
.doc(user.uid)
.get();
print( userData.data()!['username'] );
5. 플러터에서 파이어베이서 문서 수신으로 UI 처리 ( StreamBuilder 위젯에서 FirebaseFirestore스냅샷하면 변경될때 문서수신받을수있음 )
StreamBuilder(stream: FirebaseFirestore.instance.collection('chat').snapshots(), builder: builder)
6. 빌드시 오류 해결방법
android\app\build.gradle 파일을 열어 아래 부분을 추가 한다.
defaultConfig {
applicationId "com.example.chat_app"
minSdkVersion 19 // minsdk버전 변경
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true //해당 부분 추가!!!!!!!!!!!!!
}
7. 샘플 목록 뿌리기
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection('chat')
.orderBy('createdAt', descending: false)
.snapshots(), //정렬해서 문서 수신 하기
builder: (ctx, chatSnapshots) {
if (chatSnapshots.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
}
if (!chatSnapshots.hasData || chatSnapshots.data!.docs.isEmpty) {
return const Center(
child: Text('Nomessages found.'),
);
}
if (chatSnapshots.hasError) {
return const Center(
child: Text('Something went wrong...'),
);
}
final loadedmessages = chatSnapshots.data!.docs;
return ListView.builder(
itemCount: loadedmessages.length,
itemBuilder: (ctx, index) =>
Text(loadedmessages[index].data()['text']), // 데이터 출력
);
},
);
}
================================================================
Firestore FMC (파이어베이스 스토어드 데이터베이스)
void setupPushNotification() async {
final fcm = FirebaseMessaging.instance;
await fcm.requestPermission(); // 권한확인
final token = await fcm.getToken(); // 토큰
print(token);
}
'개발' 카테고리의 다른 글
플러터 VSCODE : SHA-1 인증서 지문 찾기 (0) | 2024.09.23 |
---|---|
플러터- 안드로이드 설정 관련(sdk 버전 ,코틀린 버전 변경) (0) | 2024.09.23 |
플러터 - 이미지 모서리 둥글게 (round) (0) | 2024.09.23 |
플러터 목록 출력 샘플 (0) | 2024.09.23 |
내부 DB sqflite CRUD 샘플 (0) | 2024.09.23 |