firebase - 显示 Cloud Firebase 数据?
问题描述
嘿有谁知道我如何从我的 Cloud Firebase 中显示这个变量 url?如果有人能做一个巨大的例子,那就太好了!:)
class EditProfile extends StatefulWidget {
@override
_EditProfileState createState() => _EditProfileState();
}
class _EditProfileState extends State<EditProfile> {
FocusNode myFocusNode1 = new FocusNode();
FocusNode myFocusNode3 = new FocusNode();
final _formkey = GlobalKey<FormState>();
String _UserName ;
String _Email ;
String _URL;
File _image;
Future getImage(BuildContext context) async {
var image = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_image = image;
print('Image Path $_image');
uploadPic(context);
});
}
Future<DocumentSnapshot> getUserInfo() async {
var firebaseUser = await FirebaseAuth.instance.currentUser;
return await FirebaseFirestore.instance.collection("SerX")
.doc(firebaseUser.uid)
.get();
}
Future uploadPic(BuildContext context) async {
String fileName = basename(_image.path);
StorageReference firebaseStorageRef = FirebaseStorage.instance.ref().child(
fileName);
StorageUploadTask uploadTask = firebaseStorageRef.putFile(_image);
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
var downUrl = await (await uploadTask.onComplete).ref.getDownloadURL();
_URL = downUrl.toString();
setState(() async {
print('Profile Picture uploaded');
var firebaseUser = await FirebaseAuth.instance.currentUser;
FirebaseFirestore.instance.collection("SerX").doc(firebaseUser.uid).update({"url" : downUrl});
Scaffold.of(context).showSnackBar(
SnackBar(content: Text('Profile Picture Uploaded')));
});
}
@override
void dispose() {
myFocusNode1 = FocusNode();
myFocusNode3 = FocusNode();
super.dispose();
}
@override
Widget build(BuildContext context) {
myFocusNode1.addListener(() {setState(() {
}); });
myFocusNode3.addListener(() {setState(() {
}); });
final user = Provider.of<Userf>(context);
return StreamBuilder<UserData>(
stream: DatabaseService(uid: user.uid).userData,
builder: (context, snapshot) {
if(snapshot.hasData){
UserData userData = snapshot.data;
return Form(
key: _formkey,
child: Scaffold(
appBar: AppBar(
bottom: PreferredSize(
child: Container(
color: Colors.blue,
height: 4.0,
),
preferredSize: Size.fromHeight(0)),
backgroundColor: Colors.black,
leading: IconButton(icon: Icon(Icons.arrow_back ,color: Colors.blue,),onPressed: (){
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomeScreen()));
},),
title: Text('Profile', style: TextStyle(
color:Colors.white,
fontSize: 25,
fontWeight: FontWeight.bold,
fontFamily: 'Orbitron',
),
textAlign: TextAlign.center,
),
),
body: Container(
color: Colors.black,
child: ListView(
children: [
Stack(
children: [
Container(
margin: EdgeInsets.fromLTRB(140,45,0,0),
width: 130,
height: 130,
decoration: BoxDecoration(
border: Border.all(
width: 3,
color: Colors.blue,
),
boxShadow: [BoxShadow(
spreadRadius: 2, blurRadius: 10,
color: Colors.white.withOpacity(0.1),
offset: Offset(0,10),
),
],
shape: BoxShape.circle,
image: DecorationImage(
fit: BoxFit.cover,
image: (_image != null) ? FileImage(
_image)
: NetworkImage(_URL.toString()),
)
),
),
Positioned(
bottom: 0,
right: 150,
child: Container(
height: 35,
width: 35,
decoration: BoxDecoration(
border: Border.all(width: 2, color: Colors.blue),
shape: BoxShape.circle,
color: Colors.white,
),
child: IconButton(icon: Icon(Icons.edit), color: Colors.blue,iconSize:
17, onPressed: () async {
getImage(context);
},),
),
)
],
),
SizedBox(height: 40),
TextFormField(
initialValue: userData.Username,
onChanged: (val) => setState(() => _UserName = val),
validator: (input){
if (input.isEmpty) {
return 'Please enter a username';
}
if(input.length < 6){
return 'Your username needs to be at least 6 characters';
}else if(input.length > 12){
return 'Your username needs to be at most 12 characters';
}
if (!RegExp(
r'^[a-zA-Z0-9]+$')
.hasMatch(input)) {
return 'a-z, A-Z, 0-9';
}
},
focusNode: myFocusNode1,
style: TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.bold,
fontFamily: 'Orbitron',
),
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.blue, width: 1.0),
borderRadius: BorderRadius.circular(25.0),
),
enabledBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.white, width: 1.0),
borderRadius: BorderRadius.circular(25.0),
),
icon: Icon(Icons.edit, color: Colors.blue,),
contentPadding: EdgeInsets.only(bottom: 3),
labelText: "Username",
labelStyle: TextStyle(color: myFocusNode1.hasFocus ? Colors.blue : Colors.white),
floatingLabelBehavior: FloatingLabelBehavior.always,
prefixIcon: myFocusNode1.hasFocus ? Icon(Icons.account_circle, color: Colors.blue,): Icon(Icons.account_circle, color: Colors.white,),
hintStyle: TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.bold,
fontFamily: 'Orbitron',
),
),
),
SizedBox(height: 35),
Row(
children: [
SizedBox(width: 40,),
RaisedButton(
onPressed: (){
Navigator.pushReplacement(context, MaterialPageRoute(
builder: (context) => HomeScreen()));
},
color: Colors.white,
padding: EdgeInsets.symmetric(horizontal: 10),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
elevation: 2,
child: Text("CANCEL",
style:TextStyle(
color: Colors.black,
fontSize: 25,
fontWeight: FontWeight.bold,
fontFamily: 'Orbitron',
letterSpacing: 2.2,
),),
),
SizedBox(width: 30,),
RaisedButton(
onPressed: () async{
if(_formkey.currentState.validate()){
await DatabaseService(uid: user.uid).updateUserData(
_UserName ?? userData.Username,
_Email ?? userData.Email,
_URL ?? userData.URL);
Navigator.pushReplacement(context, MaterialPageRoute(
builder: (context) => LoadingUpdate()));
}
},
color: Colors.blue,
padding: EdgeInsets.symmetric(horizontal: 30),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
elevation: 2,
child: Text("SAVE" ,style:TextStyle(
color: Colors.black,
fontSize: 27,
fontWeight: FontWeight.bold,
fontFamily: 'Orbitron',
letterSpacing: 2.2,
),),
)
],
),
],
)
),
),
);
}else{
return Center(
child: SpinKitFadingCircle(color: Colors.white, size: 20.0),
heightFactor: 29,
);
}
}
);
}
}
BoxDecoration myBoxDecoration() {
return BoxDecoration(
border: Border.all(
color: Colors.blue, // <--- border color
width: 5.0,
),
);
dnkjcnsjkndkcnsjkcnkjsndckjnsdkjcnsjkdcnkjnsdkcjnsd skcnkjsndcknsdkjcnkjsdcnkjnsdjkcnsjkdcnjknsdc scdhbsdjbcjhsdbcjhbsdhjcbsjhdcbhjdbsjdbcjhsbdc scjbsdjhcsjdcbjhsdbcjhbs
解决方案
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
try {
DocumentSnapshot document = await _firestore
.collection('SerX')
.doc(documentID) //replace with the document id
.get();
Map<String, dynamic> json = document.data() // your data
// for example to get the email value -> json["Email"]
} catch (e) {
throw Exception();
}
推荐阅读
- wordpress - 为什么我的域指向的网站与我的 IP 地址不同?
- python - 在 neo4j 中创建数据库需要很长时间
- python - Windows 10 上的错误时间
- javascript - 测试在 IFrame 中运行的 JavaScript
- c# - ASP.NET MVC4 Web API 中的 URL 路由
- php - 高级自定义字段 update_field() 不起作用
- python - 如何将按钮从下拉菜单更改为手动输入 python django
- r - 仅在满足条件的特定日期时间后才加入事件并计算时差
- javascript - ReactJS +SocketIOFileUpload,我如何将这两者整合在一起将文件上传到服务器?
- angular - 通过在角度中使用库 PDFMAKE 来清除我们用来制作 pdf 的先前数据的程度