Merge pull request 'feature/search-by-image' (#6) from feature/search-by-image into main
Reviewed-on: #6
This commit is contained in:
commit
6f185d99ce
@ -1,21 +1,59 @@
|
|||||||
import 'package:flutter/material.dart';
|
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> {
|
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
|
// Create AlertDialog
|
||||||
|
String name = events['name'];
|
||||||
AlertDialog dialog = AlertDialog(
|
AlertDialog dialog = AlertDialog(
|
||||||
title: Text("Description image"),
|
title: Text("Ajouter un evenement"),
|
||||||
content: Text(text),
|
content: Text("${name} n'a pas été trouvé. Voulez-vous l'ajouter ? "),
|
||||||
actions: [
|
actions: [
|
||||||
ElevatedButton(
|
TextButton(
|
||||||
child: Text("OK"),
|
child: Text("Annuler"),
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
padding: EdgeInsets.symmetric(horizontal: 50, vertical: 20),
|
|
||||||
textStyle:
|
|
||||||
TextStyle(fontSize: 15, fontWeight: FontWeight.normal)),
|
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop("Yes, Of course!"); // Return value
|
Navigator.of(context).pop("Yes, Of course!"); // Return value
|
||||||
}),
|
}),
|
||||||
|
TextButton(
|
||||||
|
child: Text("Oui"),
|
||||||
|
onPressed: () {
|
||||||
|
addEvents(events); // Return value
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -4,6 +4,12 @@ import '../classes/descriptionImage.dart';
|
|||||||
import '../classes/alert.dart';
|
import '../classes/alert.dart';
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
import 'package:flutter_gemini/flutter_gemini.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() {
|
void main() {
|
||||||
runApp(MyApp());
|
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");
|
"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 {
|
Future<void> _getEventInfosFromImage() async {
|
||||||
await dotenv.load();
|
await dotenv.load();
|
||||||
|
|
||||||
@ -71,11 +105,10 @@ class DisplayPictureScreenState extends State<DisplayPictureScreen>
|
|||||||
gemini
|
gemini
|
||||||
.textAndImage(
|
.textAndImage(
|
||||||
text:
|
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()],
|
images: [file.readAsBytesSync()],
|
||||||
modelName: "models/gemini-1.5-flash-latest")
|
modelName: "models/gemini-1.5-flash-latest")
|
||||||
.then((value) => showDescImageAddDialog(
|
.then((value) => searchEvents(value?.content?.parts?.last.text ?? ''))
|
||||||
context, value?.content?.parts?.last.text ?? ''))
|
|
||||||
.catchError((e) => displayError);
|
.catchError((e) => displayError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user