错误:无效参数:在 URI 文件中未指定主机:///null

Posted

技术标签:

【中文标题】错误:无效参数:在 URI 文件中未指定主机:///null【英文标题】:Error: Invalid argument(s): No host specified in URI file:///null 【发布时间】:2021-09-28 12:16:45 【问题描述】:

在解析图像编解码器时引发以下 ArgumentError: 无效参数:在 URI 文件中未指定主机:///null

当异常被抛出时,这是堆栈: #0 _HttpClient._openUrl (dart:_http/http_impl.dart:2636:9) #1 _HttpClient.getUrl (dart:_http/http_impl.dart:2565:48) #2 NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:89:59) #3 NetworkImage.load (package:flutter/src/painting/_network_image_io.dart:50:14) #4 ImageProvider.resolveStreamForKey。 (包:flutter/src/painting/image_provider.dart:503:13) ... 图片提供者:NetworkImage("null", scale: 1.0) 图片键:NetworkImage("null", scale: 1.0)

代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:your_store/widgets/custom_action_bar.dart';
import 'package:your_store/widgets/product_cart.dart';

class HomeTab extends StatelessWidget 
  final CollectionReference _productRef =
  FirebaseFirestore.instance.collection("Products");

  @override
  Widget build(BuildContext context) 
    return Container(
      child: Stack(
        children: [
          FutureBuilder<QuerySnapshot>(
            future: _productRef.get(),
            builder: (context, snapshot) 
              if (snapshot.hasError) 
                return Scaffold(
                  body: Center(
                    child: Text("Error: $snapshot.error"),
                  ),
                );
              

              // Collection Data ready to display
              if (snapshot.connectionState == ConnectionState.done) 
                //Display data in List View
                return ListView(
                  padding: EdgeInsets.only(
                    top: 108.0,
                    bottom: 12.0,
                  ),
                  children:
                  snapshot.data!.docs.map((QueryDocumentSnapshot document) 
                    // Map<String, dynamic> data = document.data();
                    final dynamic data = document.data();

                    return ProductCart(
                      title: data["name"],
                      imageUrl: data["images"[0]],
                      price: "₹$data["price"]",
                      productId: document.id,
                    );
                  ).toList(),
                );
              

              // Loading State
              return Scaffold(
                body: Center(
                  child: CircularProgressIndicator(),
                ),
              );
            ,
          ),
          CustomActionBar(
            title: "Home",
            hasBackArrow: false,
          ),
        ],
      ),
    );
  

【问题讨论】:

可能data["images"[0]] 具有导致错误的空值。 能否请您检查我的代码并告诉我可能的修复方法?这是代码链接。 github.com/Bhaskar2510/Final 【参考方案1】:

@Bhaskar2510 在获取产品时,任何产品中的图片链接都可能损坏或为空,因此您必须在将其传递给图片小部件之前添加空检查。

替换ProductCart下面的代码

Container(
  height: 350.0,
  child: ClipRRect(
    borderRadius: BorderRadius.circular(12.0),
    child: Image.network(
      "$imageUrl",
      fit: BoxFit.contain,
    ),
  ),
),

Container(
  height: 350.0,
  child: ClipRRect(
    borderRadius: BorderRadius.circular(12.0),
    child: imageUrl == null ? Placeholder()
     : Image.network(
      "$imageUrl",
      fit: BoxFit.contain,
    ),
  ),
)

【讨论】:

嘿!谢谢这解决了我的代码错误,但是如果您尝试在模拟器中运行代码并且登录后仍然存在问题,它没有从我的 ew firebase 获取产品它仍然显示来自我旧链接的 firebase 的产品并显示一些十字架。

以上是关于错误:无效参数:在 URI 文件中未指定主机:///null的主要内容,如果未能解决你的问题,请参考以下文章

无效参数:在 URI 文件中未指定主机:///null

UriFormatException:无效的URI:指定的端口无效

Nuget包安装错误 - 无效的URI:无法解析权限/主机

在 Amazon ApiGateway 中为 URI 指定的 HTTP 终端节点无效

System.UriFormatException:无效的 URI:无法解析主机名

无效的 URI:无法通过我们的自定义重写 IHttpModule 解析主机名