diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
index 2230135..a2f3bbd 100644
--- a/android/app/src/debug/AndroidManifest.xml
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -5,4 +5,6 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
+
+
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 8dd3dfc..d6ffe31 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -6,7 +6,8 @@
-
+
+
+
+
diff --git a/lib/models/rdiary_model.dart b/lib/models/rdiary_model.dart
index 0bcaa34..4db3b62 100644
--- a/lib/models/rdiary_model.dart
+++ b/lib/models/rdiary_model.dart
@@ -3,7 +3,7 @@ import 'package:sumday/screens/ai_writeDiary.dart';
class Diary {
String userID;
- List context, tags, photos;
+ List context, tags, images;
DateTime date;
bool favorite;
@@ -11,7 +11,7 @@ class Diary {
required this.userID,
required this.date,
required this.tags,
- required this.photos,
+ required this.images,
required this.context,
required this.favorite,
});
@@ -21,7 +21,7 @@ class Diary {
date = json['date'].toDate(),
tags = json['tags'].cast(),
context = json["context"].cast(),
- photos = json["photos"].cast(),
+ images = json["photos"].cast(),
favorite = json['favorite'];
Map toJson() => {
@@ -29,7 +29,7 @@ class Diary {
"date": date,
"tags": tags,
"context": context,
- "photos": photos,
+ "photos": images,
"favorite": favorite,
};
diff --git a/lib/providers/diaries_provider.dart b/lib/providers/diaries_provider.dart
index 5e56116..34b3bb4 100644
--- a/lib/providers/diaries_provider.dart
+++ b/lib/providers/diaries_provider.dart
@@ -47,7 +47,7 @@ class DiariesProvider with ChangeNotifier {
// 일기 추가
// docName : 일반적으로 저장할 때는 null 주면 됨, 삭제 복구할 때는 값 줘야함
- Future addDiary(int index, Diary diary, String? docName) async {
+ Future insertDiary(int index, Diary diary, String? docName) async {
print(index);
diaries.insert(index, diary);
var docName0 = await _saveDiary(diary, docName);
@@ -58,6 +58,20 @@ class DiariesProvider with ChangeNotifier {
return docName0;
}
+ Future addDiary(Diary diary, String? docName) async {
+ if (!diaries.contains(diary)) {
+ diaries.add(diary);
+ var docName0 = await _saveDiary(diary, docName);
+
+ docNames.add(docName0);
+ _numOfDiaries++;
+ notifyListeners();
+ return docName0;
+ }
+ final idx = diaries.indexOf(diary);
+ return docNames[idx];
+ }
+
// 일기 업데이트
// docName : 일반적으로 저장할 때는 null 주면 됨, 삭제 복구할 때는 값 줘야함
Future UpdateDiary(int index, Diary diary, String? docName) async {
@@ -122,19 +136,20 @@ class DiariesProvider with ChangeNotifier {
final uuid = generateUuid();
final fileName = '$uuid.png';
- final imageRef = FirebaseStorage.instance.ref().child(fileName);
+ final imageRef = FirebaseStorage.instance.ref().child('images/$fileName');
await imageRef.putData(imageBytes);
fileNames.add(fileName);
+
+ saveImageToStorage(imgUrl, fileName);
}
return fileNames;
}
// 내부 저장소에 이미지 저장
- Future saveImageToStorage(String url) async {
+ Future saveImageToStorage(String url, String uuid) async {
var response = await http.get(Uri.parse(url));
final Uint8List bytes = response.bodyBytes;
- final uuid = generateUuid();
Directory dir = await getApplicationDocumentsDirectory();
String filePath = '${dir.path}/$uuid.png';
@@ -142,5 +157,31 @@ class DiariesProvider with ChangeNotifier {
File file = File(filePath);
await file.writeAsBytes(bytes);
print('이미지 저장 경로: $filePath');
+ print('추가 경로 : ${getApplicationDocumentsDirectory()}');
}
+
+ // 내부 저장소에서 이미지 불러오기
+ Future loadImageFromStorage(String filePath) async {
+ File file = File(filePath);
+ Uint8List bytes = await file.readAsBytes();
+ return bytes;
+ }
+
+ Future getImageUrl(String imageName) async {
+ FirebaseStorage storage = FirebaseStorage.instance;
+
+ // Here we assume that the images are stored in a directory named 'images'.
+ // You should replace this with the actual path to your images.
+ return storage.ref().child('images/$imageName').getDownloadURL();
+ print('images/$imageName');
+
+ // try {
+ // String url = await ref.getDownloadURL();
+ // print(url);
+ // return url;
+ // } catch (e) {
+ // print(e);
+ // return 'null';
+ // }
}
+}
\ No newline at end of file
diff --git a/lib/providers/generate_provider.dart b/lib/providers/generate_provider.dart
index 2e644ff..a0fe6a0 100644
--- a/lib/providers/generate_provider.dart
+++ b/lib/providers/generate_provider.dart
@@ -32,6 +32,11 @@ class GenerateProvider with ChangeNotifier {
int get PageValue => _pageValue;
double get sliderValue => _sliderValue;
+ List? get getAllImageUrl => _imageUrl;
+ List? get getAllKoSummary => _koSummary;
+
+ bool get isAllGen =>
+ _isTextGen!.every((e) => e) && _isImageGen!.every((e) => e);
List? get isTextGen => _isTextGen;
List? get isPhotoGen => _isImageGen;
@@ -89,7 +94,7 @@ class GenerateProvider with ChangeNotifier {
}
String getPrompt(UserForm data) {
- return '${data.userState} ${data.activity} ${data.relation} ${data.location} ${data.category}';
+ return '${data.userState} ${data.activity} ${data.relation} ${data.location}';
}
String getKoSummary(int index) {
@@ -125,7 +130,7 @@ class GenerateProvider with ChangeNotifier {
var data = _dataList![index];
var prompt = getPrompt(data);
- print(prompt);
+ print('$prompt');
final response = await http.post(
Uri.parse(apiUrl),
@@ -168,7 +173,7 @@ class GenerateProvider with ChangeNotifier {
if (!_isImageGen![index]) {
final openai = OpenaiDalleWrapper(apiKey: apiKey);
String url = await openai
- .generateImage("${_enSummary![index]}, a painting of illustration");
+ .generateImage(_enSummary![index] + ", a painting of illustration");
print(url);
_setImgUrl(index, url);
_setImageGen(index);
@@ -199,4 +204,4 @@ class GenerateProvider with ChangeNotifier {
//print(newresponse['choices'][0]['text'].trim());
return newresponse['choices'][0]['text'].trim();
}
-}
+}
\ No newline at end of file
diff --git a/lib/screens/Bookmarks.dart b/lib/screens/Bookmarks.dart
index 4141c2c..3a85d3b 100644
--- a/lib/screens/Bookmarks.dart
+++ b/lib/screens/Bookmarks.dart
@@ -41,7 +41,7 @@ class _BookmarksState extends State {
action: SnackBarAction(
label: '취소',
onPressed: () {
- diariesProvider.addDiary(index, diary, docName);
+ diariesProvider.insertDiary(index, diary, docName);
},
),
),
diff --git a/lib/screens/ai_writeDiary.dart b/lib/screens/ai_writeDiary.dart
index a772c72..e575e23 100644
--- a/lib/screens/ai_writeDiary.dart
+++ b/lib/screens/ai_writeDiary.dart
@@ -43,6 +43,8 @@ class _Ai_WriteDiaryState extends State {
final sortedLocationList =
locationList.reversed.toList().sublist(0, min(3, locationList.length));
List dataList = widget.dataList;
+ print('aaaa $sortedLocationList');
+ print(widget.pageIndex);
return Center(
child: ListView(
children: [
diff --git a/lib/screens/diaries.dart b/lib/screens/diaries.dart
index a3d4510..923f6b8 100644
--- a/lib/screens/diaries.dart
+++ b/lib/screens/diaries.dart
@@ -41,7 +41,7 @@ class _DiariesState extends State {
action: SnackBarAction(
label: '취소',
onPressed: () {
- diariesProvider.addDiary(index, diary, docName);
+ diariesProvider.insertDiary(index, diary, docName);
},
),
),
diff --git a/lib/screens/exchange_diary.dart b/lib/screens/exchange_diary.dart
index 8ec67ba..a84c75b 100644
--- a/lib/screens/exchange_diary.dart
+++ b/lib/screens/exchange_diary.dart
@@ -243,7 +243,7 @@ class _ExchangeDiaryState extends State {
.context[
current],
photos: todayDiaries
- .photos[
+ .images[
current],
tags: todayDiaries
.getCurrTags(
diff --git a/lib/screens/exchange_diary_detail.dart b/lib/screens/exchange_diary_detail.dart
index cec8dd0..ad79bc2 100644
--- a/lib/screens/exchange_diary_detail.dart
+++ b/lib/screens/exchange_diary_detail.dart
@@ -2,6 +2,7 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sumday/models/comment_model.dart';
+import 'package:sumday/providers/diaries_provider.dart';
import 'package:sumday/providers/exchange_diary_list_provider.dart';
import 'package:sumday/providers/loginProvider.dart';
import 'package:sumday/utils/variables.dart';
@@ -12,13 +13,14 @@ class ExchangeDiaryDetail extends StatefulWidget {
final int idx;
final String diaryId;
final String content;
- final List comments;
+ List comments;
final List tags;
final String location;
final DateTime date;
final String writer;
final String photo;
- const ExchangeDiaryDetail({
+
+ ExchangeDiaryDetail({
super.key,
required this.idx,
required this.diaryId,
@@ -112,13 +114,28 @@ class _ExchangeDiaryDetailState extends State {
ClipRRect(
borderRadius:
const BorderRadius.all(Radius.circular(10)),
- child: Image.asset(
- "assets/${widget.photo}",
- width: double.maxFinite,
+ child: FutureBuilder(
+ future:
+ Provider.of(context, listen: false)
+ .getImageUrl(widget.photo),
+ builder: (BuildContext context,
+ AsyncSnapshot snapshot) {
+ if (snapshot.connectionState ==
+ ConnectionState.waiting) {
+ return SizedBox(
+ height: 10,
+ width: 10,
+ child: CircularProgressIndicator());
+ } else if (snapshot.hasError) {
+ return Text('Error: ${snapshot.error}');
+ } else {
+ return Image.network(snapshot.data!,width: double.maxFinite,
height: 185,
fit: BoxFit.fitWidth,
- alignment: Alignment.center,
- ),
+ alignment: Alignment.center,);
+ }
+ },
+ )
),
const SizedBox(
height: 20,
diff --git a/lib/screens/exchange_diary_edit.dart b/lib/screens/exchange_diary_edit.dart
index c25aa6d..324ea0c 100644
--- a/lib/screens/exchange_diary_edit.dart
+++ b/lib/screens/exchange_diary_edit.dart
@@ -2,6 +2,7 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sumday/models/exchange_diary_model.dart';
+import 'package:sumday/providers/diaries_provider.dart';
import 'package:sumday/providers/exchange_diary_list_provider.dart';
import 'package:sumday/screens/exchange_diary_detail.dart';
import 'package:sumday/utils/variables.dart';
@@ -125,13 +126,29 @@ class _ExchangeDiaryEditPageState extends State {
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.0),
- child: Image.asset(
- "assets/${widget.diary.photos}",
- width: 185,
+ child: FutureBuilder(
+ future:
+ Provider.of(context, listen: false)
+ .getImageUrl(widget.diary.photos),
+ builder: (BuildContext context,
+ AsyncSnapshot snapshot) {
+ if (snapshot.connectionState ==
+ ConnectionState.waiting) {
+ return SizedBox(
+ height: 10,
+ width: 10,
+ child: CircularProgressIndicator());
+ } else if (snapshot.hasError) {
+ return Text('Error: ${snapshot.error}');
+ } else {
+ return Image.network(snapshot.data!,
+ width: 185,
height: 185,
fit: BoxFit.fill,
- alignment: Alignment.center,
- ),
+ alignment: Alignment.center,);
+ }
+ },
+ ),
),
const SizedBox(
height: 30,
diff --git a/lib/screens/generate_diary.dart b/lib/screens/generate_diary.dart
index 91c4fdf..aa38a64 100644
--- a/lib/screens/generate_diary.dart
+++ b/lib/screens/generate_diary.dart
@@ -49,7 +49,7 @@ class _GenerateDiaryState extends State {
@override
Widget build(BuildContext context) {
var _pages = List.generate(
- widget.dataList.length, (index) => DiaryContents(index: index));
+ widget.dataList.length, (index) => DiaryContents(dataList:widget.dataList, index: index));
print(_pages);
@@ -140,8 +140,9 @@ class _GenerateDiaryState extends State {
class DiaryContents extends StatefulWidget {
final int index;
+ final List dataList;
- const DiaryContents({super.key, required this.index});
+ const DiaryContents({super.key, required this.dataList, required this.index});
@override
State createState() => _DiaryContentsState();
@@ -200,9 +201,25 @@ class _DiaryContentsState extends State {
backgroundColor: Color(0xfff4c758),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(22))),
- onPressed: () {
- if (diariesProvider.diaries.length !=
- generateProvider.getDiaryIndex) {}
+ onPressed: () async {
+ if (generateProvider.isAllGen) {
+ print('start saving!');
+ var fileNames =
+ await diariesProvider.saveImageToFirebase(
+ generateProvider.getAllImageUrl!);
+ print('filename : ${fileNames[0]}');
+ var diary = Diary(
+ userID: diariesProvider.userID,
+ date: DateTime.now(),
+ tags:
+ Diary.listConverter(widget.dataList),
+ images: fileNames,
+ context:
+ generateProvider.getAllKoSummary!,
+ favorite: false);
+ print('diary filename : ${diary.images[0]}');
+ diariesProvider.addDiary(diary, null);
+ }
},
child: Text(
'저장',
diff --git a/lib/widgets/comment_widget.dart b/lib/widgets/comment_widget.dart
index b183dda..1527ee5 100644
--- a/lib/widgets/comment_widget.dart
+++ b/lib/widgets/comment_widget.dart
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
+import 'package:sumday/providers/diaries_provider.dart';
import 'package:sumday/utils/variables.dart';
+import 'package:provider/provider.dart';
class CommentWidget extends StatelessWidget {
final String photo;
@@ -36,12 +38,28 @@ class CommentWidget extends StatelessWidget {
children: [
ClipRRect(
borderRadius: BorderRadius.circular(20),
- child: Image.asset(
- "assets/$photo",
- width: 20,
- height: 20,
- fit: BoxFit.fitWidth,
- alignment: Alignment.center,
+ child: FutureBuilder(
+ future: Provider.of(context, listen: false)
+ .getImageUrl(photo),
+ builder:
+ (BuildContext context, AsyncSnapshot snapshot) {
+ if (snapshot.connectionState == ConnectionState.waiting) {
+ return SizedBox(
+ height: 10,
+ width: 10,
+ child: CircularProgressIndicator());
+ } else if (snapshot.hasError) {
+ return Text('Error: ${snapshot.error}');
+ } else {
+ return Image.network(
+ snapshot.data!,
+ width: 20,
+ height: 20,
+ fit: BoxFit.fitWidth,
+ alignment: Alignment.center,
+ );
+ }
+ },
),
),
const SizedBox(
diff --git a/lib/widgets/diary_card.dart b/lib/widgets/diary_card.dart
index 1e2ce6b..326d3bc 100644
--- a/lib/widgets/diary_card.dart
+++ b/lib/widgets/diary_card.dart
@@ -1,6 +1,11 @@
+// import 'dart:html';
+import 'dart:io';
+
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
+import 'package:provider/provider.dart';
import 'package:sumday/models/rdiary_model.dart';
+import 'package:sumday/providers/diaries_provider.dart';
class DiaryCard extends StatefulWidget {
final Diary diary;
@@ -17,6 +22,15 @@ class DiaryCard extends StatefulWidget {
}
class _DiaryCardState extends State {
+ String? imageUrl;
+ @override
+ void initState() {
+ super.initState();
+ Provider.of(context, listen: false)
+ .getImageUrl(widget.diary.images[0])
+ .then((url) => imageUrl = url);
+ }
+
@override
Widget build(BuildContext context) {
String formattedDate(DateTime time) =>
@@ -27,7 +41,9 @@ class _DiaryCardState extends State {
}
final ThemeData theme = Theme.of(context);
-
+ Provider.of(context, listen: false)
+ .getImageUrl(widget.diary.images[0])
+ .then((url) => imageUrl = url);
return Container(
height: 125,
padding: const EdgeInsets.symmetric(vertical: 1, horizontal: 1),
@@ -44,17 +60,33 @@ class _DiaryCardState extends State {
child: Padding(
padding: const EdgeInsets.fromLTRB(4.5, 4.5, 4.5, 4.5),
child: Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(8.0),
- // border: Border.all(
- // color: Colors.black,
- // width: 1.0,
- // ),
- ),
- child: Image.asset(
- 'assets/${widget.diary.photos[0]}',
- ),
- ),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(8.0),
+ // border: Border.all(
+ // color: Colors.black,
+ // width: 1.0,
+ // ),
+ ),
+ child: FutureBuilder(
+ future:
+ Provider.of(context, listen: false)
+ .getImageUrl(widget.diary.images[0]),
+ builder: (BuildContext context,
+ AsyncSnapshot snapshot) {
+ if (snapshot.connectionState ==
+ ConnectionState.waiting) {
+ return SizedBox(
+ height: 10,
+ width: 10,
+ child: CircularProgressIndicator());
+ } else if (snapshot.hasError) {
+ return Text('Error: ${snapshot.error}');
+ } else {
+ return Image.network(snapshot.data!);
+ }
+ },
+ ),
+ ),
),
),
Expanded(
diff --git a/lib/widgets/diary_modal_card.dart b/lib/widgets/diary_modal_card.dart
index f295f18..9ba6253 100644
--- a/lib/widgets/diary_modal_card.dart
+++ b/lib/widgets/diary_modal_card.dart
@@ -1,4 +1,6 @@
import 'package:flutter/material.dart';
+import 'package:sumday/providers/diaries_provider.dart';
+import 'package:provider/provider.dart';
class DiaryModalCard extends StatelessWidget {
final List tags;
@@ -18,13 +20,33 @@ class DiaryModalCard extends StatelessWidget {
children: [
ClipRRect(
borderRadius: BorderRadius.circular(10),
- child: Image.asset(
- "assets/$photo",
- width: 320,
+ child: FutureBuilder(
+ future:
+ Provider.of(context, listen: false)
+ .getImageUrl(photo),
+ builder: (BuildContext context,
+ AsyncSnapshot snapshot) {
+ if (snapshot.connectionState ==
+ ConnectionState.waiting) {
+ return SizedBox(
+ height: 10,
+ width: 10,
+ child: CircularProgressIndicator());
+ } else if (snapshot.hasError) {
+ return Text('Error: ${snapshot.error}');
+ } else {
+ return Image.network(snapshot.data!, width: 320,
height: 180,
fit: BoxFit.fitWidth,
- alignment: Alignment.center,
- ),
+ alignment: Alignment.center,);
+ }
+ },
+ ),
+
+
+
+
+
),
const SizedBox(
height: 20,
diff --git a/lib/widgets/exchange_diary_card.dart b/lib/widgets/exchange_diary_card.dart
index 8f9b9f8..c37b373 100644
--- a/lib/widgets/exchange_diary_card.dart
+++ b/lib/widgets/exchange_diary_card.dart
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
+import 'package:sumday/providers/diaries_provider.dart';
import 'package:sumday/screens/exchange_diary_detail.dart';
import 'package:sumday/utils/variables.dart';
+import 'package:provider/provider.dart';
class ExchangeDiaryCard extends StatelessWidget {
final int idx;
@@ -56,13 +58,30 @@ class ExchangeDiaryCard extends StatelessWidget {
children: [
ClipRRect(
borderRadius: BorderRadius.circular(10),
- child: Image.asset(
- "assets/$photo",
- width: double.maxFinite,
+ child: FutureBuilder(
+ future:
+ Provider.of(context, listen: false)
+ .getImageUrl(photo),
+ builder: (BuildContext context,
+ AsyncSnapshot snapshot) {
+ if (snapshot.connectionState ==
+ ConnectionState.waiting) {
+ return SizedBox(
+ height: 10,
+ width: 10,
+ child: CircularProgressIndicator());
+ } else if (snapshot.hasError) {
+ return Text('Error: ${snapshot.error}');
+ } else {
+ return Image.network(snapshot.data!,
+ width: double.maxFinite,
height: 185,
fit: BoxFit.fitWidth,
- alignment: Alignment.center,
- ),
+ alignment: Alignment.center,);
+ }
+ },
+ ),
+
),
const SizedBox(
height: 10,
diff --git a/lib/widgets/exchange_diary_modal.dart b/lib/widgets/exchange_diary_modal.dart
index aea3802..0a211a0 100644
--- a/lib/widgets/exchange_diary_modal.dart
+++ b/lib/widgets/exchange_diary_modal.dart
@@ -25,7 +25,7 @@ class _ExchangeDiaryModalState extends State {
(index) => DiaryModalCard(
tags: widget.diaries.getCurrTags(index).sublist(0, 3),
location: widget.diaries.getCurrTags(index)[3],
- photo: widget.diaries.photos[index],
+ photo: widget.diaries.images[index],
));
return Padding(
padding: const EdgeInsets.only(top: 20),