E / StorageUtil (6584): ошибка при получении токена java .util.concurrent.ExecutionException: badpda: Пожалуйста, войдите в систему, прежде чем пытаться получить токен - PullRequest
0 голосов
/ 14 марта 2020

Я получаю следующую ошибку, связанную с моим кодом 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); 
  }


}

Ошибка выглядит следующим образом -

E / StorageUtil (6584): ошибка при получении токена java .util.concurrent.ExecutionException: badpda: Пожалуйста, войдите в систему, прежде чем пытаться получить знак W / NetworkRequest (6584): нет авторизационного токена для запроса

1 Ответ

1 голос
/ 14 марта 2020

Проверьте все эти

1) После обновления до последних версий зависимостей убедитесь, что уведомления pu sh все еще работают должным образом.

2) Просмотрите документацию по установке Firebase. Кроме того, обязательно следите за генерацией токенов регистрации FCM с помощью реализации #onNewToken.

3) Приложения, использующие процесс автоинициализации Firebase, и плагин Gradle для преобразования google-сервисов. json в ресурсы не затрагиваются. , Однако приложения, которые создают свои собственные экземпляры FirebaseOptions, должны предоставить действительный ключ API, идентификатор проекта Firebase и идентификатор приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...