Код:
final ref = Firestore.instance.document('some/path');
class MainPage extends StatefulWidget {
@override
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
Stream _stream;
@override
void initState() {
super.initState();
_stream = ref.snapshots().map((snapshot) {
// <--------------------------------------------------------------- line 1
return snapshot.data;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: _stream,
builder: (_, snapshot) {
if (snapshot.hasData) {
return RaisedButton(
onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (_) => Page2())),
child: Text("Navigate"),
);
}
return CircularProgressIndicator();
},
),
);
}
}
class Page2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: RaisedButton(
onPressed: () => ref.updateData({'key': "value"}), // <------ line 2
child: Text('Update data'),
),
);
}
}
Этот код воспроизводим, ошибки времени компиляции нет. Позвольте мне дать вам обзор.
Есть 2 экрана Screen1
и Screen2
. На первом экране я настроил StreamBuilder
, который прослушивает значение, предоставленное с помощью _stream
. Все идет нормально.
Но когда я перехожу на Screen2
(см. line 2
) и обновляю с него сервер, снимок Screen1
снова создается (см. line 1
). Как я могу отменить это Stream
, чтобы не беспокоиться о том, когда Screen1
не видно?