简体   繁体   中英

The method isn't defined for the class

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM