this is my api_service.dart
@RestApi(baseUrl: ApiConstant.baseUrl)
abstract class HomeApiService {
factory HomeApiService(Dio dio, {String baseUrl}) = _HomeApiService;
@GET('curated')
@Headers(<String, dynamic>{
'Content-Type': 'application/json',
'Authorization': ApiConstant.pexelAPIKey,
})
Future<ImageModel> getCuratedWallpapers(
@Query('page') int page,
@Query('per_page') int perPage,
);
}
this is my repository
type here
class HomeRepository {
late Dio _dio;
late HomeApiService homeApiService;
HomeRepository() {
_dio = Dio();
homeApiService = HomeApiService(_dio);
_dio.interceptors.add(
PrettyDioLogger(
requestHeader: true,
requestBody: true,
responseBody: true,
responseHeader: false,
compact: false,
),
);
homeApiService = HomeApiService(_dio, baseUrl: ApiConstant.pexelAPIKey);
}
Future<ImageModel> fetchCuratedWallpapers(int page, int perPage) async {
return homeApiService.getCuratedWallpapers(
page,
perPage,
);
}
}
my state file
type here
final class HomeScreenInitial extends HomeScreenState {}
final class LoadingHomeView extends HomeScreenState {}
final class NoHomeScreenView extends HomeScreenState {}
final class ErrorHomeScreenView extends HomeScreenState {
final String msg;
ErrorHomeScreenView(this.msg);
}
final class ReceivedHomeScreenView extends HomeScreenState {
final ImageModel imageData;
ReceivedHomeScreenView(this.imageData);
}
my cubit class
class HomeScreenCubit extends Cubit<HomeScreenState> {
final HomeRepository _homeRepository;
HomeScreenCubit(this._homeRepository) : super(HomeScreenInitial());
Future<void> getPhotos(int page, int perPage) async {
try {
emit(LoadingHomeView());
final ImageModel imageData =
await _homeRepository.fetchCuratedWallpapers(page, perPage);
debugPrint(' cubit log >>>>> $imageData');
if (imageData.photos!.isEmpty) {
emit(NoHomeScreenView());
} else {
emit(ReceivedHomeScreenView(imageData));
}
} catch (e) {
emit(ErrorHomeScreenView("Error loading photos: ${e.toString()}"));
}
}
}
My ui
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
late HomeScreenCubit _cubit;
List<Photos> photos = [];
List<TestModel> test = [];
ImageModel? imageModel;
int page = 1;
int perPage = 40;
@override
void initState() {
_cubit = BlocProvider.of<HomeScreenCubit>(context);
super.initState();
// _cubit.getPhotos(page, perPage);
_cubit.getPhotos(page, perPage);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
surfaceTintColor: Colors.transparent,
title: brandName(),
elevation: 0.0,
toolbarHeight: kToolbarHeight,
),
body: BlocListener<HomeScreenCubit, HomeScreenState>(
listener: (context, state) {
if (state is ReceivedHomeScreenView) {
// test = state.testModel;
imageModel = state.imageData;
photos = state.imageData.photos!;
debugPrint('images length >>>> ${photos.length}');
}
},
child: Container(
alignment: Alignment.topCenter,
padding: const EdgeInsets.symmetric(
horizontal: AppDimens.appHPadding10,
vertical: AppDimens.appVPadding10,
),
child: SingleChildScrollView(
physics: const ScrollPhysics(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
searchField(
hintText: 'Search...',
),
Gap(height: AppDimens.appVPadding10),
waterMark(),
Gap(height: AppDimens.appVPadding10),
SizedBox(
height: 60,
child: ListView.separated(
separatorBuilder: (context, index) => const SizedBox(
width: 10,
),
shrinkWrap: true,
scrollDirection: Axis.horizontal,
itemCount: 15,
itemBuilder: (BuildContext context, int index) => Container(
height: 50,
width: 120,
decoration: BoxDecoration(
color: Colors.grey.withOpacity(0.3),
borderRadius: BorderRadius.circular(8)),
),
),
),
Gap(height: AppDimens.appVPadding20),
BlocConsumer<HomeScreenCubit, HomeScreenState>(
listener: (context, state) {
// TODO: implement listener
},
builder: (context, state) {
if (state is LoadingHomeView) {
return const Center(child: CircularProgressIndicator());
}
if (state is NoHomeScreenView) {
return Center(
child: Text(
'No Images Currently Available',
style: AppTextStyle.semiBold20(color: Colors.black),
),
);
}
if (state is ErrorHomeScreenView) {
return Center(child: Text(state.msg));
}
if (state is ReceivedHomeScreenView) {
return GridView.builder(
shrinkWrap: true,
physics: const BouncingScrollPhysics(),
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, childAspectRatio: 4 / 7),
itemCount: test.length,
itemBuilder: (BuildContext context, int index) {
var img = test[index];
return Card(
color: Colors.blue,
child: Center(child: Text(img.email!)),
);
});
}
return Container();
},
),
],
),
),
),
),
);
}
}
and retrofit for api call and bloc cubit for state management but im unable to call API please can anyone help me out im stuck in this from 2 days i couldn’t able figure out shows this error
and as shown in screen shot it show that error even im providing a correct api key and base url. dont know why somewhere i did mistake.
New contributor
Sundar.dev is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.