Я делаю мобильное приложение с помощью флаттера. И я использую построитель потоков для этого экрана. Я не понимаю, что ошибаюсь в коде. Не могли бы вы помочь мне в этом. Я использую код и снимок экрана для этой конкретной строки, которая вызывает проблему.
var timeSelected = 'Click here';
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
'Time Slot:',
style: TextStyle(color: Colors.white),
),
Spacer(),
GestureDetector(
onTap: () {
_asyncInputDialog(context);
//_displayDialog();
},
child: StreamBuilder(stream: cartManager.getTimeSlotSelected,
initialData: timeSelected,
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasData){
timeShow(snapshot,);
}
else if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
return Center(
child: Container(
child: Text('Select time slot'),
),
);
},)
),
],
),
Это диалоговое окно с предупреждением отобразится, когда я нажму на текст строки:
_asyncInputDialog(
BuildContext context,
) {
return showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Center(child: Text('Available Time Slot')),
content: TEAlertDialogContent(),
actions: <Widget>[
new FlatButton(
child: new Text('CANCEL'),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
});
}
Когда я получу значение из showdialog, я сохраню значение в streamcontroller, который присутствует в CartManager.
static StreamController<Timeslot> timeSlotController = BehaviorSubject();
timeSlotSelected(Timeslot time){
timeSlotController.sink.add(time);
}
get getTimeSlotSelected{
return timeSlotController.stream;
}
И мы вызываем вышеуказанный метод в свойстве stream контроллера stream и получаем снимок. Это метод, который вызывается, когда в нашем снимке есть данные:
Widget timeShow(AsyncSnapshot<Timeslot> snapshot ) {
timeSelected = '${snapshot.data.firstTimeSlot}-${snapshot.data.secondTimeSlot}';
timeslotid = snapshot.data.id.toString();
return Text(timeSelected);
}
Но я получаю сообщение об ошибке: тип BehaviorSubject не является подтипом типа Stream. Сообщите мне, в чем я ошибаюсь. Я также поделился снимком экрана, показывающим эту ошибку.