send multiple image files to firebase storage

327 views
Skip to first unread message

palak pandey

unread,
Jan 28, 2021, 6:31:09 AM1/28/21
to Flutter Development (flutter-dev)
greeting to all,
i want to send multiple image path to firebase for which I am using a multi-image picker.

i am able to get the path and display it in the console but when I send more than one image file to the backend it shows an error.

below is the code that I have used -:
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'dart:io';
import 'package:multi_image_picker/multi_image_picker.dart';
import 'dart:async';
import 'package:flutter_absolute_path/flutter_absolute_path.dart';





class PhotoSelectPage extends StatefulWidget {
@override
_PhotoSelectPageState createState() => _PhotoSelectPageState();
}

class _PhotoSelectPageState extends State<PhotoSelectPage> {

//==========================================================================image picker and store

List<Asset> images = List<Asset>();
List files = [];
List resultList = [];

var data;
String _error = 'No Error Dectected';

@override
void initState() {
super.initState();
}


//============================================================to show image in a grid view
Widget buildGridView() {
if (images != null) {
return GridView.count(
crossAxisCount: 3,
children: List.generate(images.length, (index) {
Asset asset = images[index];
print(asset.getByteData(quality: 100));
return Padding(
padding: EdgeInsets.all(8),
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(20)),
child: AssetThumb(
asset: asset,
width: 300,
height: 300,
),
),
);
}),
);
}
else{
return Container();
}
}




//============================================================to load multiple image from assets
Future<void> loadAssets() async {
List<Asset> resultList = List<Asset>();
String error = 'No Error Dectected';

try {
resultList = await MultiImagePicker.pickImages(
maxImages: 6,
enableCamera: true,
selectedAssets: images,
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"),
materialOptions: MaterialOptions(
actionBarColor: "#abcdef",
actionBarTitle: "Choose Image",
allViewTitle: "All Photos",
useDetailsView: false,
selectCircleStrokeColor: "#000000",
),
);
} on Exception catch (e) {
error = e.toString();
}
if (!mounted) return;

setState(() {
images = resultList;
_error = error;
});
}


//===============================================================convert image to file and get the path
getImagePathFromAsset(String path) async{
final file = File(path);
return file;
}


//=============================================================get and send the file to the backend

_submit() async {
for (int i = 0; i < images.length; i++) {
var path2 =
await FlutterAbsolutePath.getAbsolutePath(images[i].identifier);
var file = await getImagePathFromAsset(path2);
var base64Image = base64Encode(file.readAsBytesSync());
files.add(base64Image);
data = {
'files': files,
};


print(data);

FirebaseFirestore firestore = FirebaseFirestore.instance;

firestore.collection("users").doc('41345').set(
{
"image" : data,
}).then((_){
print("success!");
});

}
}


@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.deepOrange[400],
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.pinkAccent, Colors.deepOrange[400]])),
child: Padding(
padding: EdgeInsets.only(left: 30, right: 30, top: 15),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
InkWell(
child: Container(
height: 90,
child: ListView.builder(
itemCount: 1,
itemBuilder: (context, index) {
return Column(
children: [
buildList('Camera Roll'),
],
);
},
),
),
),


images.isEmpty ? Container(height: 0,) :
Container(
height: MediaQuery.of(context).size.height/5,
child: buildGridView(),
),


Padding(
padding: EdgeInsets.only(top: 20, bottom: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
child: Text(
'Skip',
style: TextStyle(color: Colors.black, fontSize: 20),
),
onTap: () {
_submit();
},
),
FabButton(
icon: Icons.arrow_forward_ios_outlined,
Iconcolor: Colors.deepOrange,
onpresses: () async{
loadAssets();  
}

},
),
],
),
),

],
),
),
),
),
);
}





Widget buildList(String text) {
return ListTile(
title: Text(
text,
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.w600,
),
),
trailing: Radio(
value: text,
activeColor: Colors.white,
focusColor: Colors.white,
groupValue: selectedvalue,
onChanged: (newvalue) {
setState(() {
selectedvalue = newvalue;
print(selectedvalue);
});
},
),
);
}
}

i don't know why this is not working for more than one image.
can anyone help me with this?


Suzuki Tomohiro

unread,
Jan 28, 2021, 7:36:00 AM1/28/21
to palak pandey, Flutter Development (flutter-dev)
What error?

--
You received this message because you are subscribed to the Google Groups "Flutter Development (flutter-dev)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to flutter-dev...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/flutter-dev/bf031431-0d2d-43c4-aaf5-1d90fb8bc177n%40googlegroups.com.

