[英]How can I pass Index or ID to any audio package in Flutter
我正在 flutter 中制作一个抽认卡应用程序,它将显示德语到英语的翻译。 我想在每个用户可以通过按下按钮收听的抽认卡上添加德语句子的音频。 将有大约 600 个声音/句子。 这是如何实现的。 请支持,因为它是我的第一个应用程序。
我的 CSV 文件:
德语单词,德语句子,英语单词,英语句子
die Ansage,Hören Sie auf die Ansagen,公告,收听公告
下面是我的代码(原始代码取自 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 文件命名为 s0 s1 s2
itemBuilder: (BuildContext context, int index) {
new Container(
child: TextButton.icon(
icon: Icon(Icons.volume_up),
label: Text('Listen'),
onPressed: () => audioCache.play('s$index.mp3'))
),
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.