Aparentemente a imagem referente ao filme "The Big Leboswki" na url da API, retorna um "Not Found" ao invés de uma imagem. Fiz uma substituição da imagem para outro link sem interferir na API/json e sem mexer nos parâmetros das classes. Como o erro é somente no filme específico, so fiz a checagem desse filme. Caso seja ele, mude a imagem para outra.
Para o arquivo movie_screen.dart
import 'package:bilheteria_panucci/logic/cubit/theme_cubit.dart';
import 'package:flutter/material.dart';
import 'package:bilheteria_panucci/components/movie_screen/tab_bar_movie.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../components/movie_screen/poster.dart';
import '../components/movie_screen/poster_card.dart';
import '../models/movie.dart';
class MovieScreen extends StatelessWidget {
const MovieScreen({super.key, required this.movie});
final Movie movie;
final String notFound =
"https://user-images.githubusercontent.com/24848110/33519396-7e56363c-d79d-11e7-969b-09782f5ccbab.png";
@override
Widget build(BuildContext context) {
final themeCubit = context.read<ThemeCubit>();
themeCubit.changeTheme(movie.genre);
return Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Stack(
children: [
!(movie.name == "The Big Lebowski")
? Poster(imageURL: movie.imageURI)
: Poster(imageURL: notFound),
PosterCard(
title: movie.name,
genre: movie.genre,
classification: movie.classification,
duration: movie.duration,
),
],
),
),
Expanded(child: TabBarMovie(movie: movie)),
],
),
);
}
}
E para o arquivo movie_card.dart
import 'package:flutter/material.dart';
import 'package:bilheteria_panucci/screens/movie_screen.dart';
import '../models/movie.dart';
class MovieCard extends StatelessWidget {
const MovieCard({Key? key, required this.movie}) : super(key: key);
final Movie movie;
final String notFound =
"https://user-images.githubusercontent.com/24848110/33519396-7e56363c-d79d-11e7-969b-09782f5ccbab.png";
@override
Widget build(BuildContext context) {
return Column(
children: [
Expanded(
child: Card(
clipBehavior: Clip.hardEdge,
child: InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MovieScreen(movie: movie),
),
);
},
child: movie.imageURI != null
? Ink(
width: double.infinity,
decoration: BoxDecoration(
image: !(movie.name == "The Big Lebowski")
? DecorationImage(
image: NetworkImage(movie.imageURI!),
fit: BoxFit.cover)
: DecorationImage(
image: NetworkImage(notFound)),
),
)
: Ink(
child: const Center(
child: Icon(Icons.error),
),
))),
),
Text(
movie.name,
style: Theme.of(context).textTheme.displaySmall,
)
],
);
}
}
Devem existir soluções melhores e mais fáceis, mas eu só pensei em fazer logo. Abraço