I am trying to create an app using an api key provided by newsapi.org but whenever I try to run the project the following error comes:
lib/pages/news_page.dart:17:5: Error: 'News' isn't a type.
News news = News();
^^^^
lib/pages/news_page.dart:17:17: Error: The method 'News' isn't defined for the class '_NewsPageState'.
- '_NewsPageState' is from 'package:cheapshorts/pages/news_page.dart' ('lib/pages/news_page.dart').
Try correcting the name to the name of an existing method, or defining a method named 'News'.
News news = News();
^^^^
FAILURE: Build failed with an exception.
The code for the page is following
import 'package:cheapshorts/models/fetch_data.dart';
import 'package:flutter/material.dart';
class NewsPage extends StatefulWidget {
const NewsPage({Key? key, required this.category}) : super(key: key);
final String category;
@override
State<NewsPage> createState() => _NewsPageState();
}
class _NewsPageState extends State<NewsPage> {
var newslist;
bool _isLoading = true;
void getNews() async {
News news = News();
await news.getNews(widget.category);
newslist = news.news;
setState(() {
_isLoading = false;
});
}
@override
void initState() {
_isLoading = true;
super.initState();
getNews();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _isLoading?const Center(child:LinearProgressIndicator()):PageView.builder(
itemCount: newslist?.length,
scrollDirection: Axis.vertical,
itemBuilder: (context, index) {
return Column(
children: [
SizedBox(
height: 250,
width: MediaQuery.of(context).size.width,
child: FittedBox(
fit: BoxFit.fill,
child: Image.network(
newslist.urlToImage,
fit: BoxFit.fill,
)),
),
Align(
alignment: Alignment.centerLeft,
child: Padding(
padding: const EdgeInsets.all(20),
child: Text(
newslist.title,
style: const TextStyle(fontSize: 22),
),
)),
Padding(
padding: const EdgeInsets.only(left: 20, right: 20),
child: Text(
newslist.content,
style: Theme.of(context).textTheme.subtitle1,
),
)
],
);
}),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.pop(context);
},
backgroundColor: Colors.yellow,
child: const Icon(Icons.arrow_back),
),
);
}
}
The fetch_data code is
import 'dart:convert';
import 'package:cheapshorts/models/get_articles.dart';
import 'package:http/http.dart' as http;
class News {
List<Article> news = [];
Future<void> getNews(String category) async{
String url = "https://newsapi.org/v2/top-headlines?country=in&category=$category&apiKey=$apiKey";
Uri uri = Uri.parse(url);
var response = await http.get(uri);
var jsonData = jsonDecode(response.body);
if(jsonData['status'] == "ok"){
jsonData["articles"].forEach((element){
if(element['urlToImage'] != null && element['description'] != null){
Article article = Article(
title: element['title'],
author: element['author'],
description: element['description'],
urlToImage: element['urlToImage'],
publshedAt: DateTime.parse(element['publishedAt']),
content: element["content"],
articleUrl: element["url"],
);
news.add(article);
}
});
}
}
}
I have tried running flutter clean and restarting vs code but the error still persists. The api key has been omitted.
i think you have to add import the News class into your news_page.dart
Probably it's the import issue. You can use the yellow suggestion light to import that class or you can do it manually at the top.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.