Невозможно использовать переменную в качестве URL-адреса в сетевом изображении, но использование URL-адреса непосредственно внутри параметра работает нормально. Показывает ошибку: нет хоста, указанного в URI

#flutter #dart #flutter-layout #flutter-image

#flutter #dart #flutter-layout #flutter-image

Вопрос:

Здесь сетевой образ не загружается, когда я передаю переменную ImageUrl внутри него. Но если я использую URL-адрес непосредственно внутри параметра, тогда он работает нормально. Как мне решить эту проблему, поскольку мне нужно взять URL-адрес из FirebaseFirestore, поэтому я должен сохранить его внутри строковой переменной.

Выполнение этого работает нормально — NetworkImage('https://images.ctfassets.net/3s5io6mnxfqz/6ZImCEzx6UuvuKaAiZEDDN/50479ee4a0902deb4eb1bab720ce248a/image1.jpg');

Но это не работает — NetworkImage(imageURL);

 class _MainOrderScreenState extends State<MainOrderScreen> {
  final _auth = FirebaseAuth.instance;
  FirebaseFirestore _firestore = FirebaseFirestore.instance;
  
  String imageURL =
      'https://images.ctfassets.net/3s5io6mnxfqz/6ZImCEzx6UuvuKaAiZEDDN/50479ee4a0902deb4eb1bab720ce248a/image1.jpg';

 

  @override
  Widget build(BuildContext context) {
    return SafeArea(
        child: Scaffold(
      body: Container(
        padding: EdgeInsets.symmetric(vertical: 20, horizontal: 20),
        child: Column(
          children: [
            Text(
              'currently serving:',
              style: kTiffinzoTitle.copyWith(fontSize: 40),
            ),
            Image(
              image: imageURL != null
                  ? NetworkImage(imageURL)
                  : null,
              width: 200,
            ),
            Container(
              decoration: kButtonStyle,
              child: FlatButton(
                child: Text('Log out'),
                onPressed: () {
                  _auth.signOut();
                  Navigator.pop(context);
                },
              ),
            )
          ],
        ),
      ),
    ));
  }
}
  

Ответ №1:

Мне пришлось закомментировать несколько строк, но кроме этого я воспроизвел ваш точный код в DartPad. Код работает так, как ожидалось. Изображение также загружено, как и ожидалось. Пожалуйста, смотрите Код ниже :

 import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MainOrderScreen(),
    );
  }
}

class MainOrderScreen extends StatefulWidget {
  MainOrderScreen({Key key}) : super(key: key);

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

class _MainOrderScreenState extends State<MainOrderScreen> {
  //final _auth = FirebaseAuth.instance;
  //FirebaseFirestore _firestore = FirebaseFirestore.instance;

  String imageURL =   'https://images.ctfassets.net/3s5io6mnxfqz/6ZImCEzx6UuvuKaAiZEDDN/50479ee4a0902deb4eb1bab720ce248a/image1.jpg';

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Container(
          padding: EdgeInsets.symmetric(vertical: 20, horizontal: 20),
          child: Column(
            children: [
              Text(
                'currently serving:',
                //style: kTiffinzoTitle.copyWith(fontSize: 40),
              ),
              Image(
                image: imageURL != null ? NetworkImage(imageURL) : null,
                width: 200,
              ),
              Container(
                //decoration: kButtonStyle,
                child: FlatButton(
                  child: Text('Log out'),
                  onPressed: () {
                    //_auth.signOut();
                    Navigator.pop(context);
                  },
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}