type 'List<FlashcardsList>' 不是 type 'List<Back>' 的子类型如何解决这个问题?
type 'List<FlashcardsList>' is not a subtype of type 'List<Back>' how to fix this?
你好,我只是想问一下,因为我不知道这是什么意思?我的目标是制作一张可以在正面和背面的卡片上发出声音的卡片。我将 flutter 中的列表文件更改为我认为我知道的方式。我将 Back class 扩展到 FlashcardList class。并且我添加了一张我的背影列表 class 作为背影,我把我的背影改成了背影 class.
的列表
这是我的代码:
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'),
];
顺便说一句,我是 flutter 的新手。谢谢,请帮助我!
突出显示引发错误的行始终是一个好习惯
该错误消息意味着您将 (class) FlashcardList 类型的列表(数组)分配给需要返回类型列表的对象。所以你必须处理类型不匹配
问题出在你的列表文件的这部分代码中:
final back = [
FlashcardsList(pictures1: 'assets/A.PNG',
sound1: 'audioAssets/La.mp3'),
];
您正在将一个 Flashcard 类型的项目分配给您指定的背面数组,该数组应该是一个 Back 类型的项目数组。
将抽认卡更改为返回即可解决问题。
你好,我只是想问一下,因为我不知道这是什么意思?我的目标是制作一张可以在正面和背面的卡片上发出声音的卡片。我将 flutter 中的列表文件更改为我认为我知道的方式。我将 Back class 扩展到 FlashcardList class。并且我添加了一张我的背影列表 class 作为背影,我把我的背影改成了背影 class.
的列表这是我的代码:
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'),
];
顺便说一句,我是 flutter 的新手。谢谢,请帮助我!
突出显示引发错误的行始终是一个好习惯
该错误消息意味着您将 (class) FlashcardList 类型的列表(数组)分配给需要返回类型列表的对象。所以你必须处理类型不匹配
问题出在你的列表文件的这部分代码中:
final back = [
FlashcardsList(pictures1: 'assets/A.PNG',
sound1: 'audioAssets/La.mp3'),
];
您正在将一个 Flashcard 类型的项目分配给您指定的背面数组,该数组应该是一个 Back 类型的项目数组。 将抽认卡更改为返回即可解决问题。