首页 > 解决方案 > 如何从 firebase 获取图像/文件列表?

问题描述

您好,我正在尝试从 Firebase 存储桶/存储中获取图像列表,但是当我调用 runApp() 时,我不断收到错误代码。以下是与我的问题相对应的代码和错误消息。任何帮助我都会非常感激。我已经尝试按照错误消息的建议进行操作,但最终还是遇到了问题。

import 'package:authorize_user/Screens/image_screen.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() {
  Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Images',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: ImageScreen(),
    );
  }
}

class ImageScreen extends StatelessWidget {
  Stream<QuerySnapshot> getDocuments() {
    return FirebaseFirestore.instance
            .collection('Accounts/ZqEbRkLFbW34CXKybmr7/images')
            .snapshots();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder<QuerySnapshot>(
        stream: getDocuments(),
        builder: (context, streamSnapshots) {
          if (streamSnapshots.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          }
          final documents = streamSnapshots.data.docs;
          return ListView.builder(
            itemCount: streamSnapshots.data.docs.length,
            itemBuilder: (context, index) => Container(
              padding: EdgeInsets.all(8),
              child: Text(documents[index].data().length.toString()),
            ),
          );
        },
      ),
      floatingActionButton:
          FloatingActionButton(child:Icon(Icons.add), onPressed: () {}),
    );
  }
}

错误信息:

发生异常。FlutterError (ServicesBinding.defaultBinaryMessenger 在绑定初始化之前被访问。如果您正在运行应用程序并且需要在runApp()调用之前访问二进制信使(例如,在插件初始化期间),那么您需要显式调用第WidgetsFlutterBinding.ensureInitialized()一个。如果您正在运行测试,您可以TestWidgetsFlutterBinding.ensureInitialized()在测试方法的第一行调用main()来初始化绑定。)

标签: firebaseflutterstreamfirebase-storage

解决方案


尝试这个

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

参考:https ://github.com/TheAlphamerc/flutter_twitter_clone/blob/master/lib/main.dart


推荐阅读