Flutter 在从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

图像未显示,但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/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?谢谢你的建议。我已经调试过了,在我错的地方得到了错误。谢谢