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> 类型的子类型