asset predication implemented in asset inventory
parent
0501ec7c92
commit
9168c07fb5
@ -0,0 +1,77 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
|
||||
import 'package:test_sa/extensions/context_extension.dart';
|
||||
import 'package:test_sa/models/device/predict_device_model.dart';
|
||||
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
|
||||
import 'package:test_sa/views/widgets/equipment/predict_device_list.dart';
|
||||
|
||||
class CopilotHelper {
|
||||
static Future<PredictedAsset?> pickImageFromCamera(BuildContext context, {bool pickMode = false}) async {
|
||||
final status = await Permission.camera.status;
|
||||
|
||||
if (status.isGranted) {
|
||||
return openCamera(context, pickMode: pickMode);
|
||||
}
|
||||
|
||||
final permission = await Permission.camera.request();
|
||||
|
||||
if (permission.isGranted) {
|
||||
return openCamera(context, pickMode: pickMode);
|
||||
}
|
||||
|
||||
if (permission.isPermanentlyDenied) {
|
||||
await openAppSettings();
|
||||
return null;
|
||||
}
|
||||
|
||||
debugPrint('Camera permission denied');
|
||||
return null;
|
||||
}
|
||||
|
||||
static Future<PredictedAsset?> openCamera(BuildContext context, {bool pickMode = false}) async {
|
||||
final XFile? pickedFile = await ImagePicker().pickImage(
|
||||
source: ImageSource.camera,
|
||||
imageQuality: 70,
|
||||
);
|
||||
|
||||
if (pickedFile == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final File imageFile = File(pickedFile.path);
|
||||
|
||||
return uploadImage(imageFile, context, pickMode: pickMode);
|
||||
}
|
||||
|
||||
static Future<PredictedAsset?> uploadImage(File imageFile, BuildContext context, {bool pickMode = false}) async {
|
||||
try {
|
||||
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
|
||||
AssetProvider assetProvider = Provider.of<AssetProvider>(context, listen: false);
|
||||
|
||||
PredictDeviceResponse? response = await assetProvider.predictDevice(imageFile);
|
||||
Navigator.pop(context);
|
||||
if (response != null && response.success == true) {
|
||||
final List<PredictedAsset> predictedAssetList = response.predictedAsset ?? [];
|
||||
if (predictedAssetList.isNotEmpty) {
|
||||
return Navigator.push<PredictedAsset?>(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => PredictDeviceView(predictedAsset: predictedAssetList, pickMode: pickMode)),
|
||||
);
|
||||
} else {
|
||||
context.showInfoDialog("No Predicted asset found");
|
||||
}
|
||||
} else {
|
||||
context.showInfoDialog("Failed to recognize the asset. Please try again.");
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint('Upload error: $e');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue