Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- Firebase
- 문법
- user
- platformexception
- Snapshot
- consumer
- Navigator
- provider
- changenotifierprovider
- Camera
- controller
- reference
- Stream
- multiprovider
- switch
- enum
- ListView.builder
- signout
- transform
- permission
- globalkey
- borderRadius
- swift 문법
- divider
- changenotifier
- Swift
- runTransaction
- datetime
- setstate
- snackbar
Archives
- Today
- Total
코딩하는 제리
[Flutter/Project](Instagram Clone) enum의 간단한 사용 본문
Flutter/Project_InstaClone(완)
[Flutter/Project](Instagram Clone) enum의 간단한 사용
JerryCho 2021. 1. 20. 12:26전에 사용하던 bool 값을 대신해서 사용.
소스코드
// profile.body.dart
import 'package:flutter/material.dart';
import 'package:flutter_project_IJ/constants/common_size.dart';
import 'package:flutter_project_IJ/constants/screen_size.dart';
// 가독성을 위해서 사용.
enum SelectedTab { left, right }
class ProfileBody extends StatefulWidget {
@override
_ProfileBodyState createState() => _ProfileBodyState();
}
class _ProfileBodyState extends State<ProfileBody> {
// bool selectedLeft = true;
SelectedTab _selectedTab = SelectedTab.left;
@override
Widget build(BuildContext context) {
return Expanded(
// CustomScrollView()가 빈공간을 차지하도록 해야 표시됨.
child: CustomScrollView(
// CustomScrollView() 스크롤 가능한 뷰들을 섞어서 사용할 때.
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate([
_username(),
_userBio(),
_editProfileBtn(),
_tabButtons(),
_selectedIndicator(),
]),
)
],
),
);
}
Widget _selectedIndicator() {
return AnimatedContainer(
duration: Duration(milliseconds: 300),
alignment: _selectedTab == SelectedTab.left
? Alignment.centerLeft
: Alignment.centerRight,
curve: Curves.fastOutSlowIn,
child: Container(
height: 3,
width: size.width / 2,
color: Colors.black87,
),
);
}
Row _tabButtons() {
return Row(
children: [
Expanded(
child: IconButton(
color: _selectedTab == SelectedTab.left
? Colors.black
: Colors.black38,
icon: ImageIcon(AssetImage('assets/images/grid.png')),
onPressed: () {
setState(() {
// StatefulWidget의 상태변화 적용.
_selectedTab = SelectedTab.left;
});
},
),
),
Expanded(
child: IconButton(
color: _selectedTab == SelectedTab.left
? Colors.black38
: Colors.black,
icon: ImageIcon(AssetImage('assets/images/saved.png')),
onPressed: () {
setState(() {
// StatefulWidget의 상태변화 적용.
_selectedTab = SelectedTab.right;
});
},
),
),
],
);
}
Widget _editProfileBtn() {
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: common_gap,
vertical: common_xxs_gap,
),
child: SizedBox(
height: 24,
child: OutlineButton(
onPressed: () {},
borderSide: BorderSide(color: Colors.black45),
shape: RoundedRectangleBorder(
// RoundedRectangleBorder() 둥근 모서리 직사각형.
borderRadius: BorderRadius.circular(6),
),
child: Text(
'Edit Profile',
style: TextStyle(fontWeight: FontWeight.bold),
),
),
),
);
}
Widget _username() {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: common_gap),
child: Text(
'username',
style: TextStyle(fontWeight: FontWeight.bold),
),
);
}
Widget _userBio() {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: common_gap),
child: Text(
'username',
style: TextStyle(fontWeight: FontWeight.w400),
),
);
}
}
'Flutter > Project_InstaClone(완)' 카테고리의 다른 글
[Flutter/Project](Instagram Clone) 이미지 grid, 페이지 애니메이션 (0) | 2021.01.20 |
---|---|
[Flutter/Project](Instagram Clone) SliverToBoxAdapter(), GridView.count (0) | 2021.01.20 |
[Flutter/Project](Instagram Clone) 탭 버튼 만들기 (0) | 2021.01.20 |
[Flutter/Project](Instagram Clone) 유저 프로필 화면 만들기01 (0) | 2021.01.19 |
[Flutter/Project](Instagram Clone) 프로필 화면 상단바 만들기 (0) | 2021.01.19 |
Comments