Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 从Firebase获取图像文件数据时出错_Image_Firebase_Flutter_Dart_Error Handling - Fatal编程技术网

Image 从Firebase获取图像文件数据时出错

Image 从Firebase获取图像文件数据时出错,image,firebase,flutter,dart,error-handling,Image,Firebase,Flutter,Dart,Error Handling,我想显示一个文件图像,用户可以从他们的图库中选择并将其作为产品图像发布。然而,我一直有各种各样的问题,试图显示图像,但没有任何工作 我的最新代码更新更改了从firebase获取图像的方式,方法是执行以下操作Image:File(carData['Image']),在某种程度上消除了由于图像未显示而导致的一个错误,但我发现了另一个错误,即我在解决问题时遇到了问题,它在stacktrace中给了我以下错误(在我刷新应用程序并尝试获取通过表单提交的数据后): 现在真正奇怪的是,它根本没有调用我的文件。

我想显示一个文件图像,用户可以从他们的图库中选择并将其作为产品图像发布。然而,我一直有各种各样的问题,试图显示图像,但没有任何工作

我的最新代码更新更改了从firebase获取图像的方式,方法是执行以下操作
Image:File(carData['Image']),
在某种程度上消除了由于图像未显示而导致的一个错误,但我发现了另一个错误,即我在解决问题时遇到了问题,它在stacktrace中给了我以下错误(在我刷新应用程序并尝试获取通过表单提交的数据后):

现在真正奇怪的是,它根本没有调用我的文件。它跳过了这一步,由于找不到图像,它获取了我在应用程序中构建的“Price”
textFormField
的值

以下是我使用firebase获取数据的过程:

Future<void> fetchAndSetCars() async {
    const url = 'https://mylink.firebaseio.com/cars.json';
    try {
      final response = await http.get(url);
      final extractedData = json.decode(response.body) as Map<String, dynamic>;
      final List<AddCar> loadedCars = [];
      extractedData.forEach((carId, carData) {
        loadedCars.add(AddCar(
          id: carId,
          name: carData['name'],
          city: carData['city'],
          country: carData['country'],
          currencyT: carData['currency'],
          price: carData['price'],
          // date: carData['date'],
          sponsNum: carData['sponsNum'],
          category: carData['category'],
          company: carData['company'],
          model: carData['model'],
          year: carData['year'],
          engine: carData['engine'],
          distanceCovered: carData['distanceCovered'],
          transmission: carData['transmission'],
          oilT: carData['oil type'],
          outColor: carData['outter color'],
          inColor: carData['inner color'],
          description: carData['description'],
          address: carData['address'],
          image: File(carData['image']),
        ));
      });
      _cars = loadedCars;
      notifyListeners();
    } catch (error) {
      throw (error);
    }
  }

你在
carData['image']
中有
URL
吗?不完全是一个更像路径的URL这是传递到firebase
'image
数据
文件:'/storage/emulated/0/Android/data/com.exa…
中的文件,你确定该文件在该位置的设备上吗?首先我不知道Image.file()是否可以处理文件:/prefix,然后我很确定您需要android.permission.READ\u EXTERNAL\u存储权限。我认为这样做没有用。为什么不将其存储在云存储中,并将下载URL保存在firebase中?我花了20分钟来实现。但是堆栈似乎与加载图像无关,而且我不理解CarItem代码块。这是无状态小部件的构建方法的一部分还是什么?有趣的是,人们在代码中粘贴与所有属性和内容无关的内容,却忽略了重要的部分。CarItem是应用程序中数据的显示方式。基本上,它会将图像作为产品的预览图像放在CarItem中
Future<void> fetchAndSetCars() async {
    const url = 'https://mylink.firebaseio.com/cars.json';
    try {
      final response = await http.get(url);
      final extractedData = json.decode(response.body) as Map<String, dynamic>;
      final List<AddCar> loadedCars = [];
      extractedData.forEach((carId, carData) {
        loadedCars.add(AddCar(
          id: carId,
          name: carData['name'],
          city: carData['city'],
          country: carData['country'],
          currencyT: carData['currency'],
          price: carData['price'],
          // date: carData['date'],
          sponsNum: carData['sponsNum'],
          category: carData['category'],
          company: carData['company'],
          model: carData['model'],
          year: carData['year'],
          engine: carData['engine'],
          distanceCovered: carData['distanceCovered'],
          transmission: carData['transmission'],
          oilT: carData['oil type'],
          outColor: carData['outter color'],
          inColor: carData['inner color'],
          description: carData['description'],
          address: carData['address'],
          image: File(carData['image']),
        ));
      });
      _cars = loadedCars;
      notifyListeners();
    } catch (error) {
      throw (error);
    }
  }
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:google_fonts_arabic/fonts.dart';

import '../providers/car_provider.dart';
import '../widget/car_item.dart';

class CarsList extends StatefulWidget {
  @override
  _CarsListState createState() => _CarsListState();
}

class _CarsListState extends State<CarsList> {
    @override
  void initState() {
 Future.delayed(Duration.zero).then((_) {
  Provider.of<Cars>(context).fetchAndSetCars();
 });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    final carsData = Provider.of<Cars>(context);
    final car = carsData.cars;
    return car.isEmpty
        ? Center(
            child: Text(
            'error no car found',
            style: TextStyle(
              fontFamily: ArabicFonts.Tajawal,
              fontWeight: FontWeight.bold,
              package: 'google_fonts_arabic',
            ),
          ))
        : ListView.builder(
            padding: const EdgeInsets.only(bottom: 47.0),
            itemCount: car.length,
            itemBuilder: (ctx, i) => CarItem(
              car[i].id,
              car[i].image,
              car[i].name,
              car[i].model,
              car[i].currencyT,
              car[i].price,
              car[i].distanceCovered,
              car[i].transmission,
              car[i].oilT,
              car[i].year,
              car[i].date,
            ),
          );
  }
}

 final String id;
  final File image;
  final String name;
  final String model;
  final String currencyT;
  final String price;
  final double distanceCovered;
  final String transmission;
  final String oilT;
  final String year;
  final DateTime date;

  CarItem(
    this.id,
    this.image,
    this.name,
    this.model,
    this.currencyT,
    this.price,
    this.distanceCovered,
    this.transmission,
    this.oilT,
    this.year,
    this.date,
  );

 Container(
                width: MediaQuery.of(context).size.width * 0.35,
                height: MediaQuery.of(context).size.width * 0.35,
                child: GestureDetector(
                  child: Image.file(
                    image,
                    fit: BoxFit.fill,
                  ),
                  onTap: () {
                    Navigator.of(context).pushNamed(
                      MyCarDetails.routeName,
                      arguments: id,
                    );
                  },
                ),
              ),