#flutter #url #null #isnull #networkimageview
Вопрос:
Я столкнулся с этой ошибкой, и я не понимаю, почему ниже новостного контента, как на изображении, появляется это красное пространство с сообщением об ошибке… Что мне следует сделать, чтобы устранить эту проблему?
class _BandiPageState extends State<BandiPage> with SingleTickerProviderStateMixin {
CategoryPostBandi bandiPostService = CategoryPostBandi();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FutureBuilder<List>(
future: bandiPostService.getCategoryPostBandi(),
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data!.isEmpty) {
return const Center(
child: Text("Nessun post disponibile"),
);
}
return ListView.builder(
itemCount: snapshot.data?.length, // it was 15
itemBuilder: (context, i) {
return Card(
margin: const EdgeInsets.all(10),
elevation: 5,
shadowColor: Colors.black26,
child: InkWell(
child: ClipRRect(
borderRadius: BorderRadius.circular(5),
child: Container(
height: 110,
color: Colors.white,
child: Row(
children: <Widget>[
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
),
child: Image.network(
snapshot.data![i]["_embedded"]["wp:featuredmedia"][0]["source_url"],
width: 150,
height: double.infinity,
fit: BoxFit.cover,
),
),
const SizedBox(width: 15),
Expanded(
child: Padding(
padding: const EdgeInsets.all(5),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(snapshot.data![i]["title"]["rendered"],
overflow: TextOverflow.ellipsis,
maxLines: 3,
softWrap: true,
textAlign: TextAlign.left,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontFamily: "Raleway",
fontSize: 14),
),
const SizedBox(height:5),
Text(snapshot.data![i]["content"]["rendered"]
.toString()
.replaceAll("<p>", "")
.replaceAll("</p>", "")
.replaceAll("<strong>", "")
.replaceAll("</strong>", "")
.replaceAll("<b>", "")
.replaceAll("</b>", "")
.replaceAll("<h3>", "")
.replaceAll("<h2>", "")
.replaceAll("<h1>", "")
.replaceAll("<h4>", "")
.replaceAll("<h5>", "")
.replaceAll("<h6>", "")
.replaceAll("<section>", "")
.replaceAll("<style>", "")
.replaceAll("</style>", "")
.replaceAll("<a>", "")
.replaceAll("</a>", "")
.replaceAll("</div>", "")
.replaceAll("<div>", ""),
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: const TextStyle(
fontFamily: "Raleway",
color: Colors.black54,
fontSize: 12,
),
),
// Row(
// children: [
// Icon(Icons.menu_book, color: Colors.blue[900]),
// const SizedBox(width: 10,),
// const Text("Leggi articolo", style: TextStyle(fontFamily: "Raleway",color: Colors.black, fontSize: 14),),
// ],
// ),
],
),
),
),
//Icon(Icons.arrow_forward_ios, color: Colors.blue),
],
),
),
),
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => ArticlePage(data: snapshot.data?[i]),
),
);
},
),
);
},
);
} else if (snapshot.hasError) {
return Center(
child: Text(snapshot.error.toString()),
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
},
),
),
);
}
}
Комментарии:
1. Похоже, URL — адрес не существует в качестве пути к изображению, вместо того, чтобы просто использовать
!
проверкуdata==null?defaultPath:path
2. Как я должен это закодировать? Не могли бы вы написать это здесь, пожалуйста?
3. это понравится
snapshot.data![i]["_embedded"]["wp:featuredmedia"][0]["source_url"]==null?Text("could not found"): Image.network()
. также могут быть другие ошибки в разных виджетах, я бы сказал, проверьтеCard
виджет верхнего уровня, а затем назначьте их.4. Да , я получаю эту ошибку: тип аргумента «Виджет» не может быть присвоен типу параметра «Строка».
5. Можете ли вы включить ответ api ? эти ошибки означают, что вам просто нужно передать
String
значение ,лучше попробуйте с помощью after childchild: checkUphere
, а затем назначьтеImage.network(
Ответ №1:
Проверьте свой API, он не предоставляет никаких данных в поле url
только для этого конкретного элемента, который не отображался. Все остальные элементы отображаются соответствующим образом.