【问题标题】:_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' exception thrown while trying to display specific element from API_InternalLinkedHashMap<String, dynamic>' 不是“List<dynamic>”类型的子类型,尝试显示 API 中的特定元素时抛出异常
【发布时间】:2021-05-15 09:55:49
【问题描述】:

我正在尝试在我的 Flutter 应用中集成一个 API,该 API 将不断向用户更新最新的技术新闻。我从 newsapi.org 获取 API,并将其转换为 JSON 对象,存储它并尝试显示它的特定元素。例如,我的 API 有一个名为文章的列表,其中包含各种元素。其中我只想显示“标题”元素,这是我无法做到的。颤振给我一个异常 - 未处理的异常:类型'_InternalLinkedHashMap'不是类型'List'的子类型。这是参考代码---

import 'dart:convert';
import 'dart:ffi';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:http/http.dart';
import 'package:the_laptop_hub_3/app_screens/login.dart';
import 'addSuggestions.dart';
import 'home.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:http/http.dart' as http;
class UpdatesScreen extends StatefulWidget{
  @override
  _UpdatesScreenState createState() => _UpdatesScreenState();
}

class _UpdatesScreenState extends State<UpdatesScreen> {
  List<dynamic>updatesList = List();
  // List listResponse;
  // String stringResponse;
  // Map mapResponse;
  var _currentIndex = 0;
  final tabs = [
    Container(child:Home()),
    Container(child:UpdatesScreen())
  ];

   initState()  {
     fetchData();
    super.initState();
  }

   Future fetchData()async{

    String url = 'https://newsapi.org/v2/everything?domains=pcmag.com&sortBy=publishedAt&apiKey=b8010d33c3224b96b552b75eb026e1ca';
    Response response = await get(url);
    var responseBody = response.body;
    Map list = json.decode(responseBody);
    setState(() {
      updatesList = list['articles'][2];
    });
    print(updatesList.toString());
    return updatesList;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        automaticallyImplyLeading: false,
        backgroundColor: Colors.teal,
        title: Text(
          "UPDATES SCREEN",
          style: TextStyle(

          ),
        ),
        actions: <Widget>[
          IconButton(icon: Icon(Icons.logout),
              onPressed: (){
                Navigator.pushReplacement(
                context,
                MaterialPageRoute(
          builder: (context) => Login(),
                ));              
                }
          )
        ],
      ),
      body: ListView.builder(
          //itemCount: updatesList.length,
        itemBuilder: (context, index){
        return Container(
            decoration: BoxDecoration(
              color: HexColor('#cc99cc')
            ),
            child: Card(
              color: HexColor('#ffffff'),
              child: Padding(
                padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 3.0),
                child: ListTile(
                  onTap: (){},
                  title: Text(
                     'some random text',
                    style: TextStyle(
                      fontSize: 25
                    )
                  ),
                  leading: CircleAvatar(
                    backgroundImage: AssetImage('images/laptopimage_1.jpg'),
                  ),
                )
              ),
            ),
          );
      },
      ),
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.shifting,
        currentIndex: _currentIndex,
        items:[
          BottomNavigationBarItem(
              icon: Icon(Icons.laptop),
              title: Text("Suggestions"),
              backgroundColor: Colors.black45
          ),
          BottomNavigationBarItem(
              icon: Icon(Icons.update),
              title: Text("Updates"),
              backgroundColor: Colors.black45
          ),
        ],
        onTap: (index){
          setState(() {
            _currentIndex = index;

          });
        },
      ),
      floatingActionButton: FloatingActionButton(
        backgroundColor: Colors.transparent,
        child: Icon(Icons.add, size: 50.0),
        hoverElevation: 15.0,
        foregroundColor: Colors.white,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(30.0))
        ),
        onPressed: (){
          navigateToAddSuggestions(context);
        },
      ),
    );
  }
  void navigateToAddSuggestions(BuildContext context){
    Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context)=> AddSuggestions(),
        )
    );
  }

}

【问题讨论】:

    标签: flutter


    【解决方案1】:

    在获取数据功能之前将您的代码更改为:

       class _UpdatesScreenState extends State<UpdatesScreen> {
         Map<String, dynamic>updatesList;
       var _currentIndex = 0;
       final tabs = [
        Container(child:Home()),
        Container(child:UpdatesScreen())
       ];
    
       initState()  {
         fetchData();
        super.initState();
      }`
    

    【讨论】:

    • 我还应该添加演员as Map&lt;String, dynamic&gt;; 吗?如果我不这样做,它会给我一个错误
    • 哦,我错过了。现已更新代码。
    猜你喜欢
    • 2020-07-03
    • 2019-04-03
    • 2021-01-30
    • 1970-01-01
    • 2019-01-26
    • 2021-01-13
    • 2022-11-11
    • 2022-07-21
    • 2021-10-15
    相关资源
    最近更新 更多