ListView(
children: snapshot.data!.docs.map((DocumentSnapshot document) {
Map<String, dynamic> data =
document.data()! as Map<String, dynamic>;
child: ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UpdateBookScreen(document.id)),
);
},
title: Text(data['title']),
subtitle: Text(data['author']),
),
);
}).toList(),
class UpdateBookScreen extends StatefulWidget {
final DocumentSnapshot document;
const UpdateBookScreen(this.document, {Key? key}) : super(key: key);
TextField(
onChanged: (_) {
setState(() {});
},
controller: _authorTextController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: '저자',
),
),
try {
// 에러가 날 것 같은 코드
} catch (e) {
// 에러가 났을 때
} finally {
// (옵션)
// 에러가 나거나, 안 나거나 무조건 마지막에 수행되는 블럭
}
bool isValid = title.isNotEmpty && author.isNotEmpty;
if (isValid) {
_db.collection('books').doc(id).set({
"title": title,
"author": author,
});
} else if (title.isEmpty && author.isEmpty) {
throw '모두 입력해 주세요';
} else if (title.isEmpty) {
throw '제목을 입력해 주세요';
} else if (author.isEmpty) {
throw '저자를 입력해 주세요';
}
final snackBar = SnackBar(content: Text(e.toString()),
e.toString() 부분이 에러가 났을 때 throw 뒷부분을 그대로 가져온다.