Firebase E/StorageUtil(6584):获取令牌时出错java.util.concurrent.ExecutionException:b.a.d.p.d.a:请在尝试获取令牌之前登录

Firebase E/StorageUtil(6584):获取令牌时出错java.util.concurrent.ExecutionException:b.a.d.p.d.a:请在尝试获取令牌之前登录,firebase,flutter,dart,Firebase,Flutter,Dart,我收到以下与我的Firebase代码相关的错误,以保存图像、日期和废弃物数量。或者这是否可能是与我的Firebase配置相关的错误 import 'dart:io'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_storage/firebase_storage.dart'; import 'package:flutter/material.dart'; import 'packag

我收到以下与我的Firebase代码相关的错误,以保存图像、日期和废弃物数量。或者这是否可能是与我的Firebase配置相关的错误

import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:async';
import 'package:wasteagram/model/waste.dart';
import 'package:path/path.dart' as path;
import 'package:uuid/uuid.dart';

class CameraScreen extends StatefulWidget {

  final bool isUpdating;  


  CameraScreen({this.isUpdating = true}); 

  @override
  _CameraScreenState createState() => _CameraScreenState();
}

class _CameraScreenState extends State<CameraScreen> {

  final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); 
  Waste _currentWaste = Waste(); 

  Widget _buildDateField() {
    return Form(
      key: _formKey, 
      child: TextFormField(
        decoration: InputDecoration(labelText: 'Date'),
        keyboardType: TextInputType.text,
        style: TextStyle(fontSize: 20), 
        validator: (String value) {
          if(value.isEmpty){
            return 'Date required'; 
          }
          if(value.length < 3 || value.length > 20) {
            return 'Name must be more than 3 or less than 20'; 
          }
          return null;
        },

        onSaved: (String value) {
          _currentWaste.wastedate = value; 
        },
      ),
    );
  }

  Widget _buildWasteNumber() {
    return Form(

          child: TextFormField(
        decoration: InputDecoration(labelText: 'Number'),
        keyboardType: TextInputType.number,
        style: TextStyle(fontSize: 20), 
        validator: (value) {
          if(value.isEmpty){
            return 'Number required'; 
          }
          return null;
        },

        onSaved: (String value) {
          String wasteNum = _currentWaste.wastenumber.toString();
          wasteNum = value; 
        },
      ),
    );
  }

  _saveWaste(context) {

    print("saveWaste Called"); 
    if(!_formKey.currentState.validate()) {
      return "FALSE"; 
    }

    _formKey.currentState.save(); 

    print("form saved");

    uploadItems(_currentWaste, widget.isUpdating, image);  


    print("date ${_currentWaste.wastedate}"); 
    print("number ${_currentWaste.wastenumber.toString()}");
    print("_imageFile ${image.toString()}");
  }

  File image; 

  void getImage() async {
    image = await ImagePicker.pickImage(source: ImageSource.gallery); 
    setState( () {}); 
  }

  @override 
  Widget build(BuildContext context) {
    if (image == null) {
      return Scaffold(
      appBar: AppBar(
        title: Text('Wasteagram')
      ), 
      body: Center(
          child: RaisedButton(
            child: Text('Select Photo'),
            onPressed: () {
              getImage(); 
            },
          ),
        ),
      ); 
    } else {
      return Scaffold(
        appBar: AppBar(
          title: Text('Wasteagram')
          ), 
          body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
              children: [
            Image.file(image),
            SizedBox(height: 40), 
            RaisedButton(
              child: Text('Select Photo'),
              onPressed: () {
                getImage(); 
              }
            ), 
            _buildDateField(),
            _buildWasteNumber(),
              ],
            ),
          floatingActionButton: FloatingActionButton(
            onPressed: () => _saveWaste(context),
            child: Icon(Icons.save),
            foregroundColor: Colors.white,
          ),

        ); 
    }
  }
}

uploadItems(Waste waste, bool isUpdating, File localFile) async {
  if (localFile != null) {
    print("uploading image"); 

    var fileExtension = path.extension(localFile.path); 
    print(fileExtension); 

    var uuid = Uuid().v4(); 

    final StorageReference firebaseStorageRef = 
      FirebaseStorage.instance.ref().child('/$uuid$fileExtension'); 

      await firebaseStorageRef.putFile(localFile).onComplete.catchError(
        (onError){
          print(onError); 
          return false; 
        }
      ); 

      String url = await firebaseStorageRef.getDownloadURL(); 
      print("download url: $url"); 
      _uploadWaste(waste, isUpdating, imageUrl: url); 
  } else {
    print("skipping image upload"); 
    _uploadWaste(waste, isUpdating); 

  }
}

