// // Automatic FlutterFlow imports // import '/backend/schema/structs/index.dart'; // import '/backend/schema/enums/enums.dart'; // import '/flutter_flow/flutter_flow_theme.dart'; // import '/flutter_flow/flutter_flow_util.dart'; // import 'index.dart'; // Imports other custom widgets // import '/custom_code/actions/index.dart'; // Imports custom actions // import '/flutter_flow/custom_functions.dart'; // Imports custom functions // import 'package:flutter/material.dart'; // // Begin custom widget code // // DO NOT REMOVE OR MODIFY THE CODE ABOVE! // import 'package:crop_your_image/crop_your_image.dart'; // import 'package:google_fonts/google_fonts.dart'; // import '/backend/firebase_storage/base_storage.dart'; // ///////////////// // class ImageCropper extends StatefulWidget { // const ImageCropper({ // super.key, // this.width, // this.height, // this.imageFile, // this.callBackAction, // this.currentUserId, // }); // final double? width; // final double? height; // final FFUploadedFile? imageFile; // final Future Function(String? url)? callBackAction; // final String? currentUserId; // @override // State createState() => _ImageCropperState(); // } // class _ImageCropperState extends State { // bool loading = false; // final _crop_controller = CropController(); // @override // Widget build(BuildContext context) { // return Stack( // children: [ // Column( // mainAxisSize: MainAxisSize.min, // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Container( // width: widget.width ?? double.infinity, // height: (widget.height ?? 555) - 80, // child: Center( // child: Crop( // image: Uint8List.fromList(widget.imageFile!.bytes!), // controller: _crop_controller, // onCropped: (image) async { // final path = _getStoragePath(_firebasePathPrefix(), // widget.imageFile!.name!, false, 0); // uploadData(path, image).then((value) { // widget.callBackAction!.call(value!); // loading = false; // }); // // add error handling here // }, // aspectRatio: 1 / 1, // initialSize: 0.5, // // initialArea: Rect.fromLTWH(240, 212, 800, 600),\ // //initialAreaBuilder: (rect) => Rect.fromLTRB(rect.left + 80, rect.top + 80, rect.right - 80, rect.bottom - 80), // withCircleUi: true, // baseColor: Color.fromARGB(255, 0, 3, 22), // maskColor: Colors.white.withAlpha(100), // radius: 20, // onMoved: (newRect) { // // do something with current cropping area. // }, // onStatusChanged: (status) { // // do something with current CropStatus // }, // cornerDotBuilder: (size, edgeAlignment) => // const DotControl(color: Colors.white), // interactive: true, // // fixArea: true, // ))), // Padding( // padding: EdgeInsetsDirectional.fromSTEB(8, 5, 8, 5), // child: ElevatedButton( // onPressed: () async { // if (!loading) { // setState(() { // loading = true; // }); // _crop_controller.crop(); // //widget.loading = true; // } // }, // style: ButtonStyle( // backgroundColor: MaterialStateProperty.all( // FlutterFlowTheme.of(context).primaryColor, // ), // padding: MaterialStateProperty.all( // EdgeInsets.zero, // ), // shape: MaterialStateProperty.all( // RoundedRectangleBorder( // borderRadius: BorderRadius.circular(100), // side: BorderSide.none, // ), // ), // ), // child: Container( // width: 250, // height: 50, // alignment: Alignment.center, // child: loading // ? CircularProgressIndicator( // valueColor: // AlwaysStoppedAnimation(Colors.white), // ) // : Text( // 'Crop', // style: FlutterFlowTheme.of(context) // .subtitle2 // .override( // fontFamily: 'Lexend', // color: Colors.white, // fontSize: 16, // fontWeight: FontWeight.normal, // useGoogleFonts: GoogleFonts.asMap() // .containsKey( // FlutterFlowTheme.of(context) // .subtitle2Family), // ), // ), // ), // )), // ]), // Positioned( // top: 4, // right: 4, // child: IconButton( // icon: Icon(Icons.close), // onPressed: () => Navigator.pop(context), // )) // ], // ); // } // String _getStoragePath( // String? pathPrefix, // String filePath, // bool isVideo, [ // int? index, // ]) { // pathPrefix ??= _firebasePathPrefix(); // pathPrefix = _removeTrailingSlash(pathPrefix); // final timestamp = DateTime.now().microsecondsSinceEpoch; // final prefix = 'cropped-'; // // Workaround fixed by https://github.com/flutter/plugins/pull/3685 // // (not yet in stable). // final ext = isVideo ? 'mp4' : filePath.split('.').last; // final indexStr = index != null ? '_$index' : ''; // return '$pathPrefix/$prefix$timestamp$indexStr.$ext'; // } // String? _removeTrailingSlash(String? path) => // path != null && path.endsWith('/') // ? path.substring(0, path.length - 1) // : path; // String _firebasePathPrefix() => 'users/${widget.currentUserId}/uploads'; // } // // Set your widget name, define your parameter, and then add the // // boilerplate code using the green button on the right!