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
- runTransaction
- controller
- multiprovider
- swift 문법
- permission
- transform
- signout
- changenotifier
- Firebase
- provider
- enum
- Snapshot
- platformexception
- divider
- changenotifierprovider
- Stream
- Swift
- consumer
- Navigator
- 문법
- user
- borderRadius
- globalkey
- datetime
- setstate
- ListView.builder
- reference
- switch
- snackbar
- Camera
Archives
- Today
- Total
코딩하는 제리
[Flutter/Project](Instagram Clone) 팝업 인디케이터 본문
Flutter/Project_InstaClone(완)
[Flutter/Project](Instagram Clone) 팝업 인디케이터
JerryCho 2021. 2. 23. 18:25소스코드 및 pubspec.yaml
// screens/share_post_screen.dart
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_project_IJ/constants/common_size.dart';
import 'package:flutter_project_IJ/constants/screen_size.dart';
import 'package:flutter_project_IJ/repo/image_network_repository.dart';
import 'package:flutter_project_IJ/widgets/my_progress_indicator.dart';
import 'package:flutter_tags/flutter_tags.dart';
class SharePostScreen extends StatelessWidget {
final File imageFile;
final String postKey;
SharePostScreen(this.imageFile, {Key key, @required this.postKey})
: super(key: key);
List<String> _tagItems = [
"approval",
"pigeon",
"brown",
"expenditure",
"compromise",
"citizen",
"inspire",
"relieve",
"grave",
"incredible",
"voucher",
"girl",
"relax",
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('New Post'),
actions: [
TextButton(
onPressed: () async {
showModalBottomSheet(
context: context,
builder: (_) => MyProgressIndicator(),
isDismissible: false /* 닫을 수 없음 */,
enableDrag: false /* 드래그 불가 */,
);
await imageNetworkRepository.uploadImageNCreateNewPost(imageFile);
// 팝업 창을 닫음
Navigator.of(context).pop();
},
child: Text(
'Share',
textScaleFactor: 1.4,
style: TextStyle(color: Colors.blue),
),
)
],
),
body: ListView(
children: [
_captionWithImage(),
_divider,
_sectionButton('Tag People'),
_divider,
_sectionButton('Add Location'),
_tags(),
SizedBox(height: common_s_gap),
_divider,
SectionSwitch('Facebook'),
SectionSwitch('Instagram'),
SectionSwitch('Tumblr'),
_divider,
],
),
);
}
Tags _tags() {
return Tags(
horizontalScroll: true,
itemCount: _tagItems.length,
heightHorizontalScroll: 30 /* 높이 */,
itemBuilder: (index) => ItemTags(
index: index,
title: _tagItems[index],
activeColor: Colors.grey[200],
textActiveColor: Colors.black87,
borderRadius: BorderRadius.circular(4) /* 테두리 둥글기 */,
elevation: 2 /* 그림자 */,
splashColor: Colors.grey[800] /* 선택효과 색상 */,
color: Colors.red /* 선택 색상 */,
),
);
}
Divider get _divider => Divider(
color: Colors.grey[300],
height: 1,
thickness: 1,
);
ListTile _sectionButton(String title) {
return ListTile(
title: Text(
title,
style: TextStyle(fontWeight: FontWeight.w400),
),
trailing: Icon(Icons.navigate_next),
dense: true,
/* 작게 만듦. */
contentPadding: EdgeInsets.symmetric(horizontal: common_gap),
);
}
ListTile _captionWithImage() {
return ListTile(
contentPadding: EdgeInsets.symmetric(
vertical: common_gap,
horizontal: common_gap,
),
leading: Image.file(
imageFile,
width: size.width / 6,
height: size.width / 6,
fit: BoxFit.cover,
),
title: TextField(
decoration: InputDecoration(
hintText: 'Wirte a caption...',
border: InputBorder.none,
),
),
);
}
}
// 버튼에 변화를 줘야함 = StatefulWidget
class SectionSwitch extends StatefulWidget {
final String _title;
const SectionSwitch(
this._title, {
Key key,
}) : super(key: key);
@override
_SectionSwitchState createState() => _SectionSwitchState();
}
class _SectionSwitchState extends State<SectionSwitch> {
bool checked = false;
@override
Widget build(BuildContext context) {
return ListTile(
title: Text(
widget._title,
style: TextStyle(fontWeight: FontWeight.w400),
),
trailing: CupertinoSwitch(
value: checked,
onChanged: (onValue) {
setState(() {
checked = onValue;
});
},
),
dense: true,
/* 작게 만듦. */
contentPadding: EdgeInsets.symmetric(horizontal: common_gap),
);
}
}
'Flutter > Project_InstaClone(완)' 카테고리의 다른 글
[Flutter/Project](Instagram Clone) Firebase Storage Image Download (0) | 2021.02.25 |
---|---|
[Flutter/Project](Instagram Clone) Firebase Storage Image Upload (0) | 2021.02.25 |
[Flutter/Project](Instagram Clone) 이미지 리사이징, Isolate (0) | 2021.02.23 |
[Flutter/Project](Instagram Clone) 포스트 작성 레이아웃3 (0) | 2021.02.23 |
[Flutter/Project](Instagram Clone) 포스트 작성 레이아웃2 가로 스크롤 아이콘 (0) | 2021.02.18 |
Comments