# #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. Да, но на странице, которую вы мне прислали, не было реального решения, не так ли ?