我在使用flutter从firestorefirebase获取图像时遇到了一个问题



我尝试在底部导航栏添加用户的用户图像我已经创建了变量名inituserimage和它的getter但是inituserimage没有将从firestore获取的图像的完整url作为链接存储,以便可以加载。

我正在从firebase获取这个文件中的数据

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:straydogs/screens/LandingPage/landingUtils.dart';
import 'package:straydogs/services/Authentication.dart';
class FirebaseOperations with ChangeNotifier {
late UploadTask imageUploadTask;
late String initUserEmail, initUserName;
late String initUserImage;
String get getInitUserName => initUserName;
String get getInitUserEmail => initUserEmail;
String get getInitUserImage => initUserImage;
Future uploadUserAvatar(BuildContext context) async {
Reference imageReference = FirebaseStorage.instance.ref().child(
'userProfileAvatar/${Provider.of<LandingUtils>(context, listen: false).getUserAvatar.path}/${TimeOfDay.now()}');
imageUploadTask = imageReference.putFile(
Provider.of<LandingUtils>(context, listen: false).getUserAvatar);
await imageUploadTask.whenComplete(() {
print('Image Uploaded');
});
imageReference.getDownloadURL().then((url) {
Provider.of<LandingUtils>(context, listen: false).userAvatarUrl =
url.toString();
print(
'the user profile avatar url => ${Provider.of<LandingUtils>(context, listen: false).userAvatarUrl}');
notifyListeners();
});
}
Future createUserCollection(BuildContext context, dynamic data) async {
return FirebaseFirestore.instance
.collection('users')
.doc(Provider.of<Authentication>(context, listen: false).getUserUid)
.set(data);
}
Future initUserData(BuildContext context) {
return FirebaseFirestore.instance
.collection('users')
.doc(Provider.of<Authentication>(context, listen: false).getUserUid)
.get()
.then((doc) {
print('fetching user data');
initUserName = doc['username'];
initUserEmail = doc['useremail'];
initUserImage = doc['userimage'];
print(initUserName);
print(initUserEmail);
print(initUserImage);
notifyListeners();
});
}
}

这里我使用的图像显示在底部导航栏

import 'package:custom_navigation_bar/custom_navigation_bar.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:straydogs/constants/Constantcolors.dart';
import 'package:straydogs/services/FirebaseOperations.dart';
class HomepageHelpers with ChangeNotifier {
ConstantColors constantColors = ConstantColors();
Widget bottomNavBar(BuildContext context, int index, PageController pageController) {
return CustomNavigationBar(
currentIndex: index,
bubbleCurve: Curves.bounceIn,
scaleCurve: Curves.decelerate,
selectedColor: constantColors.purple,
unSelectedColor: constantColors.whiteColor,
strokeColor: constantColors.purple,
scaleFactor: 0.5,
iconSize: 30.0,
onTap: (val) {
index = val;
pageController.jumpToPage(val);
notifyListeners();
},
backgroundColor: Color(0xff0e0021),
items: [
CustomNavigationBarItem(icon: Icon(EvaIcons.home)),
CustomNavigationBarItem(icon: Icon(EvaIcons.search)),
CustomNavigationBarItem(icon: Icon(Icons.messenger_rounded)),
CustomNavigationBarItem(
icon: CircleAvatar(
radius: 35.0,
backgroundColor: constantColors.blueGreyColor,
backgroundImage: NetworkImage(Provider.of<FirebaseOperations>(context,listen: false).getInitUserImage),
))
],
);
}
}

代码错误屏幕错误

在你的FirebaseOperations中将downloadURL设置为

Provider.of<LandingUtils>(context, listen: false).userAvatarUrl =
url.toString();

但是在Widget中你使用:

backgroundImage: NetworkImage(Provider.of<FirebaseOperations>(context,listen: false).getInitUserImage),

所以解决方案是使用正确的提供商,因为您从未设置initUserImage这也表示错误initUserImage尚未初始化。

最新更新