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
- Stream
- enum
- signout
- globalkey
- changenotifierprovider
- borderRadius
- 문법
- controller
- permission
- platformexception
- snackbar
- Swift
- divider
- setstate
- Snapshot
- user
- ListView.builder
- Firebase
- transform
- changenotifier
- datetime
- multiprovider
- Camera
- swift 문법
- switch
- consumer
- Navigator
- reference
- provider
- runTransaction
Archives
- Today
- Total
코딩하는 제리
[Flutter/Project](Instagram Clone) Positioned 위젯 본문
Flutter/Project_InstaClone(완)
[Flutter/Project](Instagram Clone) Positioned 위젯
JerryCho 2021. 1. 23. 15:46Positioned 위젯에 의한 exception이 발생했다.
Positioned 위젯은 무조건 Column 또는 Stack 위젯의 바로 아래에 존재해야한다.
profile_screen.dart 파일의 Positioned 위젯을 삭제하여 해결.
소스코드 및 pubspec.yaml
// profile_screen.dart
import 'package:flutter/material.dart';
import 'package:flutter_project_IJ/constants/screen_size.dart';
import 'package:flutter_project_IJ/widgets/profile_body.dart';
import 'package:flutter_project_IJ/widgets/profile_side_menu.dart';
enum MenuStatus { opened, closed }
// 클래스 바깥에서 선언한 변수는 다른 파일에서 접근이 가능한 static 변수.
const duration = Duration(milliseconds: 600);
class ProfileScreen extends StatefulWidget {
@override
_ProfileScreenState createState() => _ProfileScreenState();
}
class _ProfileScreenState extends State<ProfileScreen> {
final menuWidth = size.width / 3 * 2; //메뉴 사이즈
// 메뉴 상태 기본 값(closed)
MenuStatus _menuStatus = MenuStatus.closed;
// 메뉴를 열기 전 기본 값.
double bodyXPos = 0;
double menuXPos = size.width; //화면 사이즈만큼 우측 밖으로 나가있음
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[100],
body: Stack(
children: [
AnimatedContainer(
duration: duration,
curve: Curves.fastOutSlowIn,
transform: Matrix4.translationValues(bodyXPos, 0, 0),
child: ProfileBody(onMenuChanged: () {
setState(() {
// 메뉴 상태 토글
// profile_body.dart 파일의 _appbar 메서드에서 버튼이 선태될 때 실행.
// 메뉴 상태가 closed이면 opened, opend이면 closed로 변경.
_menuStatus = (_menuStatus == MenuStatus.closed)
? MenuStatus.opened
: MenuStatus.closed;
switch (_menuStatus) {
case MenuStatus.opened:
bodyXPos = -menuWidth;
menuXPos = size.width - menuWidth;
break;
case MenuStatus.closed:
bodyXPos = 0;
menuXPos = size.width;
break;
}
});
}),
),
AnimatedContainer(
duration: duration,
curve: Curves.fastOutSlowIn,
transform: Matrix4.translationValues(menuXPos, 0, 0),
child: ProfileSideMenu(menuWidth),
),
],
),
);
}
}
'Flutter > Project_InstaClone(완)' 카테고리의 다른 글
[Flutter/Project](Instagram Clone) FadeTransition() 화면 전환 애니메이션 (0) | 2021.01.24 |
---|---|
[Flutter/Project](Instagram Clone) AnimatedIcon (0) | 2021.01.23 |
[Flutter/Project](Instagram Clone) ListTile을 이용한 메뉴 만들기 (0) | 2021.01.23 |
[Flutter/Project](Instagram Clone) 프로필 메뉴 만들기 (0) | 2021.01.23 |
[Flutter/Project](Instagram Clone) Table, TableRow (0) | 2021.01.22 |
Comments