Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat : img_network #55

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions android/app/src/debug/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
</manifest>
3 changes: 2 additions & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<application
tools:replace="android:label"
Expand Down
2 changes: 2 additions & 0 deletions android/app/src/profile/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,7 @@
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
8 changes: 4 additions & 4 deletions lib/models/rdiary_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ import 'package:sumday/screens/ai_writeDiary.dart';

class Diary {
String userID;
List<String> context, tags, photos;
List<String> context, tags, images;
DateTime date;
bool favorite;

Diary({
required this.userID,
required this.date,
required this.tags,
required this.photos,
required this.images,
required this.context,
required this.favorite,
});
Expand All @@ -21,15 +21,15 @@ class Diary {
date = json['date'].toDate(),
tags = json['tags'].cast<String>(),
context = json["context"].cast<String>(),
photos = json["photos"].cast<String>(),
images = json["photos"].cast<String>(),
favorite = json['favorite'];

Map<String, dynamic> toJson() => {
"userID": userID,
"date": date,
"tags": tags,
"context": context,
"photos": photos,
"photos": images,
"favorite": favorite,
};

Expand Down
49 changes: 45 additions & 4 deletions lib/providers/diaries_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class DiariesProvider with ChangeNotifier {

// 일기 추가
// docName : 일반적으로 저장할 때는 null 주면 됨, 삭제 복구할 때는 값 줘야함
Future<String> addDiary(int index, Diary diary, String? docName) async {
Future<String> insertDiary(int index, Diary diary, String? docName) async {
print(index);
diaries.insert(index, diary);
var docName0 = await _saveDiary(diary, docName);
Expand All @@ -58,6 +58,20 @@ class DiariesProvider with ChangeNotifier {
return docName0;
}

Future<String> 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<String> UpdateDiary(int index, Diary diary, String? docName) async {
Expand Down Expand Up @@ -122,25 +136,52 @@ 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<void> saveImageToStorage(String url) async {
Future<void> 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';

File file = File(filePath);
await file.writeAsBytes(bytes);
print('이미지 저장 경로: $filePath');
print('추가 경로 : ${getApplicationDocumentsDirectory()}');
}

// 내부 저장소에서 이미지 불러오기
Future<Uint8List> loadImageFromStorage(String filePath) async {
File file = File(filePath);
Uint8List bytes = await file.readAsBytes();
return bytes;
}

Future<String> 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';
// }
}
}
13 changes: 9 additions & 4 deletions lib/providers/generate_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ class GenerateProvider with ChangeNotifier {

int get PageValue => _pageValue;
double get sliderValue => _sliderValue;
List<String>? get getAllImageUrl => _imageUrl;
List<String>? get getAllKoSummary => _koSummary;

bool get isAllGen =>
_isTextGen!.every((e) => e) && _isImageGen!.every((e) => e);

List<bool>? get isTextGen => _isTextGen;
List<bool>? get isPhotoGen => _isImageGen;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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),
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -199,4 +204,4 @@ class GenerateProvider with ChangeNotifier {
//print(newresponse['choices'][0]['text'].trim());
return newresponse['choices'][0]['text'].trim();
}
}
}
2 changes: 1 addition & 1 deletion lib/screens/Bookmarks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class _BookmarksState extends State<Bookmarks> {
action: SnackBarAction(
label: '취소',
onPressed: () {
diariesProvider.addDiary(index, diary, docName);
diariesProvider.insertDiary(index, diary, docName);
},
),
),
Expand Down
2 changes: 2 additions & 0 deletions lib/screens/ai_writeDiary.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ class _Ai_WriteDiaryState extends State<Ai_WriteDiary> {
final sortedLocationList =
locationList.reversed.toList().sublist(0, min(3, locationList.length));
List<UserForm> dataList = widget.dataList;
print('aaaa $sortedLocationList');
print(widget.pageIndex);
return Center(
child: ListView(
children: [
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/diaries.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class _DiariesState extends State<Diaries> {
action: SnackBarAction(
label: '취소',
onPressed: () {
diariesProvider.addDiary(index, diary, docName);
diariesProvider.insertDiary(index, diary, docName);
},
),
),
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/exchange_diary.dart
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ class _ExchangeDiaryState extends State<ExchangeDiary> {
.context[
current],
photos: todayDiaries
.photos[
.images[
current],
tags: todayDiaries
.getCurrTags(
Expand Down
31 changes: 24 additions & 7 deletions lib/screens/exchange_diary_detail.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -12,13 +13,14 @@ class ExchangeDiaryDetail extends StatefulWidget {
final int idx;
final String diaryId;
final String content;
final List<dynamic> comments;
List<dynamic> comments;
final List<dynamic> tags;
final String location;
final DateTime date;
final String writer;
final String photo;
const ExchangeDiaryDetail({

ExchangeDiaryDetail({
super.key,
required this.idx,
required this.diaryId,
Expand Down Expand Up @@ -112,13 +114,28 @@ class _ExchangeDiaryDetailState extends State<ExchangeDiaryDetail> {
ClipRRect(
borderRadius:
const BorderRadius.all(Radius.circular(10)),
child: Image.asset(
"assets/${widget.photo}",
width: double.maxFinite,
child: FutureBuilder<String>(
future:
Provider.of<DiariesProvider>(context, listen: false)
.getImageUrl(widget.photo),
builder: (BuildContext context,
AsyncSnapshot<String> 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,
Expand Down
27 changes: 22 additions & 5 deletions lib/screens/exchange_diary_edit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -125,13 +126,29 @@ class _ExchangeDiaryEditPageState extends State<ExchangeDiaryEditPage> {
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Image.asset(
"assets/${widget.diary.photos}",
width: 185,
child: FutureBuilder<String>(
future:
Provider.of<DiariesProvider>(context, listen: false)
.getImageUrl(widget.diary.photos),
builder: (BuildContext context,
AsyncSnapshot<String> 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,
Expand Down
27 changes: 22 additions & 5 deletions lib/screens/generate_diary.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class _GenerateDiaryState extends State<GenerateDiary> {
@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);

Expand Down Expand Up @@ -140,8 +140,9 @@ class _GenerateDiaryState extends State<GenerateDiary> {

class DiaryContents extends StatefulWidget {
final int index;
final List<UserForm> dataList;

const DiaryContents({super.key, required this.index});
const DiaryContents({super.key, required this.dataList, required this.index});

@override
State<DiaryContents> createState() => _DiaryContentsState();
Expand Down Expand Up @@ -200,9 +201,25 @@ class _DiaryContentsState extends State<DiaryContents> {
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(
'저장',
Expand Down
Loading