Flutter,Dart -尝试解析来自webist的图像并失败

fcy6dtqo  于 2023-10-22  发布在  Flutter
关注(0)|答案(4)|浏览(133)

我试图从一个在线商店解析数据,而不是得到图像URL,而是得到'/static/platform/frontend/assets/app/image-placeholder.svg'。否则解析工作正常。

错误消息:

一直在尝试解析来自arrow.kz的数据。
我试着从其他在线商店和网站解析相同的数据,没有导致任何变化。
下面是我的代码:`import '包:flutter/material. dart';

import 'package:http/http.dart' as http;
import 'package:html/dom.dart' as dom;
import 'package:xleb/data/article.dart';

class MainPage extends StatefulWidget {
  const MainPage({super.key});

  @override
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  List<Article> articles = [];

  @override
  void initState() {
    getWebsiteData();

    super.initState();
  }

  Future getWebsiteData() async {
    final url = Uri.parse(
        'https://arbuz.kz/ru/collections/249615-pozabottes_o_sebe_#/');
    final response = await http.get(url);
    dom.Document html = dom.Document.html(response.body);

    final titles = html
        .querySelectorAll(' article > main > a')
        .map((e) => e.innerHtml.trim())
        .toList();
    final prices =
        html.querySelectorAll('b').map((e) => e.innerHtml.trim()).toList();

    final urlImages =
        html.querySelectorAll('img').map((e) => e.attributes['src']!).toList();
    print(urlImages);
    print(titles);

    setState(() {
      articles = List.generate(
        titles.length,
        (index) => Article(
          title: titles[index],
          price: prices[index],
          urlImage: urlImages[index],
        ),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: ListView.builder(
            itemCount: articles.length,
            itemBuilder: (context, index) {
              final article = articles[index];
              return ListTile(
                title: Text(article.title),
                subtitle: Text(article.price),
                leading:
                    SizedBox(width: 50, child: Image.network(article.urlImage)),
              );
            }));
  }
}
`
fxnxkyjh

fxnxkyjh1#

您必须在图像URL之前添加主机(在本例中为https://arbuz.kz/)。你可以这样做:

Article(
  title: titles[index],
  price: prices[index],
  urlImage: 'https://arbuz.kz${urlImages[index]'},
),
46scxncf

46scxncf2#

请确保指定图像的扩展名,特别是在使用“.svg”作为图像URL时。使用flutter_svg包。

import 'package:flutter_svg/flutter_svg.dart';

SvgPicture.asset(
  'assets/logo.svg', // Replace with your SVG file's asset path
);
wwodge7n

wwodge7n3#

结果发现网站使用了延迟加载。我稍微修改了一下代码,现在运行得很好。我所做的改变:

final urlImages = html
    .querySelectorAll('a.product-card__link > img')
    .map((e) => e.attributes['v-lazy']!.replaceAll("'", ''))
    .toList();
sbtkgmzw

sbtkgmzw4#

要使用mime svg,你需要使用flutter_svg包。如果你使用这个包,但它不工作,你再次得到一个错误,也许这是因为后端和图像地址。这是来自后端需要设置的ssl证书。(这种情况在网络上发生的比任何其他平台都多)

相关问题