Flutter form builder - FormBuilderImagePicker

621

According to the package's Changelog for version [4.2.0] (Dec 29, 2020) (see screenshot), the developers "Removed image picker field from package - moved to a separate form_builder_image_picker package."

screenshot of package changelog

If you're in a hurry, a quick option is to use an earlier version of the package, BUT that's not a great long-term solution, so you'll probably want to properly implement the updated versions.

Share:
621
leshugo33
Author by

leshugo33

I code so my dog can have treats

Updated on December 26, 2022

Comments

  • leshugo33
    leshugo33 over 1 year

    I'm letting my users upload an image to my app, from gallery or using the camera. Then the image is stored as a string on SQflite database

    FormBuilderImagePicker(
      name: 'photo',
      decoration: InputDecoration(labelText: 'Upload Image'),
      maxImages: 1,
      onSaved:(val){
        try{
          selectedImg = val.first;
          imageBytes = selectedImg.readAsBytesSync(); // convert to bytes
          base64Image = base64Encode(imageBytes); // convert to string
          object.photo = base64Image;
        }catch(e){
          print(e);
        }
      }
    ),
    

    this code was working fine on flutter_form_builder v3, now after migrating to v4 the value of val never updates to the selected image because i'm getting the following error:

    E/flutter (24620): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The getter 'iterator' was called on null.
    E/flutter (24620): Receiver: null
    E/flutter (24620): Tried calling: iterator
    
    E/flutter (24620): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
    E/flutter (24620): #1      new FormBuilderImagePicker.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter_form_builder/src/fields/form_builder_image_picker.dart:187:58)
    E/flutter (24620): #2      _ImageSourceBottomSheetState._onPickImage (package:flutter_form_builder/src/widgets/image_source_sheet.dart:89:33)
    E/flutter (24620): <asynchronous suspension>
    E/flutter (24620): #3      _ImageSourceBottomSheetState.build.<anonymous closure> (package:flutter_form_builder/src/widgets/image_source_sheet.dart:111:28)
    E/flutter (24620): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
    E/flutter (24620): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
    E/flutter (24620): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
    E/flutter (24620): #7      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
    E/flutter (24620): #8      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
    E/flutter (24620): #9      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:259:7)
    E/flutter (24620): #10     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
    E/flutter (24620): #11     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:362:20)
    E/flutter (24620): #12     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
    E/flutter (24620): #13     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
    E/flutter (24620): #14     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
    E/flutter (24620): #15     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
    E/flutter (24620): #16     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
    E/flutter (24620): #17     _rootRunUnary (dart:async/zone.dart:1206:13)
    E/flutter (24620): #18     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
    E/flutter (24620): #19     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
    E/flutter (24620): #20     _invoke1 (dart:ui/hooks.dart:265:10)
    E/flutter (24620): #21     _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
    

    i've been trying to debug this for a couple hours now to no success, any help would be appreciated!

    • Taha Malik
      Taha Malik over 3 years
      Are you sure val is not null? Also, Were you able to catch this exception in catch block?
    • leshugo33
      leshugo33 over 3 years
      in every other form field the value of val gets updated on change without problem, and yes the catch was working as intended but again, on v3 of the package.
    • leshugo33
      leshugo33 over 3 years
      So I find a way: It seems that now you have to set the FormBuilderImagePicker initialValue: [], for it to work