You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fluffychat/lib/pangea/repo/image_repo.dart

73 lines
1.8 KiB
Dart

import 'dart:convert';
import 'dart:developer';
import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart';
import '../config/environment.dart';
import '../network/requests.dart';
class GenerateImageeResponse {
final String imageUrl;
final String prompt;
GenerateImageeResponse({
required this.imageUrl,
required this.prompt,
});
factory GenerateImageeResponse.fromJson(Map<String, dynamic> json) {
return GenerateImageeResponse(
imageUrl: json['image_url'],
prompt: json['prompt'],
);
}
factory GenerateImageeResponse.error() {
return GenerateImageeResponse(
imageUrl: 'https://i.imgur.com/2L2JYqk.png',
prompt: 'Error',
);
}
}
class GenerateImageRequest {
String prompt;
GenerateImageRequest({required this.prompt});
Map<String, dynamic> toJson() => {
'prompt': prompt,
};
}
class ImageRepo {
static Future<GenerateImageeResponse> fetchImage(
GenerateImageRequest request) async {
final Requests req =
Requests(baseUrl: Environment.choreoApi); // Set your API base URL
final requestBody = request.toJson();
try {
final Response res = await req.post(
url: '/generate-image/', // Endpoint in your FastAPI server
body: requestBody,
);
if (res.statusCode == 200) {
final decodedBody = jsonDecode(utf8.decode(res.bodyBytes));
return GenerateImageeResponse.fromJson(
decodedBody); // Convert response to ImageModel
} else {
throw Exception('Failed to load image');
}
} catch (err, stack) {
debugger(when: kDebugMode);
ErrorHandler.logError(e: err, s: stack, data: requestBody);
return GenerateImageeResponse
.error(); // Return an error model or handle accordingly
}
}
}