반응형
// 이곳에 쓴 내용은 앱 만들기라는 버킷리스트를 달성하기 위해 플러터를 공부하면서 정리하고 있는 내용입니다.
플러터에 대해 아는 것이 거의 없기 때문에 정리하면서 오류가 있을 수 있습니다.
오류를 발견하신 분은 댓글 남겨 주시면 감사하겠습니다.
지난번 오류는 역시나 해결을 하지 못한 상태이다. 기회가 된다면 다시 한번 처음부터 도전을 해 봐야지.
그런데 아마도 그럴 가능성은 없어 보인다.
책을 보고 타이핑 모드~
home_screen.dart 파일을 아래와 같이 수정한다. provider 어쩌고의 흔적을 없애고, firebase 틀에 맞춰 수정해 주는 작업이란다. import 한 provider를 없애고 싶다. 사용 안 하고 있는 회색 빛깔 녀석들도 지우고 싶지만 소심한 나는 건드리지 않을 거다. 책에서 시키지 않았으므로.. 깃허브 예제에도 그대로 살아 있음으로..
import 'package:flutter/material.dart';
import 'package:calendar_scheduler/component/main_calendar.dart';
import 'package:calendar_scheduler/component/schedule_card.dart';
import 'package:calendar_scheduler/component/today_banner.dart';
import 'package:calendar_scheduler/component/schedule_bottom_sheet.dart';
import 'package:calendar_scheduler/const/colors.dart';
import 'package:get_it/get_it.dart';
import 'package:calendar_scheduler/database/drift_database.dart';
import 'package:provider/provider.dart';
import 'package:calendar_scheduler/provider/schedule_provider.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:calendar_scheduler/model/schedule_model.dart';
class HomeScreen extends StatefulWidget {
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
DateTime selectedDate = DateTime.utc(
DateTime.now().year,
DateTime.now().month,
DateTime.now().day,
);
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
backgroundColor: PRIMARY_COLOR,
onPressed: () {
showModalBottomSheet(
context: context,
isDismissible: true,
builder: (_) => ScheduleBottomSheet(
selectedDate: selectedDate,
),
isScrollControlled: true,
);
},
child: Icon(
Icons.add,
),
),
body: SafeArea(
child: Column(
children: [
MainCalendar(
selectedDate: selectedDate,
onDaySelected: (selectedDate, focusedDate) =>
onDaySelected(selectedDate, focusedDate, context),
),
SizedBox(height: 8.0),
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection(
'schedule',
)
.where(
'date',
isEqualTo:
'${selectedDate.year}${selectedDate.month}${selectedDate.day}',
)
.snapshots(),
builder: (context, snapshot) {
return TodayBanner(
selectedDate: selectedDate,
count: snapshot.data?.docs.length ?? 0,
);
},
),
SizedBox(height: 8.0),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection(
'schedule',
)
.where(
'date',
isEqualTo:
'${selectedDate.year}${selectedDate.month}${selectedDate.day}',
)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(
child: Text('일정 정보를 가져오지 못했습니다.'),
);
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Container();
}
final schedules = snapshot.data!.docs
.map(
(QueryDocumentSnapshot e) => ScheduleModel.fromJson(
json: (e.data() as Map<String, dynamic>)),
)
.toList();
return ListView.builder(
itemCount: schedules.length,
itemBuilder: (context, index) {
final schedule = schedules[index];
return Dismissible(
key: ObjectKey(schedule.id),
direction: DismissDirection.startToEnd,
onDismissed: (DismissDirection direction) {
FirebaseFirestore.instance
.collection('schedule')
.doc(schedule.id)
.delete();
},
child: Padding(
padding: const EdgeInsets.only(
bottom: 8.0, left: 8.0, right: 8.0),
child: ScheduleCard(
startTime: schedule.startTime,
endTime: schedule.endTime,
content: schedule.content,
),
),
);
},
);
},
),
),
],
),
),
);
}
void onDaySelected(
DateTime selectedDate,
DateTime focusedDate,
BuildContext context,
) {
setState(() {
this.selectedDate = selectedDate;
});
}
}
main.dart를 조정하고,
이렇게 제대로 작동하지 않은 19강을 서둘러 마무리 한다. 우리 다시 보진 말자~ 왜 파이어베이스와 애드몹 파트가 되면 이렇게 작동을 안 하는 건지..--;;
쨌든!! 오고완~!!
반응형
'버킷리스트 > 앱 만들기' 카테고리의 다른 글
Android License status unknown, Unable to find bundled Java version 오류 해결 방법 (3) | 2024.10.03 |
---|---|
안드로이드 스튜디오 깨끗하게 삭제하기 및 재설치하기(초기 세팅 및 flutter doctor 오류 해결하기) (3) | 2024.09.18 |
오공완(with 코드팩토리의 플러터 프로그래밍) #19-3 (파이어베이스 연동) (0) | 2024.09.09 |
오공완(with 코드팩토리의 플러터 프로그래밍) #19-2 (파이어베이스 연동) (1) | 2024.09.08 |
오공완(with 코드팩토리의 플러터 프로그래밍) #19 (파이어베이스 연동) (1) | 2024.09.04 |