[flutter] 플러터에서 Visibility 속성을 이용한 화면 고정 기능 구현하기

플러터 앱을 개발하다 보면 특정 상황에서 화면의 일부를 숨기거나 보이게 하고 싶을 때가 있습니다. 이를 위해 플러터에서는 Visibility 위젯을 활용할 수 있습니다.

Visibility 위젯

Visibility 위젯은 자식 위젯을 화면에 보이거나 숨기는 데 사용됩니다. 이를 통해 화면을 동적으로 조정할 수 있고, 사용자 경험을 향상시킬 수 있습니다.

예를 들어, 특정 버튼을 눌렀을 때 추가적인 설정 메뉴를 보여주고 숨기거나, 특정 조건에 따라 화면의 일부를 숨기는 경우 등에 활용할 수 있습니다.

예제

다음은 Visibility 위젯을 활용하여 버튼을 눌렀을 때 텍스트를 보이거나 숨기는 예제 코드입니다.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _isVisible = false;

  void _toggleVisibility() {
    setState(() {
      _isVisible = !_isVisible;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Visibility Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () {
                  _toggleVisibility();
                },
                child: Text('Toggle Visibility'),
              ),
              Visibility(
                visible: _isVisible,
                child: Container(
                  padding: EdgeInsets.all(16.0),
                  margin: EdgeInsets.all(16.0),
                  color: Colors.blue,
                  child: Text(
                    'Hello, World!',
                    style: TextStyle(
                      fontSize: 24.0,
                      color: Colors.white,
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

위 코드를 실행하면 ‘Toggle Visibility’ 버튼을 눌렀을 때 ‘Hello, World!’ 텍스트가 보이거나 숨겨지는 화면이 구현됩니다.

Visibility 위젯의 visible 속성을 조절하여 해당 자식 위젯을 보이거나 숨길 수 있습니다.

마치며

플러터의 Visibility 위젯을 활용하면 화면의 일부를 동적으로 처리하는 기능을 쉽게 구현할 수 있습니다. 이를 통해 사용자에게 편리한 경험을 제공할 수 있으며, 앱의 유저 인터페이스를 보다 유연하게 구현할 수 있습니다.