Нулевой URL в Flutter

#flutter

#flutter

Вопрос:

 import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:campus/Service/Firebase_Firestore_END.dart';

class Profile extends StatefulWidget {
  File _imagefile;

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

class _ProfileState extends State<Profile> {
  String url;


**Use This Method To get URL From Firestore**
  
void getAvatar() async {
    final FirebaseAuth auth = FirebaseAuth.instance;
    final FirebaseUser user = await auth.currentUser();
    final uid = user.uid;
    DocumentSnapshot data = await Firebase_Firestore_END.getAccData(uid) as DocumentSnapshot;
    url= data.data['Avatar'];
    print("URL:" url);
    // return data.data['Avatar'];
  }

  @override
  void initState(){
    getAvatar(); //Call Methor Here
    super.initState();

  }



  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Stack(
          children: <Widget>[
            Container(
              decoration: BoxDecoration(
                  border:
                  Border.all(width: 1, color: Colors.blueGrey),
                  borderRadius:
                  BorderRadius.all(Radius.circular(50))),
              child: CircleAvatar(
                radius: 50,
                backgroundColor: Colors.transparent,
                backgroundImage: widget._imagefile != null
                    ? FileImage(widget._imagefile)
                    **: CachedNetworkImageProvider(url),//Faliled Assertion Here**
              ),
            ),
          ],
        ),
      ),
    );
  }
}

 

В чем проблема с этим кодом? При горячей перезагрузке это работает, но если я перезапущу приложение. Произошла ошибка (url=null). Кто-нибудь может помочь мне найти ошибку? Я пробовал так много способов, но я сталкиваюсь с той же ошибкой. Я не знаю, почему это произошло. Я вызываю функцию установки url в

initState() но каждый раз URL-адрес был нулевым во время запуска

Ответ №1:

Измените этот код:

   String url;
 

Для

   String url = '';
 

а также может изменить этот, потому async что функция возвращает Future<void>

 Future<void> getAvatar() async{
...
}
 

Ответ №2:

Прежде всего, вам нужно инициализировать url с помощью

 String url = ''
 

Но я думаю, что проблема в том, что getAvatar() функция есть async .
Это приводит к завершению кода без ожидания функции. К сожалению, вы не можете await внутри initState .
Оберните часть, в которой вы url задаете setState(); , следующим образом:

 setState((){url = ...});
 

Кроме того, вы можете использовать что-то вроде заполнителя, пока изображение или URL не будут загружены.

Комментарии:

1. почему вы редактируете свой ответ после моего ответа?

Ответ №3:

Возможно, вы использовали одинарную кавычку вместо «для определения и запроса URL-адреса, например:

  setState(() {
      var productJson= json.decode(utf8.decode(response.bodyBytes));
      for(var i in productJson){
        var productIteam=product(i['product_name'], i['id'],i['price'] , i["image_url"], i['off'], i['description']);
         _items.add(productIteam);
      }
    });
 

этот код истинный, потому что используйте «» => i["image_url"]
но этот код неверен
я[‘image_url’]