_uploadWaste(Waste waste, bool isUpdating, {String imageUrl}) async {
  CollectionReference wasteRef = Firestore.instance.collection('todolist'); 

  if(imageUrl != null) {
    waste.image = imageUrl; 
  }

  if(isUpdating) {

    waste.updatedAt = Timestamp.now(); 

    await wasteRef.document(waste.id).updateData(waste.toMap()); 
  print("updated waste with id: ${waste.id}"); 
  } else {

    DocumentReference documentRef = await wasteRef.add(waste.toMap()); 

    waste.id = documentRef.documentID; 

    print("uploaded waste successfully: ${waste.toString()}"); 

    await documentRef.setData(waste.toMap(), merge: true); 
  }


}
导入'dart:io';
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:firebase_存储/firebase_存储.dart”;
进口“包装:颤振/材料.省道”;
导入“包:image_picker/image_picker.dart”;
导入“dart:async”;
导入“包装:wasteagram/model/waste.dart”;
导入“package:path/path.dart”作为路径;
导入“包:uuid/uuid.dart”;
类CameraScreen扩展StatefulWidget{
最终目标是更新;
CameraScreen({this.isUpdate=true});
@凌驾
_CameraScreenState createState()=>\u CameraScreenState();
}
类\u CameraScreenState扩展状态{
最终的GlobalKey _formKey=GlobalKey();
废物_currentWaste=废物();
小部件_buildDateField(){
报税表(
键:_formKey,
子项:TextFormField(
装饰:输入装饰(标签文本:“日期”),
键盘类型:TextInputType.text,
样式:TextStyle(字体大小:20),
验证器:(字符串值){
if(value.isEmpty){
返回“所需日期”;
}
如果(value.length<3 | | value.length>20){
返回“名称必须大于3或小于20”;
}
返回null;
},
onSaved:(字符串值){
_currentWaste.wastedate=值;
},
),
);
}
小部件_buildWasteNumber(){
报税表(
子项:TextFormField(
装饰:输入装饰(标签文本:“数字”),
键盘类型:TextInputType.number,
样式:TextStyle(字体大小:20),
验证器:(值){
if(value.isEmpty){
返回“所需号码”;
}
返回null;
},
onSaved:(字符串值){
字符串wasteNum=_currentWaste.wastenumber.toString();
wasteNum=值;
},
),
);
}
_节约浪费(上下文){
打印(“保存废物”);
如果(!\u formKey.currentState.validate()){
返回“FALSE”;
}
_formKey.currentState.save();
打印(“保存表格”);
上传项目(_currentWaste,widget.isUpdate,image);
打印(“日期${u currentWaste.wastedate}”);
打印(“number${u currentWaste.wastenumber.toString()}”);
打印(“_imageFile${image.toString()}”);
}
文件图像;
void getImage()异步{
image=等待ImagePicker.pickImage(源:ImageSource.gallery);
setState((){});
}
@凌驾
小部件构建(构建上下文){
if(image==null){
返回脚手架(
appBar:appBar(
标题:文本('Wasteagram')
), 
正文:中(
孩子:升起按钮(
子项:文本(“选择照片”),
已按下:(){
getImage();
},
),
),
); 
}否则{
返回脚手架(
appBar:appBar(
标题:文本('Wasteagram')
), 
正文:专栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
Image.file(图像),
尺寸箱(高度:40),
升起的按钮(
子项:文本(“选择照片”),
已按下:(){
getImage();
}
), 
_buildDateField(),
_buildWasteNumber(),
],
),
浮动操作按钮:浮动操作按钮(
按下时:()=>\u saveWaste(上下文),
子:图标(Icons.save),
前底色:颜色。白色,
),
); 
}
}
}
异步上载项目(废物、bool isUpdating、文件localFile){
if(localFile!=null){
打印(“上传图像”);
var fileExtension=path.extension(localFile.path);
打印(文件扩展);
var uuid=uuid().v4();
最终存储参考firebaseStorageRef=
FirebaseStorage.instance.ref().child('/$uuid$fileExtension');
等待firebaseStorageRef.putFile(localFile).onComplete.catchError(
(onError){
打印(onError);
返回false;
}
); 
字符串url=等待firebaseStorageRef.getDownloadURL();
打印(“下载url:$url”);
_uploadWaste(waste、IsUpdate、imageUrl:url);
}否则{
打印(“跳过图像上载”);
_上传废物(废物、更新);
}
}
_uploadWaste(Waste-Waste,bool-isupdated,{String-imageUrl})异步{
CollectionReference wasteRef=Firestore.instance.collection('todolist');
if(imageUrl!=null){
waste.image=imageUrl;
}
如果(正在更新){
waste.updatedAt=Timestamp.now();
等待wasteRef.document(waste.id).updateData(waste.toMap());
打印(“id为${waste.id}的更新废物”);
}否则{
DocumentReference documentRef=等待wasteRef.add(waste.toMap());
waste.id=documentRef.documentID;
打印(“已成功上载废物:${waste.toString()}”);
等待documentRef.setData(waste.toMap(),merge:true);
}
}
错误如下:

E/StorageUtil(6584):获取令牌时出错java.util.concurrent.ExecutionException:b.a.d.p.d.a:请在尝试获取令牌之前登录。 W/NetworkRequest(6584):请求没有身份验证令牌检查所有这些

1) 更新到最新的依赖项版本后,请确保推送通知仍按预期工作

2) 查看Firebase安装文档。此外,确保使用#onNewToken实现监控FCM注册令牌的生成

3) 使用Firebase自动初始化过程和Gradle插件将google-services.json转换为资源的应用程序不受影响。但是,创建自己的FirebaseOptions实例的应用程序必须提供有效的API密钥,