Flutter Upload Images on FireStore Storage (original) (raw)

`import 'dart:io'; import 'package:firebase_storage/firebase_storage.dart'; import 'package:image_picker/image_picker.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart';

class RealtimeDatabaseInsert extends StatelessWidget { RealtimeDatabaseInsert({Key? key}) : super(key: key);

var nameController = new TextEditingController(); var ageController = new TextEditingController(); var dlController = new TextEditingController(); var adController = new TextEditingController(); var phnController = new TextEditingController();

final firestore = FirebaseFirestore.instance; File? _image; get data => null;

@override Widget build(BuildContext context) { return Center( child: Scaffold( body: SafeArea( child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20.0), child: Column( children: [ Text( 'Insert Driver Details', style: TextStyle(fontSize: 28), ), Text("Add Data"), Container( height: 150, width: 300, decoration: BoxDecoration( border: Border.all(color: Colors.black), borderRadius: BorderRadius.circular(20), ), child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Center( child: _image == null ? Text('No image selected.') : Image.file(_image!), ), ), ElevatedButton( onPressed: () async { final image = await ImagePicker().getImage(source: ImageSource.gallery); if (image != null) { _image = File(image.path); } }, child: Text('Select image'), ), ], ), ), ), SizedBox( height: 30, ), SizedBox( height: 50, ), TextFormField( controller: nameController, maxLength: 15, decoration: InputDecoration( labelText: 'Name', border: OutlineInputBorder( borderSide: BorderSide(color: Colors.amber))), ), SizedBox( height: 15, ), TextFormField( controller: ageController, keyboardType: TextInputType.number, decoration: InputDecoration( labelText: 'Age', border: OutlineInputBorder( borderSide: BorderSide(color: Colors.amber))), ), SizedBox( height: 15, ), TextFormField( controller: dlController, maxLength: 20, decoration: InputDecoration( labelText: 'Driving Licencse Number', border: OutlineInputBorder( borderSide: BorderSide(color: Colors.amber))), ), SizedBox( height: 15, ), TextFormField( controller: adController, decoration: InputDecoration( labelText: 'Address', border: OutlineInputBorder( borderSide: BorderSide(color: Colors.amber))), ), SizedBox( height: 15, ), TextFormField( controller: phnController, maxLength: 10, keyboardType: TextInputType.number, decoration: InputDecoration( labelText: 'Phone No.', border: OutlineInputBorder( borderSide: BorderSide(color: Colors.amber))), ), SizedBox( height: 20, ), ElevatedButton( onPressed: () async { if (nameController.text.isNotEmpty && ageController.text.isNotEmpty && dlController.text.isNotEmpty && adController.text.isNotEmpty && phnController.text.isNotEmpty && _image.toString().isNotEmpty) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text("Confirmation"), content: Text( "Are you sure you want to submit these details?"), actions: [ TextButton( child: Text( "Cancel", style: TextStyle(color: Colors.amber), ), onPressed: () { nameController.clear(); ageController.clear(); dlController.clear(); adController.clear(); phnController.clear(); Navigator.of(context).pop(); }, ), TextButton( child: Text( "Submit", style: TextStyle(color: Colors.amber), ), onPressed: () async { // Upload image file to Firebase Storage var imageName = DateTime.now().millisecondsSinceEpoch.toString(); var storageRef = FirebaseStorage.instance.ref().child('driver_images/$imageName.jpg'); var uploadTask = storageRef.putFile(_image!); var downloadUrl = await (await uploadTask).ref.getDownloadURL();

                             firestore.collection("Driver Details").add({
                               "Name": nameController.text,
                               "Age": ageController.text,
                               "Driving Licence": dlController.text,
                               "Address.": adController.text,
                               "Phone No.": phnController.text,
                               // Add image reference to document
                               "Image": downloadUrl.toString() 
                             });
                             Navigator.of(context).pop();
                             nameController.clear();
                             ageController.clear();
                             dlController.clear();
                             adController.clear();
                             phnController.clear();
                           },
                         ),
                       ],
                     );
                   },
                 );
               }
             },
             child: Text(
               "Submit Details",
             ),
             style: ElevatedButton.styleFrom(
                 backgroundColor: Colors.amber,
                 shape: RoundedRectangleBorder(
                     borderRadius: BorderRadius.circular(10))),
           )
         ],
       ),
     ),
   ),
 ),

)); } }

`