'only when use iphone simulator

I have this error:

The following FileSystemException was thrown resolving an image codec: Cannot open file, path = '/Users/todo/Library/Developer/CoreSimulator/Devices/82205CEC-3D83-4A29-BF17-01C5B0515F71/data/Containers/Data/Application/035B9913-BEC5-46BA-84A5-8C1FE3C4E671/tmp/image_picker_B8D488A3-2790-4D53-A5D8-52E57E2C4108-76094-000003172DF085D2.jpg' (OS Error: No such file or directory, errno = 2)

When the exception was thrown, this was the stack

only when use iphone simulator while android emulator no problem

import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../app/utility.dart';
import '../db/aql_db.dart';
import '../globals.dart';
import '../menu_page.dart';
import '../model/aql_model.dart';
import '../widget/input_text.dart';
import 'dart:io';
import 'package:http/http.dart' as http;

var _current = resultsFld[0];

class AqlPg extends StatefulWidget {
  const AqlPg({Key? key}) : super(key: key);

  @override
  State<AqlPg> createState() => _AqlPgState();
}

class _AqlPgState extends State<AqlPg> {
  final List<TextEditingController> _criticalController = [];
  final List<TextEditingController> _majorController = [];
  final List<TextEditingController> _minorController = [];
  final List<TextEditingController> _imgCommintControllers = [];
  final _irController = TextEditingController();

  bool clickedCentreFAB =
      false; //boolean used to handle container animation which expands from the FAB
  int selectedIndex =
      0; //to handle which item is currently selected in the bottom app bar

