Это минимальный воспроизводимый код.
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()
;