import 'dart:io'; import 'package:eatvio_app/features/create_recipe/presentation/bloc/create_recipe_cubit/create_recipe_cubit.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:image_picker/image_picker.dart'; class ImageWidget extends StatefulWidget { const ImageWidget({super.key, required this.image}); final File? image; @override State createState() => _ImageWidgetState(); } class _ImageWidgetState extends State { late final CreateRecipeCubit createRecipeCubit; @override void initState() { super.initState(); createRecipeCubit = context.read(); } @override Widget build(BuildContext context) { return GestureDetector( onTap: () { _showImagePicker(); }, child: widget.image == null ? SvgPicture.asset( width: MediaQuery.of(context).size.width - 32, 'assets/icons/upload_photo_of_portion.svg', ) : Stack( children: [ ClipRRect( borderRadius: BorderRadius.circular(20), child: Image.file( File(widget.image!.path), ), ), Positioned( right: 16, top: 16, child: GestureDetector( onTap: () { createRecipeCubit.replaceImage(null); }, child: Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( color: Colors.white, shape: BoxShape.circle, ), child: Icon(Icons.close_rounded), ), ), ), ], ), ); } _showImagePicker() { showCupertinoModalPopup( context: context, builder: (context) => CupertinoActionSheet( actions: [ CupertinoActionSheetAction( onPressed: () async { final picker = ImagePicker(); final image = await picker.pickImage(source: ImageSource.camera); setState(() {}); if (image != null) { createRecipeCubit.replaceImage(File(image.path)); createRecipeCubit.validateImage(); } Navigator.of(context).pop(); }, child: const Row( children: const [ Icon(Icons.photo_camera), SizedBox(width: 8), Text('Фото'), ], ), ), CupertinoActionSheetAction( onPressed: () async { final picker = ImagePicker(); final image = await picker.pickImage(source: ImageSource.gallery); setState(() {}); if (image != null) { createRecipeCubit.replaceImage(File(image.path)); createRecipeCubit.validateImage(); } Navigator.of(context).pop(); }, child: const Row( children: const [ Icon(Icons.photo), SizedBox(width: 8), Text('Галерея'), ], ), ), ], cancelButton: CupertinoActionSheetAction( onPressed: () => Navigator.of(context).pop(), isDestructiveAction: true, child: const Text('Отмена'), ), ), ); } }