аудио плеер не работает
Если прописать путь к аудио файлу вручную, плеер работает.
_path = '/storage/emulated/0/Music/p.mp3';
Если создать путь к аудио файлу с помощью метода, то не работает.
Создание метода
void _funPath(int i, String add) async {
_ara = await getExternalStorageDirectories();
switch(i) {
case 0:
setState(() {
//Phone-> /storage/emulated/0
_path = _ara[0].parent.parent.parent.parent.path + add;
});
break;
case 1:
setState(() {
//Card-> /storage/extSdCard
_path = _ara[1].parent.parent.parent.parent.path + add;
});
break;
case 2:
setState(() {
//Phone-> /storage/emulated/0/Android/data/ru.site.f1/files
_path = _ara[0].path + add;
});
break;
case 3:
setState(() {
//Card-> /storage/extSdCard/Android/data/ru.site.f1/files
_path = _ara[1].path + add;
});
break;
}
}
Реализация метода
_funPath(0, '/Music/p.mp3');
Причем, с помощью метода путь создается правильно, для проверки, я его вывожу вверху экрана, на скриншоте это видно. Ошибка в функции. Подскажите где. Далее, полный код и скриншот.
main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
import 'package:path_provider/path_provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Name App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Name Page'),
),
body: MyHomePage(),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _path = '';
AudioPlayer _player;
List _ara = <Directory>[];
@override
void initState() {
super.initState();
//Phone
//_path = '/storage/emulated/0/Music/p.mp3';
//_funPath(0, '/Music/p.mp3');
//Card
//_path = '/storage/extSdCard/MyMusic/b.mp3'
//_funPath(1, _path, '/MyMusic/b.mp3');
//Phone
// /storage/emulated/0/Android/data/ru.site.f1/files
//_funPath(2, _path, '/disco.mp3');
//Card
// /storage/extSdCard/Android/data/ru.site.f1/files
//_funPath(2, _path, '/disco.mp3');
//ЕСЛИ ПРОПИСАТЬ ПУТЬ В РУЧНУЮ, РАБОТАЕТ
//_path = '/storage/emulated/0/Music/p.mp3';
//ЕСЛИ С ПОМОЩЬЮ МЕТОДА, ТО НЕ РАБОТАТЕ, НО ПУТЬ ВЫВОДИТСЯ
_funPath(0, '/Music/p.mp3');
_player = AudioPlayer();
_funSourceAudio();
}
@override
void dispose() {
super.dispose();
_player.dispose();
}
void _f1() {
setState(() {
});
}
void _funPath(int i, String add) async {
_ara = await getExternalStorageDirectories();
switch(i) {
case 0:
setState(() {
//Phone-> /storage/emulated/0
_path = _ara[0].parent.parent.parent.parent.path + add;
});
break;
case 1:
setState(() {
//Card-> /storage/extSdCard
_path = _ara[1].parent.parent.parent.parent.path + add;
});
break;
case 2:
setState(() {
//Phone-> /storage/emulated/0/Android/data/ru.site.f1/files
_path = _ara[0].path + add;
});
break;
case 3:
setState(() {
//Card-> /storage/extSdCard/Android/data/ru.site.f1/files
_path = _ara[1].path + add;
});
break;
}
}
void _funSourceAudio() async {
await _player.setFilePath(_path);
}
void _funPlay() {
_player.play();
setState(() {});
}
void _funPause() {
_player.pause();
setState(() {});
}
void _funStop() {
_player.stop();
setState(() {});
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Align(
alignment: Alignment.topLeft,
child: Text(
_path, //ДЛЯ ПРОВЕРКИ
style: TextStyle(
fontSize: 20.0,
),
),
),
Align(
alignment: Alignment.center,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
InkWell(
onTap: () { _funPlay(); },
child: Icon(
Icons.play_arrow_rounded,
color: (_player.playing == false) ? Colors.pink : Colors.indigo,
size: 64.0
),
),
InkWell(
onTap: () { _funPause(); },
child: Icon(
Icons.pause_rounded,
color: (_player.playing) ? Colors.pink : Colors.indigo,
size: 64.0
),
),
InkWell(
onTap: () { _funStop(); },
child: Icon(
Icons.stop_rounded,
color: (_player.playing) ? Colors.pink : Colors.indigo,
size: 64.0
),
),
],
),
),
],
);
}
}
