CS/Flutter | Dart

캘린더 일정관리 앱 #6

damzzi 2023. 8. 22. 21:04
schedule_btm_sheet.dart

이전에 텍스트필드를 텍스트폼필드로 바꿔 구현해주었다
-> Form 위젯 사용으로 통합관리에 유용하도록!
 
Form 위젯은 key 매개변수에 GlobalKey 값을 넣어주면 된다
Form 조작시에는 같은 key를 사용해 Form 내부의 TextFormField를 일괄 조작한다
 
 
 

custom_textField.dart

텍스트필드 위젯
null 리턴되면 에러가 없다는 것이고
만약 에러가 있으면 에러를 String 값으로 반환해준다
 
입력된 값이 없으면 값을 넣어달라는 문자가 반환된다
입력된 시간 값이 0보다 작으면 0보다 큰 숫자를 넣어달라는 문자가 반환된다
입력된 시간 값이 24보다 크면 24보다 작은 값을 넣어달라는 문자가 반환된다
 
 
 


각 텍스트필드에 값을 제대로 입력하고 save 버튼을 누르면 위처럼 잘 동작한다
 
 
 

main.dart

https://pub.dev/packages/get_it

get_it | Dart Package

Simple direct Service Locator that allows to decouple the interface from a concrete implementation and to access the concrete implementation from everywhere in your App"

pub.dev

get_it 패키지 import해 GetIt class 사용한다
GetIt class 사용해 어디에서든 database를 가져올 수 있다
 
 
 

schedule_btm_sheet.dart

데이터베이스 연동해 가져온 색상 보여주기
 
 
 

schedule_btm_sheet.dart
schedule_btm_sheet.dart
schedule_btm_sheet.dart

각 색깔 누르면 선택된 색에 테두리 표시하기

// 데이터가 있고 한번도 값이 세팅된 적이 없고
// 최소한 하나의 값이 snapshot.data에 들어있다면
if (snapshot.hasData &&
    selectedColorId == null &&
    snapshot.data!.isNotEmpty) {
  selectedColorId = snapshot.data![0].id; //첫번째 색이 디폴트

 
 
 

schedule_btm_sheet.dart

에러 없으면 스케줄 생성,
일정 작성 후 bottom sheet 닫기
 
Tip!

import 'package:drift/drift.dart' show Value;

만약 불러오는 패키지끼리 동일한 클래스 이름이 있어 겹친다면
위 예시처럼 drift.dart 패키지에서는 Value만 가져온다
이런 식으로 사용하면 된다
 
 
 

drift_database.dart

get() 하면 List로 Future를 받을 수 있고(단발적: 요청시 한 번 받는 것)
watch() 하면 Stream으로 값들이 업데이트 됐을 때 지속적으로 업데이트된 값 받을 수 있음
 
 
 

home_screen.dart


저장한 값을 잘 출력해준다