TL; DR : 스트림을 플러터로 열어 둘 수 있습니까?
측면 서랍이 메인 화면의 왼쪽에서 상단으로 미끄러지는 일반적인 UI와는 달리 다른 스타일의 앱 서랍이 필요한 특정 UI를 만들었습니다. 디자인은 전체 메인 화면이 오른쪽으로 이동하고 아래쪽에 사이드 바 역할을하는 레이어가있는 것과 비슷합니다.
명확하게 말하면 서랍이 화면 상단에 있고 움직이는 대신에, 그 반대가 내가 원하는 것이라고 생각하십시오. 메인 화면은 상단에, 서랍은 하단 (Z- 인덱스 기준)에 놓고 메인 화면이 움직이기를 원합니다.
내가 한 것은 앱 드로어와 메인 화면에 각각 하나씩 두 개의 위젯을 만들고 스택 위젯과 일부 애니메이션을 사용하여 작동하도록 만들었다는 것입니다. 사용자가 열고 자하는 화면에 대한 피드백을 등록하기 위해 스트림을 사용하여 사이드 바 위젯에서 기본 화면 위젯으로 데이터를 전달하고이를 기본 화면의 로컬 상태에 저장하고이를 기반으로 표시해야하는 모든 것을 보여줍니다. 그.
아래 코드를 첨부하고 있습니다.
이것은 UI가 작동하도록 스택 및 애니메이션을 사용하는 기본 파일입니다.
이것은 내가 스트림을 사용하여 사용자의 피드백을 등록하고 메인 화면으로 보내는 방법입니다.
그리고 이것이 내가 피드백을 받고 어떤 페이지가 표시되어야하는지 보여주는 방법입니다.
내 스트림 / 블록 클래스는 다음과 같습니다.
My main question here is about the approach, is there any better way of doing it? I am asking that because I know streams are not supposed to be left open and that affects the app performance. But with this approach, I have to leave it open all the time as the user should be able to select the desired page at any given time.
Is it a normal practice to leave streams open in such scenarios, can you tell me some cases where streams have to be left open if such cases exist? (Eg. I think autosuggest/search-as-you-type might be using streams all the time, is it so?).
Yes, you can leave a stream open. but it will impact your app performance and in my opinion it's a complex approach for a simple callback action. Here's what i would do:
** in the Drawer's page: // add a callback parameter
final Function(Widget w) onItemTap;
// 서랍의 생성자에 콜백 추가
Drawer(this.onItemTap);
** The Drawer의 제스처 감지기에서 : // 항목을 탭할 때이 콜백을 서랍 페이지를 인스턴스화 한 페이지로 보냅니다.
onTap(){ widget.onItemTap( WidgetToShow() ) },
이제 메인 화면의 어느 곳에서나 드로어 클래스를 인스턴스화 할 때 다음과 같이 사용할 수있는 콜백 매개 변수가 있습니다.
Drawer( onItemTap:(Widget w){
// now you have your widget in the mainScreen, do as you want with it
} )
따라서 최종 서랍 / 메뉴 코드는 다음과 같습니다.
class Drawer extends StatefulWidget {
final Function(Widget w) onItemTap;
Drawer(this.onItemTap);
}
// ....
GestureDetector(
onTap: (){ return widget.onItemTap( WidgetToShow() ); },
),
// ...
다음은 기본 화면 코드입니다.
// ...
stack(
children:[
Drawer( onItemTap:(Widget w){
// now you have your widget in the mainScreen, do as you want with it
} ),
]
),
//...
도움이 된 희망 :)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다