From a7f57688a7c104ae568313b537a04c752305de81 Mon Sep 17 00:00:00 2001 From: Odein Date: Wed, 29 Nov 2023 15:00:21 +0430 Subject: [PATCH] bog fix --- .vscode/settings.json | 3 + lib/main.dart | 3 +- lib/models/item_model.dart | 3 + lib/models/my_item_model.dart | 3 + lib/pages/ItemPages/item_add_screen.dart | 1 + lib/providers/items.dart | 9 +- lib/providers/my_items.dart | 2 + lib/providers/packages.dart | 21 +- lib/widgets/CycleScreens/Result/data_box.dart | 26 +- lib/widgets/Global/drawer.dart | 30 +- .../ItemScreens/Add/item_save_button.dart | 61 +- lib/widgets/ItemScreens/Add/upload_image.dart | 2 +- .../ItemScreens/Result/item_data_box.dart | 24 +- lib/widgets/LabelScreens/Result/data_box.dart | 30 +- .../Result/my_items_data_box_widget.dart | 24 +- .../Result/my_packages_data_box_widget.dart | 26 +- .../Details/package_detail_box.dart | 2 +- .../Result/package_data_box.dart | 26 +- .../TestResultScreens/Add/capture_image.dart | 618 +++++++++--------- .../TestResultScreens/Add/form_creator.dart | 30 +- macos/Podfile | 3 + macos/Podfile.lock | 2 +- 22 files changed, 523 insertions(+), 426 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..14f6030 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.inlineSuggest.showToolbar": "onHover" +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index b28aad5..cdf5d81 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -66,7 +66,6 @@ import 'providers/labels.dart'; import 'providers/my_info.dart'; import 'providers/test_results.dart'; import 'widgets/Global/splash_screen.dart'; -import 'widgets/TestResultScreens/Add/capture_image.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); @@ -165,7 +164,7 @@ class MyApp extends StatelessWidget { Routes.testScanScreen: (ctx) => TestScanScreen(), Routes.sendCodeScreen: (ctx) => VerifyPassScreen(), Routes.rePassScreen: (ctx) => RePassScreen(), - Routes.captureImageScreen: (ctx) => CaptureImage(), + // Routes.captureImageScreen: (ctx) => CaptureImage(), Routes.packageAddScreen: (ctx) => PackageAddScreen(), Routes.packageResultScreen: (ctx) => PackageResultScreen(), Routes.packageDetailScreen: (ctx) => PackageDetailScreen(), diff --git a/lib/models/item_model.dart b/lib/models/item_model.dart index 6d97d2d..3666a17 100755 --- a/lib/models/item_model.dart +++ b/lib/models/item_model.dart @@ -9,6 +9,7 @@ class ItemResultObject extends Equatable { final int status; final String? batchId; final String? udi; + final String? udi_name; ItemResultObject({ required this.id, @@ -18,6 +19,7 @@ class ItemResultObject extends Equatable { required this.status, this.batchId, this.udi, + this.udi_name, }); @override @@ -29,6 +31,7 @@ class ItemResultObject extends Equatable { status, batchId!, udi!, + udi_name!, ]; @override diff --git a/lib/models/my_item_model.dart b/lib/models/my_item_model.dart index 9814525..dc1e48d 100755 --- a/lib/models/my_item_model.dart +++ b/lib/models/my_item_model.dart @@ -5,6 +5,7 @@ class MyItemResultObject extends Equatable { final String id; final String name; final String size; + final String? udi; final String? userName; final String? requestId; @@ -14,6 +15,7 @@ class MyItemResultObject extends Equatable { required this.size, this.userName, this.requestId, + this.udi, }); @override @@ -23,6 +25,7 @@ class MyItemResultObject extends Equatable { size, userName!, requestId!, + udi!, ]; @override diff --git a/lib/pages/ItemPages/item_add_screen.dart b/lib/pages/ItemPages/item_add_screen.dart index 40aa1c4..240fd2b 100755 --- a/lib/pages/ItemPages/item_add_screen.dart +++ b/lib/pages/ItemPages/item_add_screen.dart @@ -324,6 +324,7 @@ class _ItemAddScreenState extends State { batchId: batchId, dateValue: dateCTRL.text, deviceBlockSize: _deviceBlockSize, + isLoading: isInit, ), SizedBox( height: 100, diff --git a/lib/providers/items.dart b/lib/providers/items.dart index 87f1267..7548481 100755 --- a/lib/providers/items.dart +++ b/lib/providers/items.dart @@ -118,7 +118,7 @@ class ItemProvider extends ChangeNotifier { return 'Added'; } - Future createItemResult( + Future createItemResult( name, size, specific, @@ -149,6 +149,12 @@ class ItemProvider extends ChangeNotifier { "Accept": "application/json" }); print(response.body); + if (response.statusCode == 200 || response.statusCode == 201) { + catchImages = []; + return 'done'; + } else { + return 'error'; + } } Future updateItemResult( @@ -281,6 +287,7 @@ class ItemProvider extends ChangeNotifier { size: item['size'].toString(), userName: item['user'] != null ? item['user']['name'] : '', status: item['status'], + udi: item['udi'], ), ); } diff --git a/lib/providers/my_items.dart b/lib/providers/my_items.dart index 0bc2769..4285d4c 100755 --- a/lib/providers/my_items.dart +++ b/lib/providers/my_items.dart @@ -126,6 +126,7 @@ class MyItemProvider extends ChangeNotifier { name: item['name'], id: item['id'].toString(), size: item['size'].toString(), + udi: item['udi'], ), ); } @@ -170,6 +171,7 @@ class MyItemProvider extends ChangeNotifier { id: item['id'].toString(), size: item['size'].toString(), userName: item['user'] != null ? item['user']['name'] : '', + udi: item['udi'], ), ); } diff --git a/lib/providers/packages.dart b/lib/providers/packages.dart index 57de38b..670df80 100755 --- a/lib/providers/packages.dart +++ b/lib/providers/packages.dart @@ -41,7 +41,11 @@ class PackageProvider extends ChangeNotifier { } changeItemVal(String value, int index) { - itemValues[index].text = value; + for (var item in filteredItems!) { + if (item.udi_name == value) { + itemValues[index].text = item.id; + } + } notifyListeners(); } @@ -104,18 +108,12 @@ class PackageProvider extends ChangeNotifier { 'Authorization': User.token, }, ); - // List> result = []; List result = []; filteredItems = []; var filterData = json.decode(response.body); for (var item in filterData['data']) { - // result.add("${item['name']} - ${item['udi'] != null ? item['udi'] : ''}"); - result.add(item['id'].toString()); - // result.add({ - // 'name-udi': - // "${item['name']} - ${item['udi'] != null ? item['udi'] : ''}", - // 'id': item['id'].toString() - // }); + result.add("${item['name']} - ${item['udi'] != null ? item['udi'] : ''}"); + // result.add(item['id'].toString()); filteredItems!.add( ItemResultObject( name: item['name'], @@ -124,6 +122,8 @@ class PackageProvider extends ChangeNotifier { userName: item['user'] != null ? item['user']['name'] : '', status: item['status'], udi: item['udi'] != null ? item['udi'] : '', + udi_name: + "${item['name']} - ${item['udi'] != null ? item['udi'] : ''}", ), ); } @@ -312,7 +312,8 @@ class PackageProvider extends ChangeNotifier { var data = json.decode(response.body)['data']; List itemsList = []; for (var item in data['items']) { - itemsList.add(item['id'].toString()); + itemsList + .add("${item['name']} - ${item['udi'] != null ? item['udi'] : ''}"); } print(data); result = PackageDetailObject( diff --git a/lib/widgets/CycleScreens/Result/data_box.dart b/lib/widgets/CycleScreens/Result/data_box.dart index ad91b2c..2ec1dcc 100755 --- a/lib/widgets/CycleScreens/Result/data_box.dart +++ b/lib/widgets/CycleScreens/Result/data_box.dart @@ -37,19 +37,19 @@ class CycleItemBox extends StatelessWidget { child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( - padding: const EdgeInsets.all(6), - child: Text( - item!.id, - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, - ), - ), - ), - SizedBox( - width: 3 * _deviceBlockSize, - ), + // Container( + // padding: const EdgeInsets.all(6), + // child: Text( + // item!.id, + // style: TextStyle( + // fontWeight: FontWeight.w700, + // fontSize: 5 * _deviceBlockSize, + // ), + // ), + // ), + // SizedBox( + // width: 3 * _deviceBlockSize, + // ), // Spacer(), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/widgets/Global/drawer.dart b/lib/widgets/Global/drawer.dart index 0fedd62..c069b95 100755 --- a/lib/widgets/Global/drawer.dart +++ b/lib/widgets/Global/drawer.dart @@ -34,21 +34,27 @@ class _AppDrawerState extends State { color: Colors.black, ), child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - ListTile( - leading: CircleAvatar( - backgroundColor: kLightBlue, - child: Icon( - Icons.person, - color: Colors.white, - ), + Text( + 'WELCOME', + style: TextStyle( + color: Colors.white, ), - title: Text( - user?['name'] != null ? user!['name'] : '', - style: TextStyle( - color: Colors.white, + ), + SizedBox( + height: 5.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + user?['name'] != null ? user!['name'] : '', + style: TextStyle( + color: Colors.white, + ), ), - ), + ], ), Divider( color: Colors.white, diff --git a/lib/widgets/ItemScreens/Add/item_save_button.dart b/lib/widgets/ItemScreens/Add/item_save_button.dart index 5928c8f..049e7b2 100755 --- a/lib/widgets/ItemScreens/Add/item_save_button.dart +++ b/lib/widgets/ItemScreens/Add/item_save_button.dart @@ -1,3 +1,5 @@ +// ignore_for_file: must_be_immutable + import 'package:cssd/config/colors.dart'; import 'package:cssd/providers/items.dart'; import 'package:flutter/material.dart'; @@ -5,8 +7,8 @@ import 'package:provider/provider.dart'; import '../../../config/routes.dart'; -class ItemAddSaveButton extends StatelessWidget { - const ItemAddSaveButton({ +class ItemAddSaveButton extends StatefulWidget { + ItemAddSaveButton({ Key? key, required GlobalKey form, this.batchId, @@ -17,6 +19,7 @@ class ItemAddSaveButton extends StatelessWidget { required this.sizeCTRL, required this.specificCTRL, required this.dateValue, + required this.isLoading, }) : _form = form, _deviceBlockSize = deviceBlockSize, super(key: key); @@ -30,21 +33,55 @@ class ItemAddSaveButton extends StatelessWidget { final String dateValue; final String? batchId; final double _deviceBlockSize; + bool isLoading; + @override + State createState() => _ItemAddSaveButtonState(); +} + +class _ItemAddSaveButtonState extends State { @override Widget build(BuildContext context) { return InkWell( onTap: () { - if (!_form.currentState!.validate()) { + if (!widget._form.currentState!.validate()) { return; } - Provider.of(context, listen: false).createItemResult( - nameCTRL.text, - sizeCTRL.text, - specificCTRL.text, - udiCTRL.text, - descriptionCTRL.text, - batchId, + setState(() { + widget.isLoading = true; + }); + Provider.of(context, listen: false) + .createItemResult( + widget.nameCTRL.text, + widget.sizeCTRL.text, + widget.specificCTRL.text, + widget.udiCTRL.text, + widget.descriptionCTRL.text, + widget.batchId, + ) + .then( + (result) { + setState(() { + widget.isLoading = false; + }); + if (result == 'done') { + showDialog( + context: context, + builder: (ctx) => AlertDialog( + content: Text('Item added.'), + actions: [ + TextButton( + onPressed: () { + Navigator.of(ctx).pop(); + }, + child: Text('Ok'), + ) + ], + ), + ).then((value) => Navigator.of(context) + .popAndPushNamed(Routes.testResultScreen)); + } + }, ); showDialog( context: context, @@ -65,7 +102,7 @@ class ItemAddSaveButton extends StatelessWidget { }, child: Container( padding: EdgeInsets.symmetric( - horizontal: 5 * _deviceBlockSize, + horizontal: 5 * widget._deviceBlockSize, vertical: 10, ), decoration: BoxDecoration( @@ -80,7 +117,7 @@ class ItemAddSaveButton extends StatelessWidget { 'Save', style: TextStyle( color: Colors.white, - fontSize: 5 * _deviceBlockSize, + fontSize: 5 * widget._deviceBlockSize, ), ), ), diff --git a/lib/widgets/ItemScreens/Add/upload_image.dart b/lib/widgets/ItemScreens/Add/upload_image.dart index d4e2e97..7927fd7 100755 --- a/lib/widgets/ItemScreens/Add/upload_image.dart +++ b/lib/widgets/ItemScreens/Add/upload_image.dart @@ -108,7 +108,7 @@ class _UploaderImageState extends State { Future loadAssetsFromCamera(BuildContext context) async { var providerObject = Provider.of(context, listen: false); - List _catchImages = []; + List _catchImages = providerObject.catchImages; var image = await ImagePicker.platform.pickImage( source: ImageSource.camera, ); diff --git a/lib/widgets/ItemScreens/Result/item_data_box.dart b/lib/widgets/ItemScreens/Result/item_data_box.dart index 894be66..30b47bb 100755 --- a/lib/widgets/ItemScreens/Result/item_data_box.dart +++ b/lib/widgets/ItemScreens/Result/item_data_box.dart @@ -35,19 +35,21 @@ class ItemItemBox extends StatelessWidget { child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( - padding: const EdgeInsets.all(6.0), - child: Text( - item!.id, - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, + if (item!.udi != null) + Container( + padding: const EdgeInsets.all(6.0), + child: Text( + item!.udi!, + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 3 * _deviceBlockSize, + ), ), ), - ), - SizedBox( - width: 3 * _deviceBlockSize, - ), + if (item!.udi != null) + SizedBox( + width: 3 * _deviceBlockSize, + ), // Spacer(), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/widgets/LabelScreens/Result/data_box.dart b/lib/widgets/LabelScreens/Result/data_box.dart index 7bae2d9..bff8e41 100755 --- a/lib/widgets/LabelScreens/Result/data_box.dart +++ b/lib/widgets/LabelScreens/Result/data_box.dart @@ -33,19 +33,19 @@ class LabelItemBox extends StatelessWidget { child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( - padding: const EdgeInsets.all(6), - child: Text( - item!.id, - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, - ), - ), - ), - SizedBox( - width: 3 * _deviceBlockSize, - ), + // Container( + // padding: const EdgeInsets.all(6), + // child: Text( + // item!.id, + // style: TextStyle( + // fontWeight: FontWeight.w700, + // fontSize: 5 * _deviceBlockSize, + // ), + // ), + // ), + // SizedBox( + // width: 3 * _deviceBlockSize, + // ), // Spacer(), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -65,6 +65,10 @@ class LabelItemBox extends StatelessWidget { child: Text( item!.package, overflow: TextOverflow.ellipsis, + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 3 * _deviceBlockSize, + ), ), ), Container( diff --git a/lib/widgets/MyItemsScreens/Result/my_items_data_box_widget.dart b/lib/widgets/MyItemsScreens/Result/my_items_data_box_widget.dart index bda34a6..7a89a70 100755 --- a/lib/widgets/MyItemsScreens/Result/my_items_data_box_widget.dart +++ b/lib/widgets/MyItemsScreens/Result/my_items_data_box_widget.dart @@ -37,19 +37,21 @@ class MyItemsItemDataBox extends StatelessWidget { child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( - padding: const EdgeInsets.all(6.0), - child: Text( - items!.id, - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, + if (items!.udi != null) + Container( + padding: const EdgeInsets.all(6.0), + child: Text( + items!.udi!, + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 3 * _deviceBlockSize, + ), ), ), - ), - SizedBox( - width: 3 * _deviceBlockSize, - ), + if (items!.udi != null) + SizedBox( + width: 3 * _deviceBlockSize, + ), // Spacer(), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/widgets/MyPackagesScreens/Result/my_packages_data_box_widget.dart b/lib/widgets/MyPackagesScreens/Result/my_packages_data_box_widget.dart index f6f80c3..f0c7430 100755 --- a/lib/widgets/MyPackagesScreens/Result/my_packages_data_box_widget.dart +++ b/lib/widgets/MyPackagesScreens/Result/my_packages_data_box_widget.dart @@ -38,19 +38,19 @@ class MyPackagesItemDataBox extends StatelessWidget { child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( - padding: const EdgeInsets.all(6.0), - child: Text( - packages!.id, - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, - ), - ), - ), - SizedBox( - width: 3 * _deviceBlockSize, - ), + // Container( + // padding: const EdgeInsets.all(6.0), + // child: Text( + // packages!.id, + // style: TextStyle( + // fontWeight: FontWeight.w700, + // fontSize: 5 * _deviceBlockSize, + // ), + // ), + // ), + // SizedBox( + // width: 3 * _deviceBlockSize, + // ), // Spacer(), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/widgets/PackageScreens/Details/package_detail_box.dart b/lib/widgets/PackageScreens/Details/package_detail_box.dart index ca079bc..ac0c614 100755 --- a/lib/widgets/PackageScreens/Details/package_detail_box.dart +++ b/lib/widgets/PackageScreens/Details/package_detail_box.dart @@ -235,7 +235,7 @@ class PackageDetailsDataBox extends StatelessWidget { shrinkWrap: true, itemBuilder: (ctx, index) => RichText( text: TextSpan( - text: 'Item ID ', + text: 'Item ', style: TextStyle( color: Colors.grey, fontFamily: 'montserrat', diff --git a/lib/widgets/PackageScreens/Result/package_data_box.dart b/lib/widgets/PackageScreens/Result/package_data_box.dart index 42d9a85..b661f00 100755 --- a/lib/widgets/PackageScreens/Result/package_data_box.dart +++ b/lib/widgets/PackageScreens/Result/package_data_box.dart @@ -35,19 +35,19 @@ class PackageItemBox extends StatelessWidget { child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( - padding: const EdgeInsets.all(6.0), - child: Text( - item!.id, - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, - ), - ), - ), - SizedBox( - width: 3 * _deviceBlockSize, - ), + // Container( + // padding: const EdgeInsets.all(6.0), + // child: Text( + // item!.id, + // style: TextStyle( + // fontWeight: FontWeight.w700, + // fontSize: 5 * _deviceBlockSize, + // ), + // ), + // ), + // SizedBox( + // width: 3 * _deviceBlockSize, + // ), // Spacer(), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/widgets/TestResultScreens/Add/capture_image.dart b/lib/widgets/TestResultScreens/Add/capture_image.dart index 25ffab8..a78649d 100755 --- a/lib/widgets/TestResultScreens/Add/capture_image.dart +++ b/lib/widgets/TestResultScreens/Add/capture_image.dart @@ -1,328 +1,328 @@ -// ignore_for_file: dead_code +// // ignore_for_file: dead_code -import 'dart:async'; -import 'dart:io'; +// import 'dart:async'; +// import 'dart:io'; -import 'package:camera/camera.dart'; -import 'package:file_picker/file_picker.dart'; -import 'package:flutter/material.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:provider/provider.dart'; +// import 'package:camera/camera.dart'; +// import 'package:file_picker/file_picker.dart'; +// import 'package:flutter/material.dart'; +// import 'package:path_provider/path_provider.dart'; +// import 'package:provider/provider.dart'; -import '../../../providers/test_results.dart'; +// import '../../../providers/test_results.dart'; -class CaptureImage extends StatefulWidget { - @override - _CaptureImageState createState() { - return _CaptureImageState(); - } -} +// class CaptureImage extends StatefulWidget { +// @override +// _CaptureImageState createState() { +// return _CaptureImageState(); +// } +// } -/// Returns a suitable camera icon for [direction]. -IconData getCameraLensIcon(CameraLensDirection direction) { - switch (direction) { - case CameraLensDirection.back: - return Icons.camera_rear; - case CameraLensDirection.front: - return Icons.camera_front; - case CameraLensDirection.external: - return Icons.camera; - } - throw ArgumentError('Unknown lens direction'); -} +// /// Returns a suitable camera icon for [direction]. +// IconData getCameraLensIcon(CameraLensDirection direction) { +// switch (direction) { +// case CameraLensDirection.back: +// return Icons.camera_rear; +// case CameraLensDirection.front: +// return Icons.camera_front; +// case CameraLensDirection.external: +// return Icons.camera; +// } +// throw ArgumentError('Unknown lens direction'); +// } -void logError(String code, String message) => - print('Error: $code\nError Message: $message'); +// void logError(String code, String message) => +// print('Error: $code\nError Message: $message'); -class _CaptureImageState extends State - with WidgetsBindingObserver { - CameraController? controller; - String? imagePath; - // String videoPath; - VoidCallback? videoPlayerListener; - bool isInit = true; - int curCamera = 0; - var cameras; - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addObserver(this); - } +// class _CaptureImageState extends State +// with WidgetsBindingObserver { +// CameraController? controller; +// String? imagePath; +// // String videoPath; +// VoidCallback? videoPlayerListener; +// bool isInit = true; +// int curCamera = 0; +// var cameras; +// @override +// void initState() { +// super.initState(); +// WidgetsBinding.instance.addObserver(this); +// } - @override - void didChangeDependencies() async { - if (isInit) { - cameras = await availableCameras(); - onNewCameraSelected(cameras[curCamera]); - setState(() { - isInit = false; - }); - } - super.didChangeDependencies(); - } +// @override +// void didChangeDependencies() async { +// if (isInit) { +// cameras = await availableCameras(); +// onNewCameraSelected(cameras[curCamera]); +// setState(() { +// isInit = false; +// }); +// } +// super.didChangeDependencies(); +// } - @override - void dispose() { - WidgetsBinding.instance.removeObserver(this); - super.dispose(); - } +// @override +// void dispose() { +// WidgetsBinding.instance.removeObserver(this); +// super.dispose(); +// } - @override - void didChangeAppLifecycleState(AppLifecycleState state) { - // App state changed before we got the chance to initialize. - if (controller == null || !controller!.value.isInitialized) { - return; - } - if (state == AppLifecycleState.inactive) { - controller?.dispose(); - } else if (state == AppLifecycleState.resumed) { - if (controller != null) { - onNewCameraSelected(controller!.description); - } - } - } +// @override +// void didChangeAppLifecycleState(AppLifecycleState state) { +// // App state changed before we got the chance to initialize. +// if (controller == null || !controller!.value.isInitialized) { +// return; +// } +// if (state == AppLifecycleState.inactive) { +// controller?.dispose(); +// } else if (state == AppLifecycleState.resumed) { +// if (controller != null) { +// onNewCameraSelected(controller!.description); +// } +// } +// } - final GlobalKey _scaffoldKey = GlobalKey(); +// final GlobalKey _scaffoldKey = GlobalKey(); - @override - Widget build(BuildContext context) { - return SafeArea( - child: Scaffold( - key: _scaffoldKey, - // appBar: AppBar( - // title: const Text('Take Picture'), - // ), - body: isInit - ? Center( - child: CircularProgressIndicator( - color: Colors.black, - ), - ) - : Stack(children: [ - _cameraPreviewWidget(), - Positioned( - bottom: 100, left: 100, child: _captureControlRowWidget()), - Positioned( - bottom: 100, - right: 100, - child: InkWell( - onTap: () { - if (curCamera == 0) { - try { - onNewCameraSelected(cameras[1]); - setState(() { - curCamera = 1; - }); - } catch (e) {} - } else { - onNewCameraSelected(cameras[0]); - setState(() { - curCamera = 0; - }); - } - }, - child: Icon( - curCamera == 0 ? Icons.camera_rear : Icons.camera_front, - size: 40, - color: Colors.white, - ), - ), - ), - // _cameraTogglesRowWidget(cameras), - ]), - ), - ); - } - - /// Display the preview from the camera (or a message if the preview is not available). - Widget _cameraPreviewWidget() { - if (controller == null || !controller!.value.isInitialized) { - return const Text( - 'Tap a camera', - style: TextStyle( - color: Colors.white, - fontSize: 24.0, - fontWeight: FontWeight.w900, - ), - ); - } else { - return Container( - width: double.infinity, - child: CameraPreview(controller!), - ); - } - } - - /// Toggle recording audio - - /// Display the control bar with buttons to take pictures and record videos. - Widget _captureControlRowWidget() { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - mainAxisSize: MainAxisSize.max, - children: [ - IconButton( - icon: const Icon( - Icons.camera_alt, - size: 40, - color: Colors.white, - ), - // color: Colors.blue, - onPressed: controller != null && - controller!.value.isInitialized && - !controller!.value.isRecordingVideo - ? onTakePictureButtonPressed - : null, - ), - ], - ); - } - - getCameras() async { - return await availableCameras(); - } - - /// Display a row of toggle to select the camera (or a message if no camera is available). - // Widget _cameraTogglesRowWidget(var cameras) { - // final List toggles = []; - - // if (cameras.isEmpty) { - // return const Text('No camera found'); - // } else { - // for (CameraDescription cameraDescription in cameras) { - // print("${cameraDescription.name}"); - // toggles.add( - // SizedBox( - // width: 90.0, - // child: RadioListTile( - // title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), - // groupValue: controller?.description, - // value: cameraDescription, - // onChanged: controller != null && controller.value.isRecordingVideo - // ? null - // : onNewCameraSelected, - // ), - // ), - // ); - // } - // } - - // return Row(children: toggles); - // } - - String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); - - void showInSnackBar(String message) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(message), - ), - ); - } - - void onNewCameraSelected(CameraDescription cameraDescription) async { - print(cameraDescription.lensDirection.toString()); - if (controller != null) { - await controller!.dispose(); - } - controller = CameraController( - cameraDescription, - ResolutionPreset.medium, - // enableAudio: enableAudio, - ); - - // If the controller is updated then update the UI. - controller!.addListener(() { - if (mounted) setState(() {}); - if (controller!.value.hasError) { - showInSnackBar('Camera error ${controller!.value.errorDescription}'); - } - }); - - try { - await controller!.initialize(); - } on CameraException catch (e) { - _showCameraException(e); - } - - if (mounted) { - setState(() {}); - } - } - - void onTakePictureButtonPressed() { - takePicture().then((String? filePath) { - if (mounted) { - setState(() { - imagePath = filePath; - var profileProviderObject = - Provider.of(context, listen: false); - List files = profileProviderObject.catchImages; - print(imagePath); - files.add(PlatformFile( - name: 'test', - size: 0, - path: imagePath, - bytes: File(imagePath!).readAsBytesSync())); - profileProviderObject.setCatchImages(files); - profileProviderObject.setImages(); - print(imagePath); - }); - if (filePath != null) { - Navigator.of(context).pop(); - // showInSnackBar('Picture saved to $filePath'); - } - } - }); - } - - Future takePicture() async { - if (!controller!.value.isInitialized) { - showInSnackBar('Error: select a camera first.'); - return null; - } - final Directory extDir = await getApplicationDocumentsDirectory(); - final String dirPath = '${extDir.path}/Pictures/flutter_test'; - await Directory(dirPath).create(recursive: true); - final String filePath = '$dirPath/${timestamp()}.jpg'; - - if (controller!.value.isTakingPicture) { - // A capture is already pending, do nothing. - return null; - } - - try { - await controller!.takePicture(); - } on CameraException catch (e) { - _showCameraException(e); - return null; - } - return filePath; - } - - void _showCameraException(CameraException e) { - logError(e.code, e.description!); - showInSnackBar('Error: ${e.code}\n${e.description}'); - } -} - -// class CameraApp extends StatelessWidget { // @override // Widget build(BuildContext context) { -// return MaterialApp( -// home: CaptureImage(), +// return SafeArea( +// child: Scaffold( +// key: _scaffoldKey, +// // appBar: AppBar( +// // title: const Text('Take Picture'), +// // ), +// body: isInit +// ? Center( +// child: CircularProgressIndicator( +// color: Colors.black, +// ), +// ) +// : Stack(children: [ +// _cameraPreviewWidget(), +// Positioned( +// bottom: 100, left: 100, child: _captureControlRowWidget()), +// Positioned( +// bottom: 100, +// right: 100, +// child: InkWell( +// onTap: () { +// if (curCamera == 0) { +// try { +// onNewCameraSelected(cameras[1]); +// setState(() { +// curCamera = 1; +// }); +// } catch (e) {} +// } else { +// onNewCameraSelected(cameras[0]); +// setState(() { +// curCamera = 0; +// }); +// } +// }, +// child: Icon( +// curCamera == 0 ? Icons.camera_rear : Icons.camera_front, +// size: 40, +// color: Colors.white, +// ), +// ), +// ), +// // _cameraTogglesRowWidget(cameras), +// ]), +// ), // ); // } -// } -// List cameras = []; - -// Future main() async { -// // Fetch the available cameras before initializing the app. -// try { -// WidgetsFlutterBinding.ensureInitialized(); -// } on CameraException catch (e) { -// logError(e.code, e.description); +// /// Display the preview from the camera (or a message if the preview is not available). +// Widget _cameraPreviewWidget() { +// if (controller == null || !controller!.value.isInitialized) { +// return const Text( +// 'Tap a camera', +// style: TextStyle( +// color: Colors.white, +// fontSize: 24.0, +// fontWeight: FontWeight.w900, +// ), +// ); +// } else { +// return Container( +// width: double.infinity, +// child: CameraPreview(controller!), +// ); +// } +// } + +// /// Toggle recording audio + +// /// Display the control bar with buttons to take pictures and record videos. +// Widget _captureControlRowWidget() { +// return Row( +// mainAxisAlignment: MainAxisAlignment.spaceEvenly, +// mainAxisSize: MainAxisSize.max, +// children: [ +// IconButton( +// icon: const Icon( +// Icons.camera_alt, +// size: 40, +// color: Colors.white, +// ), +// // color: Colors.blue, +// onPressed: controller != null && +// controller!.value.isInitialized && +// !controller!.value.isRecordingVideo +// ? onTakePictureButtonPressed +// : null, +// ), +// ], +// ); +// } + +// getCameras() async { +// return await availableCameras(); +// } + +// /// Display a row of toggle to select the camera (or a message if no camera is available). +// // Widget _cameraTogglesRowWidget(var cameras) { +// // final List toggles = []; + +// // if (cameras.isEmpty) { +// // return const Text('No camera found'); +// // } else { +// // for (CameraDescription cameraDescription in cameras) { +// // print("${cameraDescription.name}"); +// // toggles.add( +// // SizedBox( +// // width: 90.0, +// // child: RadioListTile( +// // title: Icon(getCameraLensIcon(cameraDescription.lensDirection)), +// // groupValue: controller?.description, +// // value: cameraDescription, +// // onChanged: controller != null && controller.value.isRecordingVideo +// // ? null +// // : onNewCameraSelected, +// // ), +// // ), +// // ); +// // } +// // } + +// // return Row(children: toggles); +// // } + +// String timestamp() => DateTime.now().millisecondsSinceEpoch.toString(); + +// void showInSnackBar(String message) { +// ScaffoldMessenger.of(context).showSnackBar( +// SnackBar( +// content: Text(message), +// ), +// ); +// } + +// void onNewCameraSelected(CameraDescription cameraDescription) async { +// print(cameraDescription.lensDirection.toString()); +// if (controller != null) { +// await controller!.dispose(); +// } +// controller = CameraController( +// cameraDescription, +// ResolutionPreset.medium, +// // enableAudio: enableAudio, +// ); + +// // If the controller is updated then update the UI. +// controller!.addListener(() { +// if (mounted) setState(() {}); +// if (controller!.value.hasError) { +// showInSnackBar('Camera error ${controller!.value.errorDescription}'); +// } +// }); + +// try { +// await controller!.initialize(); +// } on CameraException catch (e) { +// _showCameraException(e); +// } + +// if (mounted) { +// setState(() {}); +// } +// } + +// void onTakePictureButtonPressed() { +// takePicture().then((String? filePath) { +// if (mounted) { +// setState(() { +// imagePath = filePath; +// var profileProviderObject = +// Provider.of(context, listen: false); +// List files = profileProviderObject.catchImages; +// print(imagePath); +// files.add(PlatformFile( +// name: 'test', +// size: 0, +// path: imagePath, +// bytes: File(imagePath!).readAsBytesSync())); +// profileProviderObject.setCatchImages(files); +// profileProviderObject.setImages(); +// print(imagePath); +// }); +// if (filePath != null) { +// Navigator.of(context).pop(); +// // showInSnackBar('Picture saved to $filePath'); +// } +// } +// }); +// } + +// Future takePicture() async { +// if (!controller!.value.isInitialized) { +// showInSnackBar('Error: select a camera first.'); +// return null; +// } +// final Directory extDir = await getApplicationDocumentsDirectory(); +// final String dirPath = '${extDir.path}/Pictures/flutter_test'; +// await Directory(dirPath).create(recursive: true); +// final String filePath = '$dirPath/${timestamp()}.jpg'; + +// if (controller!.value.isTakingPicture) { +// // A capture is already pending, do nothing. +// return null; +// } + +// try { +// await controller!.takePicture(); +// } on CameraException catch (e) { +// _showCameraException(e); +// return null; +// } +// return filePath; +// } + +// void _showCameraException(CameraException e) { +// logError(e.code, e.description!); +// showInSnackBar('Error: ${e.code}\n${e.description}'); // } -// runApp(CameraApp()); // } + +// // class CameraApp extends StatelessWidget { +// // @override +// // Widget build(BuildContext context) { +// // return MaterialApp( +// // home: CaptureImage(), +// // ); +// // } +// // } + +// // List cameras = []; + +// // Future main() async { +// // // Fetch the available cameras before initializing the app. +// // try { +// // WidgetsFlutterBinding.ensureInitialized(); +// // } on CameraException catch (e) { +// // logError(e.code, e.description); +// // } +// // runApp(CameraApp()); +// // } diff --git a/lib/widgets/TestResultScreens/Add/form_creator.dart b/lib/widgets/TestResultScreens/Add/form_creator.dart index 24cce32..951d7ac 100755 --- a/lib/widgets/TestResultScreens/Add/form_creator.dart +++ b/lib/widgets/TestResultScreens/Add/form_creator.dart @@ -1,14 +1,18 @@ +// ignore_for_file: deprecated_member_use, invalid_use_of_visible_for_testing_member + +import 'dart:io'; + import 'package:barcode_scan2/barcode_scan2.dart'; import 'package:cssd/config/colors.dart'; import 'package:cssd/providers/input.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:image_picker_gallery_camera/image_picker_gallery_camera.dart'; import 'package:multiselect_formfield/multiselect_formfield.dart'; import 'package:provider/provider.dart'; -import '../../../config/routes.dart'; import '../../../providers/test_results.dart'; class FormCreator extends StatefulWidget { @@ -124,8 +128,7 @@ class _FormCreatorState extends State { ), InkWell( onTap: () async { - await Navigator.of(context) - .pushNamed(Routes.captureImageScreen); + await loadAssetsFromCamera(context); // await captureImage(context); }, child: Container( @@ -589,6 +592,27 @@ class _FormCreatorState extends State { // profileProviderObject.addImage(); } + Future loadAssetsFromCamera(BuildContext context) async { + var providerObject = + Provider.of(context, listen: false); + List _catchImages = providerObject.catchImages; + var image = await ImagePicker.platform.pickImage( + source: ImageSource.camera, + ); + if (image != null) { + _catchImages.add( + PlatformFile( + path: image.path, + name: "item_image", + bytes: File(image.path).readAsBytesSync(), + size: File(image.path).lengthSync(), + ), + ); + providerObject.setCatchImages(_catchImages); + providerObject.setImages(); + } + } + // _FormCreatorState(this.formItems); void _handleChanged() { diff --git a/macos/Podfile b/macos/Podfile index c795730..96566c7 100755 --- a/macos/Podfile +++ b/macos/Podfile @@ -39,5 +39,8 @@ end post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_macos_build_settings(target) + target.build_configurations.each do |config| + config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '10.15' + end end end diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 76d2a42..ee35990 100755 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -44,6 +44,6 @@ SPEC CHECKSUMS: shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95 -PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 +PODFILE CHECKSUM: 6f49d33c4364341a4e32f6ba81035dd192444660 COCOAPODS: 1.13.0