Как получить доступ к данным блока вне StreamBuilder? - PullRequest
0 голосов
/ 06 июля 2019

У меня есть экран, на котором должна быть кнопка «Поделиться», чтобы поделиться текущим фильмом, загруженным потоком.

Проблема в том, что я не могу понять, как получить текущий фильм, так как у меня просто есть доступ к снимку внутри 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?

...