class NewsListViewBuilder extends StatefulWidget {
const NewsListViewBuilder({
super.key,
required this.category,
});
final String category;
@override
State<NewsListViewBuilder> createState() => _NewsListViewBuilderState();
}
class _NewsListViewBuilderState extends State<NewsListViewBuilder> {
var data;
@override
void initState() {
data = NewsService(Dio()).getTopHeadlines(category: widget.category);
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder<List<ArticleModel>>(
future: data,
builder: (context, snapshot) {
if (snapshot.hasData) {
return NewsListView(
results: snapshot.data!,
);
} else if (snapshot.hasError) {
return const SliverToBoxAdapter(
child: Text('Oops Was An Error Pls ...... Try Later ..... '));
} else {
return const SliverToBoxAdapter(
child: Center(
child: CircularProgressIndicator(
backgroundColor: Colors.white,
color: Colors.orange,
)));
}
});
}
}
وهذه صفحة البيانات اللي استلمها
import 'package:__news/models/article_model.dart';
import 'package:dio/dio.dart';
class NewsService {
final Dio dio;
NewsService(this.dio); //entertainment
Future<List<ArticleModel>> getTopHeadlines
({required String category}) async {
try {
var response = await dio.get(
'https://newsdata.io/api/1/news?country=eg&apikey=pub_28251d32085b71e2ec486b53a77e25ee953ba&category=$category');
Map<String, dynamic> jsonData = response.data;
List<dynamic> results = jsonData['results'];
List<ArticleModel> resultsList = [];
for (var result in results) {
ArticleModel articleModel = ArticleModel(
image: result['image_url'],
title: result['title'],
subTitle: result['description']);
resultsList.add(articleModel);
}
return resultsList;
} catch (e) {
return [];
}
}
}