Ошибка при загрузке изображения в хранилище Firebase

Я пытаюсь создать средство выбора изображений с помощью флаттера. Я хочу, чтобы пользователь мог выбрать изображение и загрузить его в хранилище firebase, чтобы его можно было позже получить. Я использую средство выбора изображений, чтобы выбрать изображение из галереи, а затем устанавливаю изображение, выбранное как файл. Затем я создаю ссылку с именемfirebaseStorageRefи используяfirebaseStorageRef.putFile(_selectedImage!)для загрузки данных.

Однако я получаю сообщение об ошибке:

      Restarted application in 553ms.
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: [firebase_storage/object-not-found] No object exists at the desired reference.

основной.дротик:

      import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blog/views/homePage.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MainApp());
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
        title: "Blog App",
        themeMode: ThemeMode.dark,
        debugShowCheckedModeBanner: false,
        home: homePage());
  }
}

код create_blog.dart:

      import 'dart:io';

import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blog/services/crud.dart';
import 'package:image_picker/image_picker.dart';
import 'package:random_string/random_string.dart';
import 'package:firebase_core/firebase_core.dart';

class CreateBlog extends StatefulWidget {
  const CreateBlog({super.key});

  @override
  State<CreateBlog> createState() => _CreateBlogState();
}

class _CreateBlogState extends State<CreateBlog> {
  late String authorName, title, desc;
  bool isloading = false;

  CRUDMethods crudMethods = new CRUDMethods();

  File? _selectedImage;

  Future getImage() async {
    var image = await ImagePicker().pickImage(source: ImageSource.gallery);
    if (image == null) return;

    final image_path = File(image.path);

    setState(() {
      _selectedImage = image_path;
    });
  }

  uploadBlog() async {
    if (_selectedImage != null) {
      // Uploading image to Firestore
      setState(() {
        isloading = true;
      });
      var firebaseStorageRef = FirebaseStorage.instance
          .ref()
          .child("blogImages")
          .child("${randomAlphaNumeric(9)}.jpg");

      try {
        var task = firebaseStorageRef
            .putFile(_selectedImage!)
            .whenComplete(() => Navigator.pop(context));
      } catch (error) {
        print(error);
      }

      
    } else {}
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title:
            Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
          Text(
            "Flutter",
            style: TextStyle(
              fontSize: 22,
              color: Colors.black,
            ),
          ),
          Text(
            "Blog",
            style: TextStyle(fontSize: 22, color: Colors.blue),
          )
        ]),
        backgroundColor: Colors.transparent,
        elevation: 0,
        actions: <Widget>[
          GestureDetector(
              onTap: () {
                uploadBlog();
              },
              child: Container(
                  padding: EdgeInsets.symmetric(horizontal: 16),
                  child: Icon(
                    Icons.file_upload,
                    color: Colors.black,
                  )))
        ],
      ),
      backgroundColor: Colors.white,
      body: isloading
          ? Container(
              alignment: Alignment.center,
              child: CircularProgressIndicator(color: Colors.teal),
            )
          : Container(
              child: Column(
              children: <Widget>[
                SizedBox(
                  height: 10,
                ),
                GestureDetector(
                  onTap: () {
                    getImage();
                  },
                  child: _selectedImage != null
                      ? Container(
                          margin: EdgeInsets.symmetric(horizontal: 30),
                          height: 150,
                          width: MediaQuery.of(context).size.width,
                          child: Image.file(
                            _selectedImage!,
                            fit: BoxFit.cover,
                          ),
                        )
                      : Container(
                          margin: EdgeInsets.symmetric(horizontal: 30),
                          height: 150,
                          width: MediaQuery.of(context).size.width,
                          child: Icon(Icons.add_a_photo),
                          decoration: BoxDecoration(
                              color: Colors.blueAccent,
                              borderRadius: BorderRadius.circular(6)),
                        ),
                ),
                SizedBox(
                  height: 8,
                ),
                Container(
                  margin: EdgeInsets.symmetric(horizontal: 30),
                  child: Column(
                    children: <Widget>[
                      TextField(
                        decoration: InputDecoration(hintText: "Author Name"),
                        onChanged: (val) {
                          authorName = val;
                        },
                      ),
                      TextField(
                        decoration: InputDecoration(hintText: "Title"),
                        onChanged: (val) {
                          title = val;
                        },
                      ),
                      TextField(
                        decoration: InputDecoration(hintText: "Description"),
                        onChanged: (val) {
                          desc = val;
                        },
                      )
                    ],
                  ),
                )
              ],
            )),
    );
  }
}

код crud.dart:

      import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class CRUDMethods {
  Future<void> addData(blogData) async {
    FirebaseFirestore.instance
        .collection("blogs")
        .add(blogData)
        .catchError((e) {
      print(e);
    });
  }
}

0 ответов

Другие вопросы по тегам