Как применить 1 поток к 2 StreamBuilder? - PullRequest
0 голосов
/ 12 апреля 2020

Это минимальный воспроизводимый код.

StreamController<DocumentSnapshot> _controller = StreamController.broadcast();
Stream<DocumentSnapshot> myStream = _controller.stream;

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  _controller.addStream(Firestore.instance.document('user/data').snapshots());
  runApp(MaterialApp(home: Page1()));
}

class Page1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.navigate_next),
        onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (_) => Page2())),
      ),
      body: Center(
        child: StreamBuilder(
          stream: myStream,
          builder: (_, snapshot) {
            if (snapshot.hasData) return Text('${snapshot.data}');
            return CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}

class Page2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: StreamBuilder(
          stream: myStream,
          builder: (_, snapshot) {
            print("$snapshot");
            if (snapshot.hasData) return Text('${snapshot.data}');
            return CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}

Когда вы запускаете этот код, 1-й StreamBuilder отображает данные, но при переходе на 2-ю страницу вы увидите, что мой 2-й StreamBuilder не показывает никаких данных, snapshot.data возвращает null. Кто-нибудь может помочь?

Редактировать: я редактировал пост, и теперь я использую StreamController.broadcast();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...