При попытке зарегистрировать пользователя я получаю неожиданную ошибку?

# #firebase #flutter #dart #assets

Вопрос:

В моей базе данных есть свойство, которое я назвал url . И в этом я хочу сохранить строку, которую пользователь может обновить с помощью изображения, но вот моя проблема . При регистрации, когда я сохраняю данные пользователя, включая URL-адрес .Я не разрешаю пользователю загружать фотографию . Этот процесс можно выполнить внутри приложения. Но чтобы показать изображение по умолчанию, я должен загрузить URL-адрес со строкой . Я хочу показать изображение актива, но не знаю, что я делаю не так . Так что, может быть, кто-нибудь сможет помочь.

вот мое изображение :

 assets:
      - assets/profilepictureer.png
 

И свойство, в котором я хочу сохранить путь или, может быть, что-то еще, что имеет смысл, вызывает «url» в базе данных.

вот мой метод регистрации :

  Future signUp(String email, String fullname,String password,String url,String username) async {
    try {
      UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
      result.user?.sendEmailVerification();
       User user = result?.user;
      await DatbaseService(uid: user.uid).updateUserData(email, fullname, password,url,username);
      return _userFromFirebaseUser(user);
      //user.sendEmailVerification();
      //( await DatbaseService(uid:user).updateUserData('0','new crew member','100','dfdssf')).user.uid;;
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case 'invalid-email':
          {
            return 'Email is not valid';
          }
        case 'user-disabled':
          {
            return 'Account is not active';
          }
        case 'user-not-found':
          {
            return 'No user found';
          }
        case 'wrong-password':
          {
            return 'wrong password';
          }
        default:
          {
            return 'Unexpected error!';
          }
          return null;
      }
    }
  }
 

И вот как я загружаю название изображения в firebase :

   onPressed: () async {

            if (_formKey.currentState.validate()) {
url=  "image1";
              String authError = await _auth.signUp(email,fullname,password,url,username);
              if (authError != null) {
                setState(() => jawoll = true);
                setState(() => error = authError);
              }else{
                setState(() => loading = true);
                setState(() => jawoll = false);
               Navigator.of(context).pushReplacement(
                    MaterialPageRoute(builder: (context) =>VerifyScreen()));
                setState(() => error = "Email send to $email");

              }
            }
          }),
    );
  }
 

And then I wanna use it like that in my method :

  String img1= "image1";
 
   decoration: BoxDecoration(
                              color: Colors.white,
                            ),
                            child: _pickedImage != null
                                ? Image.file(
                              _pickedImage,
                              fit: BoxFit.cover,
                            )
                                : userData.url != null amp;amp; userData.url != "image1"
                                ? Image.network(
                              userData.url,
                              fit: BoxFit.cover,
                            )
                                : Image.asset('assets/$img1.png'),// Your widget is here when image is no available.
                          ),

                        ),
                        decoration: new BoxDecoration(
                            shape: BoxShape.circle,
                            border:new Border.all(
                                color:Colors.black,
                                width: 5
                            )
                        ),
                  ),
 

Но при попытке зарегистрировать пользователя я получаю неожиданную ошибку, И консоль выглядит так :

 Performing hot restart...
Syncing files to device sdk gphone x86 arm...
Restarted application in 1.939ms.
W/DynamiteModule(11321): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(11321): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(11321): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
W/IInputConnectionWrapper(11321): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(11321): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(11321): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(11321): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11321): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(11321): endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11321): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(11321): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(11321): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11321): endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11321): setComposingRegion on inactive InputConnection
W/IInputConnectionWrapper(11321): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(11321): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(11321): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11321): endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(11321): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(11321): getTextAfterCursor on inactive InputConnection
W/System  (11321): Ignoring header X-Firebase-Locale because its value was null.
 

И в заголовке ingnoring написано, что это означает отсутствие ошибки, но почему я получаю эту ошибку ????

Ответ №1:

вы не сможете легко создать URL-адрес из изображения актива, если предварительно не загрузите его в firebase. Я бы предложил справиться с этим на стороне приложения просто с помощью чего-то вроде этого

 if(firebaseImage != null){
  //if firebase image exists, dislay it
  FirebaseImage(...)
} else {
  //if no image was uloaded yet, show asset placeholder
  AssetImage('assets/profilepictureer.png')
}
 

Если ваша проблема связана с загрузкой ресурсов изображений в firebase, вы можете следовать этому руководству

изменить: вы можете загрузить изображение-заполнитель один раз вручную и каждый раз использовать один и тот же URL-адрес во время регистрации в качестве URL-адреса изображения-заполнителя

Комментарии:

1. Я попробовал именно это -. но обнаружена ошибка, в которой говорится, что url-адрес был вызван с нулевым значением, потому что он равен нулю, поэтому теперь я попытался загрузить имя строки, которое затем отобразится на изображении ресурсов, Пожалуйста, проверьте мой код, чтобы вы могли понять, что я имею в виду . Но чего я не понимаю, я получаю неожиданную ошибку, и консоль выглядит чистой . Я обновлю свой пост через несколько секунд, пожалуйста, проверьте .

2. первое, что я вижу, это проблема с firebase, похожая на эту github.com/FirebaseExtended/flutterfire/issues/4447

3. Да, но на странице, которую вы мне прислали, не было реального решения, не так ли ?