  //call this method on click of each bottom app bar item to update the screen
  void updateTabSelection(int index, String buttonText) {
    setState(() {
      selectedIndex = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    //
    _irController.text = aqltbl.ir ?? '';
    String _current = aqltbl.result ?? resultsFld[0];
    //
    return Scaffold(
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: Column(
          children: [
            //---- stack for FloatingActionButton
            Stack(
              children: <Widget>[
                //this is the code for the widget container that comes from behind the floating action button (FAB)
                Align(
                  alignment: FractionalOffset.bottomCenter,
                  child: AnimatedContainer(
                    child: const Text(
                      'Hello',
                      style: TextStyle(fontSize: 18, color: whiteColor),
                    ),
                    duration: const Duration(milliseconds: 250),
                    //if clickedCentreFAB == true, the first parameter is used. If it's false, the second.
                    height: clickedCentreFAB
                        ? MediaQuery.of(context).size.height
                        : 10.0,
                    width: clickedCentreFAB
                        ? MediaQuery.of(context).size.height
                        : 10.0,
                    decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(
                            clickedCentreFAB ? 0.0 : 300.0),
                        color: Colors.blue),
                  ),
                ),
              ],
            ),

            // --- Top Page Title
            const SizedBox(
              height: 50,
            ),
            const Center(
              child: Text(
                'Aql page',
                style: TextStyle(
                    fontSize: 30,
                    fontWeight: FontWeight.bold,
                    color: medBlueColor),
              ),
            ),
            Text(
              'Shipment no:$shipmentId',
              style: const TextStyle(color: medBlueColor),
            ),

            //--- input container
            SingleChildScrollView(
              scrollDirection: Axis.horizontal,
              child: Row(
                children: [
                  Container(
                    height: 270,
                    width: 300,
                    margin: const EdgeInsets.only(top: 5),
                    child: ListView.builder(
                        itemCount: (aqltbl.aql ?? []).length,
                        scrollDirection: Axis.horizontal,
                        itemBuilder: (context, index) {
                          //here
                          var _aqlList = aqltbl.aql![index];
                          //
                          if (aqltbl.aql!.length > _criticalController.length) {
                            _criticalController.add(TextEditingController());
                            _majorController.add(TextEditingController());
                            _minorController.add(TextEditingController());
                          }
                          //
                          _criticalController[index].text =
                              _aqlList.critical ?? '';
                          _majorController[index].text = _aqlList.major ?? '';
                          _minorController[index].text = _aqlList.minor ?? '';
                          //
                          return Column(
                            children: [
                              Container(
                                height: 260,
                                width: 200,
                                margin: const EdgeInsets.only(left: 10),
                                padding: const EdgeInsets.all(10),
                                // ignore: prefer_const_constructors
                                decoration: BoxDecoration(
                                  color: lightBlue,
                                  borderRadius: BorderRadius.circular(10),
                                ),
                                child: Column(
                                  children: [
                                    Text(
                                      (_aqlList.name ?? '').toString(),
                                      style: const TextStyle(
                                        color: medBlueColor,
                                        fontSize: 13,
                                      ),
                                    ),
                                    // ignore: prefer_const_constructors
                                    MyInputField(
                                      title: 'critical',
                                      hint: 'write critical ',
                                      borderColor: borderColor,
                                      textColor: textColor,
                                      hintColor: hintColor,
                                      controller: _criticalController[index],
                                      onSubmit: (value) {
                                        setState(() {
                                          aqltbl.aql![index].critical = value;
                                          _save();
                                        });
                                      },
                                    ),
                                    MyInputField(
                                      title: 'majority',
                                      hint: 'write majority ',
                                      borderColor: borderColor,
                                      textColor: textColor,
                                      hintColor: hintColor,
                                      controller: _majorController[index],
                                      onSubmit: (value) {
                                        setState(() {
                                          aqltbl.aql![index].major = value;
                                          _save();
                                        });
                                      },
                                    ),
                                    MyInputField(
                                      title: 'minority',
                                      hint: 'write minority ',
                                      borderColor: borderColor,
                                      textColor: textColor,
                                      hintColor: hintColor,
                                      controller: _minorController[index],
                                      onSubmit: (value) {
                                        setState(() {
                                          aqltbl.aql![index].minor = value;
                                          _save();
                                        });
                                      },
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          );
                        }),
                  ),
                  Container(
                    height: 270,
                    width: 300,
                    margin: const EdgeInsets.only(right: 10, left: 20),
                    padding: const EdgeInsets.only(
                        left: 10, bottom: 3, right: 10, top: 5),
                    decoration: const BoxDecoration(
                      color: lightBlue,
                    ),
                    child: Column(
                      children: [
                        const Text(
                          'Summery results',
                          style: TextStyle(color: medBlueColor),
                        ),
                        Container(
                          margin: const EdgeInsets.only(top: 10, bottom: 5),
                          alignment: Alignment.centerLeft,
                          child: const Text(
                            'Results',
                            style: TextStyle(color: medBlueColor),
                          ),
                        ),

                        Container(
                          padding: const EdgeInsets.only(right: 5, left: 5),
                          decoration: BoxDecoration(
                              color: whiteColor,
                              borderRadius: BorderRadius.circular(10),
                              border: Border.all(
                                color: borderColor,
                              )),
                          child: DropdownButtonHideUnderline(
                            child: DropdownButton<String>(
                              focusColor: whiteColor,
                              value: aqltbl.result,
                              hint: const Text('select result'),
                              isExpanded: true,
                              iconSize: 36,
                              icon: const Icon(Icons.arrow_drop_down),
                              items: resultsFld.map((res) {
                                return DropdownMenuItem<String>(
                                  value: res,
                                  child: Text(
                                    res,
                                    style: const TextStyle(
                                        fontFamily: 'tajawal',
                                        fontSize: 15,
                                        color: medBlueColor),
                                  ),
                                );
                              }).toList(),
                              onChanged: (val) {
                                setState(() {
                                  aqltbl.result = val;
                                });
                                _save();
                              },
                            ),
                          ),
                        ),
                        // aqltbl.result = selRes;
                        MyInputField(
                          width: 300,
                          title: 'information remarks (ir)',
                          hint: '',
                          maxLines: 3,
                          borderColor: borderColor,
                          textColor: textColor,
                          hintColor: hintColor,
                          controller: _irController,
                          onSubmit: (value) {
                            aqltbl.ir = value;
                            _save();
                          },
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            ),
            //Images Container
            Container(
              height: 400,
              padding: const EdgeInsets.all(0),
              margin: const EdgeInsets.only(bottom: 10, left: 10),
              decoration: const BoxDecoration(color: lightGrey),
              child: (aqltbl.images ?? []).isEmpty
                  ? Column(
                      children: [
                        Image.asset(
                          'images/empty-photo.jpg',
                          height: 300,
                        ),
                        Container(
                            margin: const EdgeInsets.only(top: 10),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: const [
                                Text('Click'),
                                Text(
                                  'Camera button',
                                  style: TextStyle(fontWeight: FontWeight.bold),
                                ),
                                Text(' to add new photo'),
                              ],
                            )),
                      ],
                    )
                  : ListView.builder(
                      scrollDirection: Axis.horizontal,
                      itemCount: (aqltbl.images ?? []).length,
                      itemBuilder: (context, imgIndex) {
                        String? _image =
                            (aqltbl.images ?? [])[imgIndex].name.toString();
                        inspect('aql image file');
                        File(_image).exists() == true
                            ? inspect('image exist')
                            : inspect('not exist: ' + _image);
                        inspect('_image: ' + _image);
                        if (aqltbl.images!.length >
                            _imgCommintControllers.length) {
                          _imgCommintControllers.add(TextEditingController());
                        }
                        _imgCommintControllers[imgIndex].text =
                            aqltbl.images![imgIndex].imgComment!;

                        inspect(_imgCommintControllers.length);

                        return Container(
                            margin: const EdgeInsets.only(left: 5),
                            height: 300,
                            child: Column(
                              children: [
                                Stack(
                                  children: [
                                    Image.file(
                                      File(_image),
                                      height: 300,
                                    ),
                                    Container(
                                      decoration: const BoxDecoration(
                                        color: medBlueColor,
                                      ),
                                      child: IconButton(
                                          onPressed: () {
                                            inspect('clear');
                                            String imgName =
                                                aqltbl.images![imgIndex].name ??
                                                    '';
                                            aqltbl.images!.removeAt(imgIndex);
                                            // aqltbl.images!.removeWhere(
                                            //     (item) => item.name == imgName);
                                            _imgCommintControllers
                                                .removeAt(imgIndex);
                                            setState(() {});
                                          },
                                          color: whiteColor,
                                          icon: const Icon(Icons.clear)),
                                    )
                                  ],
                                ),
                                MyInputField(
                                  title: 'Write remarks about image',
                                  hint: '',
                                  controller: _imgCommintControllers[imgIndex],
                                  onSubmit: (value) {
                                    aqltbl.images![imgIndex].imgComment = value;
                                    aqltbl.images![imgIndex].name = _image;
                                    _save();
                                  },
                                ),
                              ],
                            ));
                      }),
            ),
          ],
        ),
      ),
      // --- FloatingActionButton
      floatingActionButtonLocation: FloatingActionButtonLocation
          .centerDocked, //specify the location of the FAB
      floatingActionButton: FloatingActionButton(
        backgroundColor: medBlueColor,
        onPressed: () {
          inspect(aqltbl);
          setState(() {
            clickedCentreFAB =
                !clickedCentreFAB; //to update the animated container
          });
        },
        tooltip: "Centre FAB",
        child: Container(
          margin: const EdgeInsets.all(15.0),
          child: const Icon(Icons.send),
        ),
        elevation: 4.0,
      ),

      // --- bottom action bar
      bottomNavigationBar: BottomAppBar(
        child: Container(
          margin: const EdgeInsets.only(left: 12.0, right: 12.0),
          child: Row(
            mainAxisSize: MainAxisSize.max,
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              //to leave space in between the bottom app bar items and below the FAB
              IconButton(
                //update the bottom app bar view each time an item is clicked
                onPressed: () {
                  // updateTabSelection(0, "Home");
                  Get.to(const MainMenu());
                },
                iconSize: 27.0,
                icon: Image.asset(
                  'images/logo.png',
                  color: medBlueColor,
                ),
              ),

              const SizedBox(
                width: 50.0,
              ),
              IconButton(
                onPressed: () async {
                  // updateTabSelection(2, "Incoming");
                  await _takeImage('gallery');
                },
                iconSize: 27.0,
                icon: const Icon(
                  Icons.image_outlined,
                  color: medBlueColor,
                ),
              ),
              IconButton(
                onPressed: () async {
                  // updateTabSelection(1, "Outgoing");
                  await _takeImage('camera');
                },
                iconSize: 27.0,
                icon: const Icon(
                  Icons.camera_alt,
                  color: medBlueColor,
                ),
              ),
            ],
          ),
        ),
        //to add a space between the FAB and BottomAppBar
        shape: const CircularNotchedRectangle(),
        //color of the BottomAppBar
        color: Colors.white,
      ),
    );
  }

  _save() {
    inspect('submit');
    saveAql(shipmentId, aqltbl);
    box.write('aql'+shipmentId.toString(), aqltbl);
  }

  _takeImage(method) async {
    String _imgPath = await imageFromDevice(method);
    if (_imgPath != empty) {
      ImagesModel imgMdl = ImagesModel();
      imgMdl.name = _imgPath;
      imgMdl.imgComment = '';
      if (aqltbl.images != null) {
        // _saveLocaly(close: 0);
        setState(() {
          aqltbl.images!.add(imgMdl);
          _save();
        });
      }
    }
  }

  Future _sendAqlToServer() async {
    try {
      var response = await http.post(urlSendProductPhoto, body: {
        'aql': json.encode(aqltbl).toString(),
        'id': shipmentId.toString(),
      });
      if (response.statusCode == 200) {
        Get.snackbar('Success', 'Image successfully uploaded');
        return response.body;
      } else {
        Get.snackbar('Fail', 'Image not uploaded');
        inspect('Request failed with status: ${response.statusCode}.');
        return 'empty';
      }
    } catch (socketException) {
      Get.snackbar('warning', 'Image not uploaded');
      return 'empty';
    }
  }


}


 
 


Solution 1:[1]

Try following the path that it is saying it cannot find in your computer, I had a similar issue, I tried opening an Iphone 12 instead of an Iphone 13 and it worked out the issue, my problem was I inadvertently deleted a few files I shouldn't have.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 flutterloop