import 'package:flutter/material.dart';
import 'package:tiktok_clone/constants/gaps.dart';
import 'package:tiktok_clone/constants/sizes.dart';
const interests = [
"Daily Life",
"Comedy",
"Entertainment",
"Animals",
"Food",
"Beauty & Style",
"Drama",
"Learning",
"Talent",
"Sports",
"Auto",
"Family",
"Fitness & Health",
"DIY & Life Hacks",
"Arts & Crafts",
"Dance",
"Outdoors",
"Oddly Satisfying",
"Home & Garden",
"Daily Life",
"Comedy",
"Entertainment",
"Animals",
"Food",
"Beauty & Style",
"Drama",
"Learning",
"Talent",
"Sports",
"Auto",
"Family",
"Fitness & Health",
"DIY & Life Hacks",
"Arts & Crafts",
"Dance",
"Outdoors",
"Oddly Satisfying",
"Home & Garden",
];
class InterestsScreen extends StatelessWidget {
const InterestsScreen({super.key});
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Choose your interests"),
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(
left: Sizes.size24, right: Sizes.size24, bottom: Sizes.size16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Gaps.v32,
const Text(
"Choose your interests",
style: TextStyle(
fontSize: Sizes.size40,
fontWeight: FontWeight.bold,
),
),
Gaps.v20,
const Text(
"Get better video recommendations",
style: TextStyle(
fontSize: Sizes.size20,
),
),
Gaps.v48,
Wrap(
runSpacing: 15,
spacing: 15,
children: [
for (var interest in interests)
Container(
padding: const EdgeInsets.symmetric(
vertical: Sizes.size16,
horizontal: Sizes.size24,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(
Sizes.size32,
),
border:
Border.all(color: Colors.black.withOpacity(0.1)),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.05),
blurRadius: 5,
spreadRadius: 5,
),
],
),
child: Text(
interest,
style: const TextStyle(
fontWeight: FontWeight.bold,
),
),
)
],
)
],
),
),
),
bottomNavigationBar: BottomAppBar(
elevation: 2,
child: Padding(
padding: const EdgeInsets.only(
bottom: Sizes.size40,
top: Sizes.size16,
left: Sizes.size24,
right: Sizes.size24,
),
child: Container(
padding: const EdgeInsets.symmetric(
vertical: Sizes.size16 + Sizes.size2,
),
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
),
child: const Text(
'Next',
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w500,
fontSize: Sizes.size16,
),
),
),
),
),
);
}
}
이 코드는 Flutter의 Wrap
위젯을 사용하여 여러 개의 InterestButton
을 동적으로 생성합니다.
Wrap
: 자식 위젯들을 가로 또는 세로로 자동으로 배열하되, 공간이 부족하면 다음 줄로 넘어가게 하는 위젯입니다.
runSpacing: 15,
: 각 행 사이의 수직 간격을 설정합니다.
spacing: 15,
: 같은 행에 있는 자식 위젯들 사이의 수평 간격을 설정합니다.
children: [...]
: Wrap
위젯의 자식 위젯들을 지정하는 부분입니다. 여기서는 Dart의 컬렉션 if와 for를 사용하여 interests
리스트에 들어 있는 각 관심사(interest)에 대해 InterestButton
을 생성합니다.
간단히 말해서, 이 코드는 interests
라는 이름의 리스트에서 각 항목을 가져와 InterestButton
위젯을 생성하고, 이들을 Wrap
위젯 안에 수평으로 배열합니다. 만약 가로 길이가 부족하면 다음 행으로 이동합니다.