Галерея не откроется при загрузке изображения, нажав кнопку flutter

#android #flutter #dart

#Android #flutter #dart

Вопрос:

Я пытаюсь создать страницу регистрации, когда пользователь должен загрузить файл изображения. Я использовал await ImagePicker.pickImage(источник: ImageSource.gallery); Но когда я загружаю свое приложение на свое устройство, при нажатии кнопки моя галерея открывается, я попытался заменить .pickImage() на getImage(), и все же у меня та же проблема. мой код

 import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:e_shop/Widgets/customTextField.dart';
import 'package:e_shop/DialogBox/errorDialog.dart';
import 'package:e_shop/DialogBox/loadingDialog.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image/image.dart';
import 'package:image_picker/image_picker.dart';
import '../Store/storehome.dart';
import 'package:e_shop/Config/config.dart';



class Register extends StatefulWidget {
  @override
  _RegisterState createState() => _RegisterState();
}



class _RegisterState extends State<Register>
{
  // '_' (underscrore is use to make the variables private
  final TextEditingController _nametextEditingController = TextEditingController();
  final TextEditingController _emailtextEditingController = TextEditingController();
  final TextEditingController _passwordtextEditingController = TextEditingController();
  final TextEditingController _cPasswordtextEditingController = TextEditingController();
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  String userImageUrl = "";
  File _imageFile;
  @override
  Widget build(BuildContext context) {
    double _screenWidth = MediaQuery.of(context).size.width, _screenHeight =MediaQuery.of(context).size.height;
    return SingleChildScrollView(
      child: Container(
        child: Column(
          mainAxisSize: MainAxisSize.max ,

          children: [
            SizedBox(height: 10.0,),
            InkWell(
              onTap: ()=> _selectAndPickImage,
              child: CircleAvatar(
                radius: _screenWidth * 0.15,
                backgroundColor: Colors.white,
                backgroundImage: _imageFile==null ? null : FileImage(_imageFile),
                child: _imageFile == null
                    ? Icon(Icons.add_photo_alternate , size:_screenWidth * 0.15 , color :Colors.grey,)
                    : null,

              ),
            ),
            SizedBox(height: 8.0,),
            Form(
              key: _formKey,
              child: Column(
                children: [
                  CustomTextField(
                    controller: _nametextEditingController,
                    data: Icons.person,
                    hintText:"Name" ,
                    isObsecure:false ,
                  ),
                  CustomTextField(
                    controller: _emailtextEditingController,
                    data: Icons.email,
                    hintText:"Email" ,
                    isObsecure:false ,
                  ),
                  CustomTextField(
                    controller: _passwordtextEditingController,
                    data: Icons.lock,
                    hintText:"Password" ,
                    isObsecure:true ,
                  ),
                  CustomTextField(
                    controller: _cPasswordtextEditingController,
                    data: Icons.lock,
                    hintText:"Confirm Password" ,
                    isObsecure:true ,
                  ),
                ],
              ) ,
            ),
            RaisedButton(
                onPressed:() { uploadAndSaveImage();},
              color:Colors.pink ,
              child: Text("Sign up", style: TextStyle(color:Colors.white ),),
            ),
            SizedBox(
              height: 30.0,
            ),
            Container(
              height: 4.0,
              width: _screenWidth *0.8,
              color: Colors.pink,
            ),
            SizedBox(
              height: 15.0,
            ),
          ],
        ),
      ),
    );
  }
 Future<void>  _selectAndPickImage() async
  {
    _imageFile =  await ImagePicker.pickImage(source: ImageSource.gallery);
  }
  Future<void> uploadAndSaveImage() async
  {
    if(_imageFile == null)
      {
        showDialog(
            context: context,
          builder: (c)
            {
              return ErrorAlertDialog(message: "Please select an image",);
            }
        );
      }
    else
      {
        _passwordtextEditingController.text == _cPasswordtextEditingController.text
            ? _emailtextEditingController.text.isNotEmpty amp;amp;
            _passwordtextEditingController.text.isNotEmpty amp;amp;
            _cPasswordtextEditingController.text.isNotEmpty amp;amp;
            _nametextEditingController.text.isNotEmpty
            ? uploadToStorage()
            :displayDialog("Please fill up the complete form to register")
            :displayDialog("Password do not match.");
      }
  }
  displayDialog(String msg)
  {
    showDialog(
        context:context,
      builder: (c)
        {
          return ErrorAlertDialog(message: msg,);
        }
    );
  }
  uploadToStorage() async
  {
  showDialog(
      context: context,
    builder: (c)
      {
        return LoadingAlertDialog(message: "Authenticating, Please wait....",);

      }
  );
  String imageFileName = DateTime.now().millisecondsSinceEpoch.toString();
  StorageReference storageReference = FirebaseStorage.instance.ref().child(imageFileName);
  StorageUploadTask storageUploadTask = storageReference.putFile(_imageFile);
  StorageTaskSnapshot taskSnapshot = await storageUploadTask.onComplete;
  await taskSnapshot.ref.getDownloadURL().then((urlImage){
userImageUrl = urlImage;
 _registerUser();
  });
  }
  FirebaseAuth _auth = FirebaseAuth.instance;
 void  _registerUser() async
  {
FirebaseUser firebaseUser;
await _auth.createUserWithEmailAndPassword
  (
    email: _emailtextEditingController.text.trim(),
    password: _passwordtextEditingController.text.trim(),
  ).then((auth){
    firebaseUser= auth.user;
}).catchError((error){
  Navigator.pop(context);
  showDialog(
      context: context,
          builder: (c){
        return ErrorAlertDialog(message: error.message.toString(),);
  });
});
if(firebaseUser != null)
  {
    saveUserInfoToFireStore(firebaseUser).then((value) {
      Navigator.pop(context);
      Route route = MaterialPageRoute(builder: (c) => StoreHome());
      Navigator.pushReplacement(context, route);
    });
  }
  }
  Future saveUserInfoToFireStore(fUser) async
  {
  Firestore.instance.collection("users").document(fUser.uid).setData({
    "uid": fUser.uid,
    "email": fUser.email,
   "name": _nametextEditingController.text.trim(),
   "url": userImageUrl,

  });
  
  await EcommerceApp.sharedPreferences.setString("uid", fUser.uid);
  await EcommerceApp.sharedPreferences.setString(EcommerceApp.userEmail, fUser.email);
  await EcommerceApp.sharedPreferences.setString(EcommerceApp.userName, _nametextEditingController.text);
  await EcommerceApp.sharedPreferences.setString(EcommerceApp.userAvatarUrl, userImageUrl);
  await EcommerceApp.sharedPreferences.setStringList(EcommerceApp.userCartList,["garbageValue"] );

  }
}