스트림을 읽은 후 데이터를 삭제하고 싶습니다.
기본적으로 Go의 채널과 동일한 시스템을 원합니다.
그래서 5, 3, 2를 더하면 내 스트림에 5, 3, 2
가 포함됩니다. 내가 읽기를 시작하면 5가되고 내 스트림에 3과 2 등이 포함됩니다.
가능합니까?
편집 : 여기에 일부 코드에 대한 내 문제.
StreamBuilder를 사용하여 데이터를 수신합니다. 상태를 변경하면 마치 데이터를받는 것처럼 내 기능이 다시 트리거됩니다.
child: StreamBuilder<Tag>(
stream: widget.tagStream,
initialData: Tag(),
builder: (BuildContext context, AsyncSnapshot<Tag> snapshot) {
/// This should be trigger only when I receive data
if (mapController.ready && snapshot.hasData) {
tag = snapshot.data;
mapController.move(
LatLng(tag.position.latitude, tag.position.longitude),
mapController.zoom);
}
return RubberBottomSheet(...);
),
여기에 몇 가지 컨텍스트 :
객체를 나타내는 아이콘이있는지도가 있습니다. 아이콘을 클릭하거나 검색 창에서 관련 항목을 검색하면 RubberBottomSheet가 나타나 개체에 대한 정보를 표시합니다. 이를 위해 저는 StreamBuilder를 사용합니다. 그래서 클릭하거나 검색 한 개체를 넣어 고무가 나타나고 채워지도록해야합니다. 또한 사용자에게 개체가 어디에 있는지 알려주기 위해 아이콘을 중앙에 배치해야합니다. 내 문제는 키보드를 열거 나 닫을 때 또는 setState를 사용할 때 (예 : 검색 표시 줄의 모양 변경) 새 데이터를받는 것처럼 StreamBuilder가 자동으로 트리거된다는 것입니다.
죄송합니다. 여기서 시작 했어야했는데 ...
나는 a StreamBuilder
와 비슷한 행동을했고 며칠 동안 해결책을 찾을 수 없었습니다. 대신 내가 한 일은 대신 ListView
데이터를 가져 오는 빌더를 사용 하는 InheritedWidget
것입니다.
따라서 기본적으로 데이터를 스트림 싱크에 넣는 대신 데이터 세터 InheritedWidget
를 a 에 래핑하고 데이터를 변경할 때마다 setState()
다시 ListView
빌드합니다.
NB : StreamBuilder
저도지도에 관여했습니다. 항상지도를 방해하는 것이라고 생각했지만 문제를 해결할 수 없었습니다. 귀하의 경우와 마찬가지로 상태를 변경할 때마다 스트림이 이전과 동일한 데이터로 다시 빌드됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다