목록Programing/Flutter (43)
스마트시대

11.1 Direct Messages BuildContext context쓰기 싫음 StatefulWidget로 해주는 방법도있음 -------------------- //BuildContext context쓰기 싫음 StatefulWidget로 해주는 방법도있음 class InboxScreen extends StatefulWidget { const InboxScreen({super.key}); @override State createState() => _InboxScreenState(); } class _InboxScreenState extends State { //method void _onDmPressed() { Navigator.of(context).push( MaterialPageRoute( b..

10.0 ListTile import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:tiktok_clone/constants/sizes.dart'; class InboxScreen extends StatelessWidget { const InboxScreen({super.key}); //method void _onPressed() {} @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( elevation: 1, title: const Text("Inbox"),..

9.1 Light Navigation 여기서 홈 탭 이외에는 흰색으로 바뀌게 하고 NavTab( text: "Home", isSelected: _selectedIndex == 0, icon: FontAwesomeIcons.house, selectedIcon: FontAwesomeIcons.house, onTap: () => _onTap(0), -------------------------- selectedIndex: _selectedIndex), -------------------------- NavTab( text: "Discover", isSelected: _selectedIndex == 1, icon: FontAwesomeIcons.compass, selectedIcon: FontAwesomeIco..

8.0 showModalBottomSheet 새로 고침하면 영상이 자동재생되어 버린다. 그래서 밑부분의 !_isPaused &&(일시정지상태가 아니다)를 추가해준다. // 비디오가 보여지는 영역을 계산하고 한쪽에서만 영상 재생되도록 해주는 파라메터 void _onVisibilityChanged(VisibilityInfo info) { if (info.visibleFraction == 1 && !_isPaused && !_videoPlayerController.value.isPlaying) { _videoPlayerController.play(); } } _isPaused = !_isPaused; }); } ------------- //댓글버튼 눌렀을 때 댓글창 뜨는 함수 void _onCommentsTa..

7.5 AnimationController animation을 커스터마이즈하는 요소 아래와 같이 써주기 1. 이벤트 리스너를 사용하는 방법 // 위의 중간값을 애니메이션 처리해주는(밑에 build 매소드가 중간값 읽기위한) 이벤트 리스너1 _animationController.addListener(() { setState(() {}); }); } VideoPlayerController.asset("assets/videos/video.mp4"); ----------- //animation을 커스터마이즈하는 함수 final Duration _animationDuration = const Duration(milliseconds: 200); late final AnimationController _animati..

7.1 Infinite Scrolling stf_screen.dart관련 데이터 다 지우고 main_navigation_screen.dart @override Widget build(BuildContext context) { return Scaffold( // // 선택된 탭의 페이지만 보여주기: 항상 새로운 페이지로써 표시됨 // body: screens.elementAt(_selectedIndex), // offStage: 해당 위젯을 안 보이게 하면서 계속 존재하게 해주는 위젯 body: Stack( children: [ --------------------- Offstage( offstage: _selectedIndex != 0, child: const VideoTimelineScreen(), -..

6.5 Custom NavigationBar @override Widget build(BuildContext context) { return Scaffold( bottomNavigationBar: BottomAppBar( color: Colors.black, child: Row( children: [ //여기서 그냥 Column만 써버리면 디폴트로 세로 공간을 최대한 차지한다. Column( children: const [ FaIcon( FontAwesomeIcons.house, color: Colors.white, ), Gaps.v5, Text( "Home", style: TextStyle( color: Colors.white, ), ), ], ) ], ), ), ); } } 여기서 그냥 Column만..

6.1 pushAndRemoveUntil login_formscreen.dart에서 여기서 push는 이전 화면(로그인)에 덧대어 화면 표시됨. 이는 뒤로가기 버튼등으로 로그인 페이지로 다시 돌아가게 되는 것 그래서 대신 써줄게 pushAnd RemoveUntil(한 번 로그인 하면 그 전 화면관련 데이터 지워) Map formData = {}; //이메일과 비번을 적절한 포맷으로 넣었는지 체크하는 함수(유효성 검사2) // _formkey.currentState null이 아니고 validate()가 true라면 email,pass폼을 저장한다. void _onSubmitTap() { if (_formkey.currentState != null) { if (_formkey.currentState!.va..

5.1 Interests Screen 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",..

4.6 Email Screen super.dispose(); } ------------------ // 이메일이 유효한지 체크하는 메서드 만들기 String? _isEmailValid() { if (_email.isEmpty) return null; // 비어 있지 않다면 검증 진행(정규식으로). 결과에 따라 에러 반환 final regExp = RegExp( r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+", ); if (!regExp.hasMatch(_email)) { return "Email Not valid"; } return null; // else } ------------------ @override Widget b..