[flutter] 스택드 위젯을 사용하여 버튼 클릭 시 동적으로 위젯 추가하기
Flutter 앱에서 버튼을 클릭하면 동적으로 위젯을 추가하는 기능은 매우 유용합니다. 이를 구현하기 위해 Stack
위젯을 사용할 수 있습니다. Stack
위젯은 위젯을 쌓아 올릴 때 사용되며, 위치 및 크기를 조절할 수 있습니다.
스택 위젯 소개
스택 위젯은 여러 개의 자식 위젯을 쌓아 올려 화면에 표시하는 데 사용됩니다. 각 자식 위젯의 위치는 Positioned
위젯을 사용하여 지정할 수 있습니다.
Stack(
children: <Widget>[
Positioned(
top: 100,
left: 50,
child: Container(
width: 200,
height: 200,
color: Colors.red,
),
),
Positioned(
top: 150,
left: 100,
child: Container(
width: 200,
height: 200,
color: Colors.blue,
),
),
],
)
동적으로 위젯 추가하기
아래는 버튼을 클릭할 때마다 랜덤한 위치에 빨간색 박스를 추가하는 예제 코드입니다.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('동적 위젯 추가'),
),
body: DynamicWidgetList(),
),
);
}
}
class DynamicWidgetList extends StatefulWidget {
@override
_DynamicWidgetListState createState() => _DynamicWidgetListState();
}
class _DynamicWidgetListState extends State<DynamicWidgetList> {
List<Widget> _widgets = [];
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
..._widgets,
Positioned(
left: 0,
top: 0,
child: RaisedButton(
onPressed: () {
setState(() {
_widgets.add(
Positioned(
left: (40 + 160 * (DateTime.now().microsecondsSinceEpoch % 10)) % 200,
top: (40 + 160 * (DateTime.now().microsecondsSinceEpoch % 10)) % 200,
child: Container(
width: 120,
height: 120,
color: Colors.red,
),
),
);
});
},
child: Text('Add Widget'),
),
),
],
);
}
}
이제 해당 앱을 실행하고 “Add Widget” 버튼을 클릭해보세요. 버튼을 클릭할 때마다 스택 위젯에 랜덤한 위치에 빨간색 박스가 동적으로 추가될 것입니다.
Stack
위젯과 버튼 클릭 시 동적 위젯을 추가하는 방법에 대해 알아보았습니다. 기존 위젯을 유지한 채로 동적으로 위젯을 추가할 수 있도록 Stack
위젯을 활용하여 화면을 보다 동적으로 제어할 수 있게 되었습니다.
더 많은 Flutter 위젯 및 기능에 대해 알아보려면 Flutter 공식 문서를 참고하세요.