Я пытаюсь создать простое приложение musi c. Мои URL-адреса хранятся в коллекции FireStore.
Мой вопрос: Как я могу использовать выпадающее меню, чтобы выбрать URL-адрес и передать его виджету?
Я уже реализовал виджет и работает если я использую жестко запрограммированный URL-адрес в PlayerWidget( url: )
.
Также работает раскрывающееся меню и получает значения из firestore. Однако я не знаю, как передать его в PlayerWidget( url: )
из выпадающего списка.
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ParentProvider(
value: value,
callTimeStamp: callTimeStamp,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('Play'),
onPressed: () {
if (loadedCount == activeCount) {
updatePlayerState("play");
} else {
print(
"Audio not loaded yet");
Fluttertoast.showToast(
msg: "Please wait untill the audio loads",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIos: 1,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 16.0);
}
// player1.aaa();
},
),
SizedBox(
width: 10.0,
),
RaisedButton(
child: Text('Pause'),
onPressed: () {
if (loadedCount == activeCount) {
updatePlayerState("pause");
} else {
print(
"Audio not loaded yet");
Fluttertoast.showToast(
msg: "Please wait untill the audio loads",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIos: 1,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 16.0);
}
// player1.aaa();
},
),
],
),
PlayerWidget(
childAction: updateParent,
url:
'https://firebasestorage.googleapis.com/v0/b/flutter-temp.appspot.com/o/${selectedUrl}' ),
SizedBox(
height: 30.0,
),
// Dropdown menu starts here
StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection("urls").snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
const Text("Loading.....");
else {
List<DropdownMenuItem> urlItems = [];
for (int i = 0; i < snapshot.data.documents.length; i++) {
DocumentSnapshot snap = snapshot.data.documents[i];
urlItems.add(
DropdownMenuItem(
child: Text(
snap.documentID,
style: TextStyle(color: Color(0xff11b719)),
),
value: "${snap.documentID}",
),
);
}
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(Icons.playlist_play ),
SizedBox(width: 50.0),
DropdownButton(
items: urlItems,
onChanged: (urlValue) {
final snackBar = SnackBar(
content: Text(
'Selected music is $urlValue',
style: TextStyle(color: Color(0xff11b719)),
),
);
Scaffold.of(context).showSnackBar(snackBar);
setState(() {
selectedUrl = urlValue;
});
},
value: selectedUrl,
isExpanded: false,
hint: new Text(
"Choose music to play",
style: TextStyle(color: Color(0xff11b719)),
),
)
],
);
}
},
),
],
),
),
),
);
}