palak pandey

unread,
Jan 28, 2021, 8:02:47 AM1/28/21
to Flutter Development (flutter-dev)
previously it was working for a single image path but now it's not working but when I print the path it is printed on the console.
below is the error -:


E/RecyclerView( 9846): No adapter attached; skipping layout
E/RecyclerView( 9846): No adapter attached; skipping layout
I/flutter ( 9846): Instance of 'Future<ByteData>'
I/mple.hitch_fun( 9846): NativeAlloc concurrent copying GC freed 24087(1085KB) AllocSpace objects, 43(10MB) LOS objects, 49% free, 6748KB/13MB, paused 1.588ms total 148.357ms
I/mple.hitch_fun( 9846): Background concurrent copying GC freed 7212(365KB) AllocSpace objects, 2(6152KB) LOS objects, 49% free, 14MB/28MB, paused 749us total 107.643ms
I/flutter ( 9846): {files: [/9j/4AAQSkZJRgABAQEASABIAAD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAElYAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////bAIQAAgMDAwQDBAUFBAYGBgYGCAgHBwgIDQkKCQoJDRMMDgwMDgwTERQRDxEUER4YFRUYHiMdHB0jKiUlKjUyNUVFXAECAwMDBAMEBQUEBgYGBgYICAcHCAgNCQoJCgkNEwwODAwODBMRFBEPERQRHhgVFRgeIx0cHSMqJSUqNTI1RUVc/8IAEQgXOA4qAwEiAAIRAQMRAf/EAB4AAAIDAQEBAQEBAAAAAAAAAAMEAgUGAQcACAkK/9oACAEBAAAAAP4VMm
W/DynamiteModule( 9846): Local module descriptor class for providerinstaller not found.
I/DynamiteModule( 9846): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller( 9846): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
I/mple.hitch_fun( 9846): Background concurrent copying GC freed 2127(237KB) AllocSpace objects, 5(18MB) LOS objects, 49% free, 10MB/21MB, paused 2.915ms total 100.958ms
W/Firestore( 9846): (22.0.1) [WriteStream]: (aa5c5d6) Stream closed with status: Status{code=INVALID_ARGUMENT, description=Property name contains an invalid nested entity., cause=null}.
E/flutter ( 9846): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: [cloud_firestore/invalid-argument] Client specified an invalid argument. Note that this differs from failed-precondition. invalid-argument indicates arguments that are problematic regardless of the state of the system (e.g., an invalid field name).
E/flutter ( 9846): #0      MethodChannelDocumentReference.set (package:cloud_firestore_platform_interface/src/method_channel/method_channel_document_reference.dart:43:7)
E/flutter ( 9846): <asynchronous suspension>
E/flutter ( 9846): #1      DocumentReference.set (package:cloud_firestore/src/document_reference.dart:78:22)
E/flutter ( 9846): #2      _PhotoSelectPageState._submit (package:hitch_fun1/Register_Options_Screens/PhotoSelect_Screen.dart:136:50)
E/flutter ( 9846): <asynchronous suspension>
E/flutter ( 9846): #3      _PhotoSelectPageState.build.<anonymous closure> (package:hitch_fun1/Register_Options_Screens/PhotoSelect_Screen.dart:322:27)
E/flutter ( 9846): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
E/flutter ( 9846): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
E/flutter ( 9846): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
E/flutter ( 9846): #7      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
E/flutter ( 9846): #8      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
E/flutter ( 9846): #9      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:259:7)
E/flutter ( 9846): #10     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
E/flutter ( 9846): #11     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:362:20)
E/flutter ( 9846): #12     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
E/flutter ( 9846): #13     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
E/flutter ( 9846): #14     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
E/flutter ( 9846): #15     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
E/flutter ( 9846): #16     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
E/flutter ( 9846): #17     _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter ( 9846): #18     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 9846): #19     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 9846): #20     _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter ( 9846): #21     _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
E/flutter ( 9846): 

Suzuki Tomohiro

unread,
Jan 28, 2021, 8:17:45 AM1/28/21
to Flutter Development (flutter-dev)
Client specified an invalid argument. Note that this differs from failed-precondition. invalid-argument indicates arguments that are problematic regardless of the state of the system (e.g., an invalid field name).

Do you think of anything?

What is code diff between working code and non-working code?


Reply all
Reply to author
Forward
0 new messages