我试图从一个在线商店解析数据,而不是得到图像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)),
);
}));
}
}
`
4条答案
按热度按时间fxnxkyjh1#
您必须在图像URL之前添加主机(在本例中为
https://arbuz.kz/
)。你可以这样做:46scxncf2#
请确保指定图像的扩展名,特别是在使用“.svg”作为图像URL时。使用flutter_svg包。
wwodge7n3#
结果发现网站使用了延迟加载。我稍微修改了一下代码,现在运行得很好。我所做的改变:
sbtkgmzw4#
要使用mime svg,你需要使用flutter_svg包。如果你使用这个包,但它不工作,你再次得到一个错误,也许这是因为后端和图像地址。这是来自后端需要设置的ssl证书。(这种情况在网络上发生的比任何其他平台都多)