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 |
31 |
Tags
- reference
- user
- ListView.builder
- Firebase
- Navigator
- consumer
- switch
- globalkey
- Swift
- signout
- datetime
- Camera
- Stream
- permission
- runTransaction
- controller
- 문법
- changenotifier
- swift 문법
- provider
- Snapshot
- borderRadius
- divider
- setstate
- platformexception
- transform
- enum
- changenotifierprovider
- multiprovider
- snackbar
Archives
- Today
- Total
코딩하는 제리
[Flutter/Project](Instagram Clone) SliverToBoxAdapter(), GridView.count 본문
Flutter/Project_InstaClone(완)
[Flutter/Project](Instagram Clone) SliverToBoxAdapter(), GridView.count
JerryCho 2021. 1. 20. 16:55소스코드
// profile_body.dart
import 'package:cached_network_image/cached_network_image.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(),
]),
),
SliverToBoxAdapter(
// SliverToBoxAdapter() 일반적인 뷰를 Sliver 뷰로 변환.
child: GridView.count(
crossAxisCount: 3,
physics:
NeverScrollableScrollPhysics() /* GridView의 스크롤을 사용하지 않음 */,
shrinkWrap: true /* 데이터의 양 만큼만 공간을 차지하게함 */,
childAspectRatio: 1 /* 이미지 비율 */,
children: List.generate(
// List.generate() 리스트 생성
30,
(index) => CachedNetworkImage(
fit: BoxFit.cover,
imageUrl: "https://picsum.photos/id/$index/100/100",
),
),
),
),
],
),
);
}
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) switch~case 코드정리 (0) | 2021.01.22 |
---|---|
[Flutter/Project](Instagram Clone) 이미지 grid, 페이지 애니메이션 (0) | 2021.01.20 |
[Flutter/Project](Instagram Clone) enum의 간단한 사용 (0) | 2021.01.20 |
[Flutter/Project](Instagram Clone) 탭 버튼 만들기 (0) | 2021.01.20 |
[Flutter/Project](Instagram Clone) 유저 프로필 화면 만들기01 (0) | 2021.01.19 |
Comments