я не могу обновить свой продукт, используя базу данных огня в флаттер - PullRequest
0 голосов
/ 01 мая 2020

Сообщение об ошибке

W / NetworkRequest (5093): нет авторизационного токена для запроса
W / StorageUtil (5093): нет авторизационного токена для запроса
W / NetworkRequest (5093): нет авторизационного токена для запроса
E / flutter (5093): [ОШИБКА: flutter / lib / ui / ui_dart_state. cc (157)] Необработанное исключение: ошибочное утверждение: логическое выражение не должно быть нулевым

Вот мой код обновления

Future<bool> updateProduct(String title, String description, File image,
      double price, LocationData locData) async {
    _isLoading = true;
    notifyListeners();
    String imgUrl;
      print("section one");
    final StorageReference storage = FirebaseStorage.instance.ref();
    //final  FirebaseReference reference=FirebaseRe
    final String picture1 =       "1${DateTime.now().millisecondsSinceEpoch.toString()}.jpg";
    StorageUploadTask task1 = storage.child(picture1).putFile(image);
    StorageTaskSnapshot snapshot1 =
        await task1.onComplete.then((snapshot) => snapshot);
        print("section tow");
    task1.onComplete.then((snapshot) async {
      imgUrl = await snapshot.ref.getDownloadURL();
      print("URL printed");
    print(imgUrl);
      final Map<String, dynamic> updateData = {
        'title': title,
        'description': description,
        'image': imgUrl,
        'price': price,
        'loc_lat': locData.latitude,
        'loc_lng': locData.longitude,
        'loc_address': locData.address,
        'userEmail': selectedProduct.userEmail,
        'userId': selectedProduct.userId
      };
      try {
       final    res= await http.put(
            'https://statemarket-337e3.firebaseio.com/products/${selectedProduct.id}.json?auth=${_authenticatedUser.token}',
            body: json.encode(updateData));
                        if(res.statusCode==200){
                          Fluttertoast.showToast(msg: "updated");
                        }else{
                          Fluttertoast.showToast(msg: "Error Found"+res.statusCode.toString());
                        }
        _isLoading = false;
        final Product updatedProduct = Product(
            id: selectedProduct.id,
            title: title,
            description: description,
            image: imgUrl,
            price: price,
            location: locData,
            userEmail: selectedProduct.userEmail,
            userId: selectedProduct.userId);
        _products[selectedProductIndex] = updatedProduct;
       notifyListeners();
        return true;
      } catch (error) {
        _isLoading = false;
        notifyListeners();
        return false;
      }
    });
  }



Вот мой код продукта, где я вызываю свою функцию

 void _submitForm(
      Function addProduct, Function updateProduct, Function setSelectedProduct,
      [int selectedProductIndex]) {
    if (!_formKey.currentState.validate() || (_formData['image'] == null && selectedProductIndex == -1)) {
      return;
    }
    _formKey.currentState.save();
    if (selectedProductIndex == -1) {
      addProduct(
          _titleTextController.text,
          _descriptionTextController.text,
          _formData['image'],
          _formData['price'],
          _formData['location']).then((bool success) {
        if (success) {
          Navigator
              .pushReplacementNamed(context, '/products')
              .then((_) => setSelectedProduct(null));
        } else {
          showDialog(
              context: context,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: Text('Something went wrong'),
                  content: Text('Please try again!'),
                  actions: <Widget>[
                    FlatButton(
                      onPressed: () => Navigator.of(context).pop(),
                      child: Text('Okay'),
                    )
                  ],
                );
              });
        }
      });
    } else {
      updateProduct(
        _titleTextController.text,
        _descriptionTextController.text,
        _formData['image'],
        _formData['price'],
        _formData['location'],
      ).then((_) => Navigator
          .pushReplacementNamed(context, '/products')
          .then((_) => setSelectedProduct(null)));
    }
  }

Любое решение для решения этой проблемы?

...