sh0seo
녹슬기 시작한 개발자의 긁적긁적 - sh0seo
sh0seo
전체 방문자
오늘
어제
  • 분류 전체보기 (14)
    • IT (0)

블로그 메뉴

    공지사항

    인기 글

    태그

    • Visiblity
    • lurca
    • ngrok
    • ojdbc
    • gihtub
    • Text normalization
    • dartpad
    • tui
    • spring boot
    • jsp
    • HTTP
    • Go
    • release
    • https
    • flutter
    • IOS
    • GOLFING
    • Golang
    • github action
    • Free Provisioning Profile

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    sh0seo

    녹슬기 시작한 개발자의 긁적긁적 - sh0seo

    Flutter에서 모든건 Widget이다. Show/Hide까지도
    카테고리 없음

    Flutter에서 모든건 Widget이다. Show/Hide까지도

    2020. 11. 11. 23:59

    Flutter에서 모든 건 Widget입니다. 간단한 문자를 출력하는 Text부터 다른 Widget을 담기 위한 Container까지 모두 Widget입니다. 한마디로 사용자에게 보이든, 보이지 않든 화면을 구성하는 모든 것은 Widget입니다.

    그리고 한발 더 나아가서 Widget 자체의 show/hide 까지도 별도의 Widget(Visibility)입니다.

    다른 UI에서 Visibility

    UI를 다루는 다른 프레임워크를 보면 일반적으로 A라는 컴포넌트를 사용자에게 Show, Hide 처리하는 것은 그 컴포넌트 자체에서 show(), hide() 함수(혹은 메서드)를 제공하거나 투명도를 0으로 설정하여 처리하곤 합니다. 예를 들어 안드로이드에서 TextView는 xml에서 visibility를 설정할 수 있습니다.

     

    <TextView
    ...
    android:visibility="gone"
    />

     

    HTML에서는 대상의 style.display에 설정을 통해 show, hide를 처리합니다.

     

    document.getElementById("element").style.display = "none";

    Flutter에서 Visibility는 Visibility Widget을 사용

    그렇다면 Flutter에서는 Visibility Widget으로 어떻게 show/hide를 구현 할까요? 아래와 같이 중앙에 Text 문구를 출력하는 앱이 있습니다. 플로팅 버튼을 클릭하면 앱이 사라지게 구현을 해봅시다.

     

     

    Text Widget을 Visibility Widget의 child로 감싸줍니다. 그리고 변경이 필요한 시점에 _visibility를 이용하여 상태를 Text Widget의 show/hide를 관리합니다.

     

    children: <Widget>[
      Visiblity(
        child: Text('이 글자를 안보이게 하고 싶습니다.',
          style: Theme.of(context).textTheme.headline4, 
        ),
        visible: _visibility,
      ),
    ],

    정리

    Android, HTML의 show/hide와 달리 Visibility 자체도 Widget으로 따로 처리한다는 것이 낯설게 느껴졌지만 여백 같은 빈 공간조차도 SizedBox Widget으로 구현해 놓은걸 보면 Flutter가 skia로 랜더링하기 위해서 모든 것을 Widget화 시킨 게 아닌가 추측됩니다.

    참조

    • https://stackoverflow.com/questions/44489804/show-hide-widgets-in-flutter-programmatically
    • https://api.flutter.dev/flutter/widgets/Visibility-class.html
    • https://pub.dev/packages/universal_widget
      sh0seo
      sh0seo
      녹슬기 시작한 개발의 긁적긁적 거리는 블로그입니다.

      티스토리툴바