Flutter 在从firebase检索的应用程序中设置数据
图像未显示,但firebase数据库中的所有数据都显示在应用程序中Flutter 在从firebase检索的应用程序中设置数据,flutter,firebase-realtime-database,dart,Flutter,Firebase Realtime Database,Dart,图像未显示,但firebase数据库中的所有数据都显示在应用程序中 import 'package:flutter/material.dart'; import 'Authentication.dart'; import 'photoUpload.dart'; import 'Posts.dart'; import 'package:firebase_database/firebase_database.dart'; // import 'package:flutter_blogapp/Auth
import 'package:flutter/material.dart';
import 'Authentication.dart';
import 'photoUpload.dart';
import 'Posts.dart';
import 'package:firebase_database/firebase_database.dart';
// import 'package:flutter_blogapp/Authentication.dart';
// import 'package:flutter_blogapp/photoUpload.dart';
class HomePage extends StatefulWidget
{
HomePage
(
{
this.auth,
this.onSignedOut,
}
);
final AuthImplementation auth;
final VoidCallback onSignedOut;
@override
State<StatefulWidget> createState()
{
return _HomePageState();
}
}
class _HomePageState extends State<HomePage>
{
List<Posts> postsList = [];
@override
void initState()
{
super.initState();
DatabaseReference postsRef = FirebaseDatabase.instance.reference().child("Posts");
postsRef.once().then((DataSnapshot snap)
{
var KEYS = snap.value.keys;
var DATA = snap.value;
postsList.clear();
for(var individualKey in KEYS)
{
Posts posts = new Posts
(
DATA[individualKey]['image'],
DATA[individualKey]['description'],
DATA[individualKey]['data'],
DATA[individualKey]['time'],
);
postsList.add(posts);
}
setState(()
{
print('Length : $postsList.length');
});
});
}
void _logoutUser() async
{
try
{
await widget.auth.signOut();
widget.onSignedOut();
}
catch (e)
{
print(e.toString());
}
}
@override
Widget build(BuildContext context)
{
return new Scaffold
(
appBar: new AppBar
(
title: new Text('Home'),
),
body : new Container
(
child: postsList.length == 0 ? new Text(" No Post available ") : new ListView.builder
(
itemCount: postsList.length,
itemBuilder: (_, index)
//itemBuilder: (BuildContext _, int index ) //<-----
{
return PostsUI(postsList[index].image, postsList[index].description, postsList[index].date, postsList[index].time);
}
),
),
bottomNavigationBar: new BottomAppBar
(
color: Colors.pink,
child: new Container
(
margin: const EdgeInsets.only(left: 70.0, right: 70.0),
child: new Row
(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.max,
children: <Widget>
[
new IconButton
(
icon: new Icon(Icons.local_car_wash),
iconSize: 50,
color: Colors.white,
onPressed: _logoutUser,
),
new IconButton
(
icon: new Icon(Icons.add_a_photo),
iconSize: 50,
color: Colors.white,
onPressed: ()
{
Navigator.push
(
context,
MaterialPageRoute(builder: (context)
{
return new UploadPhotoPage();
})
);
},
),
],
),
),
),
);
}
// Designing Posts UI
Widget PostsUI(String image, String description, String date, String time)
{
return new Card
(
elevation: 10.0,
margin: EdgeInsets.all(15.0),
child: new Container
(
padding: new EdgeInsets.all(14.0),
child: new Column
(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>
[
new Row
(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>
[
new Text
(
date,
style: Theme.of(context).textTheme.subtitle,
textAlign: TextAlign.center,
),
new Text
(
time,
style: Theme.of(context).textTheme.subtitle,
textAlign: TextAlign.center,
), //<----
],
),
SizedBox(height: 10.0,),
new Image.network(image, fit:BoxFit.cover),
SizedBox(height: 10.0,),
new Text
(
description,
style: Theme.of(context).textTheme.subhead,
textAlign: TextAlign.center,
),
],
)
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“Authentication.dart”;
导入“photoUpload.dart”;
导入“Posts.dart”;
导入“package:firebase_database/firebase_database.dart”;
//导入“package:flatter_blogapp/Authentication.dart”;
//导入“包:flatter_blogapp/photoUpload.dart”;
类主页扩展了StatefulWidget
{
主页
(
{
这个.auth,
这是我的名字,
}
);
最终授权执行授权;
最终作废回拨至已签出;
@凌驾
状态createState()
{
返回_HomePageState();
}
}
类_HomePageState扩展状态
{
列表postsList=[];
@凌驾
void initState()
{
super.initState();
DatabaseReference postsRef=FirebaseDatabase.instance.reference().child(“Posts”);
postsRef.one().then((DataSnapshot快照)
{
var KEYS=snap.value.KEYS;
var数据=snap.value;
postsList.clear();
for(var individualKey-in键)
{
员额=新员额
(
数据[individualKey]['image'],
数据[individualKey]['description'],
数据[individualKey]['DATA'],
数据[individualKey][time'],
);
postsList.add(posts);
}
设置状态()
{
打印('Length:$postsList.Length');
});
});
}
void\u logoutUser()异步
{
尝试
{
等待widget.auth.signOut();
widget.onSignedOut();
}
捕获(e)
{
打印(如toString());
}
}
@凌驾
小部件构建(构建上下文)
{
归还新脚手架
(
appBar:新的appBar
(
标题:新文本(“主页”),
),
主体:新容器
(
子项:postsList.length==0?新文本(“没有可用的Post”):new ListView.builder
(
itemCount:postsList.length,
itemBuilder:(\ux,索引)
//itemBuilder:(BuildContext,int index)//错误消息的主要部分是:
无效参数:URI中未指定主机file:///image
由此看来,您正在将一个本地文件://
引用存储到数据库中,而不是一个全局可访问的URL(通常以http://
或https://
开头)
解决方案是在将写入数据库的代码中,将图像实际上载到公共存储位置(例如Firebase存储)然后将生成的下载URL写入数据库。图像字段中有什么?您可以调试并查看图像字段的值吗?是否获得了正确的URL,错误是因为提供的图像字符串无法访问或未加载,请尝试调试,查看图像字段的值,然后在浏览器中尝试该链接,hru?谢谢你的建议。我已经调试过了,在我错的地方得到了错误。谢谢