type 'List<FlashcardsList>' 不是 type 'List<Back>' 的子类型如何解决这个问题?

Posted

技术标签:

【中文标题】type \'List<FlashcardsList>\' 不是 type \'List<Back>\' 的子类型如何解决这个问题?【英文标题】:type 'List<FlashcardsList>' is not a subtype of type 'List<Back>' how to fix this?type 'List<FlashcardsList>' 不是 type 'List<Back>' 的子类型如何解决这个问题? 【发布时间】:2021-03-20 15:00:57 【问题描述】:

您好,我只是想问一下,因为我不知道这意味着什么?我的目标是制作一张可以在正面和背面都产生声音的卡片。我将颤振中的列表文件更改为我认为我知道的方式。我将 Back 类扩展到 FlashcardList 类。并且我为背图添加了我的背课列表,并将我的背图更改为背课列表。

这是我的代码:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:assets_audio_player/assets_audio_player.dart';
import 'package:baybay_app/FlashCards/FlashcardsList.dart';
import 'package:flip_card/flip_card.dart';

class Flashcards extends StatefulWidget 
  final List<FlashcardsList> _flashCardsList = flashcardsList;
  final List<Back>_back = back;
  @override
  _FlashcardsState createState() => _FlashcardsState();


class _FlashcardsState extends State<Flashcards> 
  GlobalKey<FlipCardState> cardKey = GlobalKey<FlipCardState>();
  CarouselController buttonCarouselController = CarouselController();
  List<FlashcardsList> flashCardsList;
  List<Back> back;
  @override
  void initState() 
    super.initState();
    flashCardsList = widget._flashCardsList;
    back = widget._back;
  Widget build(BuildContext context) => Scaffold(
    appBar: AppBar(title: Text('Sample Carousel')),
    body: Column(children: <Widget>[
      CarouselSlider.builder(
        itemBuilder: (context, index) 
          return     FlipCard(
                  front: ListTile(
                    onLongPress: () 
                      onPlayAudio(index);
                    ,
                    title: Container(
                      child: Image(
                          image: AssetImage(
                              widget._flashCardsList[index].pictures1)),
                    ),

                  ),
                  back: ListTile(
                      title: Container(
                        child: Image(
                            image: AssetImage(
                                widget._back[index].pictures1)),
                      ),
                    ),


          );
        ,
        itemCount: widget._flashCardsList.length,
        options: CarouselOptions(
          autoPlay: false,
          enlargeCenterPage: true,
          viewportFraction: 0.9,

          initialPage: 2,
        ),
      ),
    ]),
  );
  void onPlayAudio(index) async
    AssetsAudioPlayer assetsAudioPlayer = AssetsAudioPlayer();
    assetsAudioPlayer.open(
        Audio(widget._flashCardsList[index].sound1)
    );
  
  void PlayAudio(index) async
    AssetsAudioPlayer assetsAudioPlayer = AssetsAudioPlayer();
    assetsAudioPlayer.open(
        Audio(widget._flashCardsList[index].sound2)
    );
  

这是我的列表文件:

import 'package:assets_audio_player/assets_audio_player.dart';
class FlashcardsList
  final String pictures1;
  final String name;
  final String sound1;
  final String pictures2;
  final String sound2;
  FlashcardsList(
    this.pictures1,
    this.name,
    this.sound1,
    this.pictures2,
    this.sound2
  );
// ignore: empty_constructor_bodies


final flashcardsList = [
  FlashcardsList(
    pictures1: 'assets/Ba.PNG',
    name: 'Ba',
    sound1: 'audioAssets/Ba.mp3',

  ),
  FlashcardsList(
    pictures1: 'assets/KA.PNG',
    name: 'Ka',
    sound1: 'audioAssets/Ka.mp3',

  ),
  FlashcardsList(
      pictures1: 'assets/KA.PNG',
      name: 'Ka',
      sound1: 'audioAssets/Ka.mp3',

  )

];

FlashcardsList instance = FlashcardsList(pictures1:'assets/Ba,PNG', name: 'Ba', sound1:'assets/Think of Me Instrumental (1).mp3');

class Back extends FlashcardsList
  String picture2;
  String Sound2;
  Back(
    this.picture2,
    this.Sound2
  );


final back = [
  FlashcardsList(pictures1: 'assets/A.PNG',
      sound1: 'audioAssets/La.mp3'),

];

顺便说一句,我是新来的。谢谢你,请帮助我!

【问题讨论】:

你的命名风格非常混乱。不是列表的事物被命名为“列表”,事物以复数形式命名,即使它们只是一个元素,变量被无缘无故地编号。如果您的命名令人困惑,则通常表明您对这些事情的作用感到困惑。当您尝试为变量找到合适的名称时,您的困惑也许会消除。 【参考方案1】:

突出显示引发错误的行总是一个好习惯

错误消息意味着您将类型(类)FlashcardList 的列表(数组)分配给需要返回类型列表的对象。所以你必须处理类型不匹配

【讨论】:

【参考方案2】:

问题出在您的列表文件中,这部分代码:

final back = [
  FlashcardsList(pictures1: 'assets/A.PNG',
      sound1: 'audioAssets/La.mp3'),
];

您正在将 Flashcard 类型的项目分配给您指定的 back 数组,该数组应该是 Back 类型的项目数组。 将抽认卡更改为 Back 将解决此问题。

【讨论】:

以上是关于type 'List<FlashcardsList>' 不是 type 'List<Back>' 的子类型如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Json 错误是 * type 'List<dynamic>' is not a subtype of type 'String'*

如何在 Sharedpreferences 中保存 List<type>

在 Play Framework 中使用 WHERE 子句返回 List<Type>

Flutter - type '_InternalLinkedHashMap<String, dynamic> 不是 List<dynamic> 类型的子类型

type _InternalLinkedHashMap<String, dynamic> 不是 List<dynamic> 类型的子类型

将 JSON 对象反序列化为 List<type> 不适用于 asmx 服务