如何将索引或ID传递到Flutter中的任何音频包



我正在制作一个闪认卡应用程序,将显示德语到英语翻译。我想在每个抽认卡上添加德语句子的音频,用户可以通过按一个按钮来听。大约有600个声音/句子。如何做到这一点。请支持,因为这是我的第一个应用程序。

my CSV file:

德语单词,德语句子,英语单词,英语句子

die Ansage,Hören Sie auf die Ansagen,announcement,Listen the announcement

下面是我的代码(原始代码取自Github,然后修改):


import 'package:csv/csv.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:transformer_page_view/transformer_page_view.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter-Flashcard',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'German Vocabulary'),
);
}
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: rootBundle.loadString('lib/assets/questions.csv'), //
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
List<List<dynamic>> csvTable =
CsvToListConverter().convert(snapshot.data);
print(csvTable);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: new TransformerPageView(
loop: true,
viewportFraction: 0.8,
transformer: new PageTransformerBuilder(
builder: (Widget child, TransformInfo info) {
return new Padding(
padding: new EdgeInsets.all(10.0),
child: new Material(
elevation: 8.0,
textStyle: new TextStyle(color: Colors.white),
borderRadius: new BorderRadius.circular(10.0),
child: new Stack(
fit: StackFit.expand,
children: <Widget>[
new Positioned(
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Container(
child: new Text(
csvTable[info.index + 1][0],
style: new TextStyle(
fontSize: 24.0,
color: Colors.black,
),
),
alignment: Alignment.center,
),
new Container(
child: new Text(
csvTable[info.index + 1][1],
style: new TextStyle(
fontSize: 24.0,
color: Colors.black,
height: 2
),
),

alignment: Alignment.center,
),  
],
),
left: 10.0,
right: 10.0,
top: 100.0,
)
],
),
),
);
}),
itemCount: csvTable.length - 1),
);
});
}
}

使用下面的代码:

将mp3文件命名为s0s1s2


itemBuilder: (BuildContext context, int index) {
new Container(
child: TextButton.icon(
icon: Icon(Icons.volume_up),
label: Text('Listen'),
onPressed: () => audioCache.play('s$index.mp3'))
),
}

最新更新