У меня есть экран, на котором должна быть кнопка «Поделиться», чтобы поделиться текущим фильмом, загруженным потоком.
Проблема в том, что я не могу понять, как получить текущий фильм, так как у меня просто есть доступ к снимку внутри StreamBuilder , а кнопка общего доступа находится на AppBar .
Я попытался создать переменную высокой области действия, загрузить ее в StreamBuilder и получить доступ к ней из панели приложений, но она возвращает ноль:
class _MoviePageState extends State<MoviePage> {
MovieModel _movie = null;
@override
Widget build(BuildContext context) {
movieBloc.fetchMovie(widget.movieId);
return Scaffold(
body: SafeArea(
child: Stack(
children: <Widget>[
Container(
color: Colors.transparent,
),
StreamBuilder(
stream: movieBloc.movie,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
_movie = snapshot.data as MovieModel;
return ListView(
children: <Widget>[
MovieHeader(movie: _movie),
Container(
padding: EdgeInsets.only(top: 45, bottom: 15, left: 15, right: 15),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Sinopse:', style: Theme.of(context).textTheme.title),
HtmlWidget(
_movie.sinopsis,
bodyPadding: EdgeInsets.only(top: 15),
textStyle: TextStyle(color: Colors.grey),
)
],
),
)
]
);
}
return Center(child: CircularProgressIndicator());
},
),
AppBar(
backgroundColor: Colors.transparent,
elevation: 0.0,
actions: <Widget>[
PopupMenuButton(
icon: Icon(Icons.more_vert),
itemBuilder: (BuildContext context) {
return <PopupMenuItem>[
PopupMenuItem(
child: GestureDetector(
child: Text('Partilhar'),
onTap: () {
// Returns null
final movieSlug = _movie.slug;
Share.share('https://imdb.com/movie/${movieSlug}');
},
),
)
];
},
)
],
),
]
),
),
);
}
}
Как получить доступ к текущему фильму в потоке за пределами StreamBuider?