Merge pull request 'feature/search-by-image' (#6) from feature/search-by-image into main

Reviewed-on: #6
This commit is contained in:
v4l3n71n 2024-07-27 18:30:25 +02:00
commit 6f185d99ce
2 changed files with 83 additions and 12 deletions

View File

@ -1,21 +1,59 @@
import 'package:flutter/material.dart';
import 'events.dart';
import '../variable/globals.dart' as globals;
import 'package:http/http.dart' as http;
import 'dart:io';
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
mixin ShowDescImageAdd<T extends StatefulWidget> on State<T> {
void showDescImageAddDialog(BuildContext context, String text) {
Future<void> addEvents(var events) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var accessToken = prefs.getString("access_token") ?? "";
List<String> send = ["toto"];
if (accessToken.isNotEmpty) {
var urlPut = Uri.parse("${globals.api}/events");
print("start date : ${events["start_date"]}");
var responsePut = await http.put(urlPut,
headers: {
HttpHeaders.cookieHeader: 'access_token=${accessToken}',
HttpHeaders.acceptHeader: 'application/json, text/plain, */*',
HttpHeaders.contentTypeHeader: 'application/json'
},
body: jsonEncode({
'name': events["name"],
'place': events["place"],
'start_date': events['date'],
'end_date': events['date'],
'organizers': send,
'latitude': '0.0',
'longitude': '0.0',
}));
print("http put code status : ${responsePut.statusCode}");
print("http put body : ${responsePut.body}");
}
}
void showDescImageAddDialog(BuildContext context, var events) {
// Create AlertDialog
String name = events['name'];
AlertDialog dialog = AlertDialog(
title: Text("Description image"),
content: Text(text),
title: Text("Ajouter un evenement"),
content: Text("${name} n'a pas été trouvé. Voulez-vous l'ajouter ? "),
actions: [
ElevatedButton(
child: Text("OK"),
style: ElevatedButton.styleFrom(
padding: EdgeInsets.symmetric(horizontal: 50, vertical: 20),
textStyle:
TextStyle(fontSize: 15, fontWeight: FontWeight.normal)),
TextButton(
child: Text("Annuler"),
onPressed: () {
Navigator.of(context).pop("Yes, Of course!"); // Return value
}),
TextButton(
child: Text("Oui"),
onPressed: () {
addEvents(events); // Return value
}),
],
);

View File

@ -4,6 +4,12 @@ import '../classes/descriptionImage.dart';
import '../classes/alert.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_gemini/flutter_gemini.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import '../variable/globals.dart' as globals;
void main() {
runApp(MyApp());
@ -60,6 +66,34 @@ class DisplayPictureScreenState extends State<DisplayPictureScreen>
"L'IA de Google n'a pas su analyser l'image. Recommecer avec une autre");
}
Future<void> searchEvents(String json) async {
print(json);
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, dynamic> jsonData = jsonDecode(json);
var name = jsonData["name"];
var place = jsonData["place"];
var accessToken = prefs.getString("access_token") ?? "";
if (accessToken.isNotEmpty) {
var urlGet = Uri.parse("${globals.api}/events?name=${name}");
var responseGet = await http.get(urlGet,
headers: {HttpHeaders.cookieHeader: 'access_token=${accessToken}'});
if (responseGet.statusCode == 200) {
var events = jsonDecode(utf8.decode(responseGet.bodyBytes));
print("reponse http : ${events.length}");
if (events.length == 0) {
showDescImageAddDialog(context, jsonData);
}
}
} else {
showErrorDialog(context, "Erreur de token");
}
//showDescImageAddDialog(context, message);
}
Future<void> _getEventInfosFromImage() async {
await dotenv.load();
@ -71,11 +105,10 @@ class DisplayPictureScreenState extends State<DisplayPictureScreen>
gemini
.textAndImage(
text:
"Peux-tu donner le nom, la date et le lieu de l'évènement sous format JSON avec les valeurs suivantes : name, place et date",
"Peux-tu donner le nom, la date et le lieu de l'évènement sous format JSON avec les valeurs suivantes : name, place et date avec le format suivant YYYY-MM-ddTTHH:mm, et sans la présence de json dans la chaîne de caractère",
images: [file.readAsBytesSync()],
modelName: "models/gemini-1.5-flash-latest")
.then((value) => showDescImageAddDialog(
context, value?.content?.parts?.last.text ?? ''))
.then((value) => searchEvents(value?.content?.parts?.last.text ?? ''))
.catchError((e) => displayError);
}