일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- code editor
- Game js
- Flutter
- react
- identifierForVender
- typescript
- web track
- REST API
- uint8array
- jszip
- userevent_tracker
- Image Resize typescript
- androidId
- methodChannel
- node
- Redux
- babel
- three.js
- RouteObserver
- Three js
- webrtc
- KakaoMap
- Completer
- Three-fiber
- Excel
- uint16array
- Raycasting
- Prism.js
- swagger-typescript-api
- Babel standalone
- Today
- Total
목록Flutter (50)
Never give up
Color값을 SharedPreferences에 저장하는것은 아주 간단하지만 이전에 설정된 값이 없어서 null인 경우에 처리하는 방법입니다 Splash Screen, init메소드 @override void initState() { super.initState(); _init(); } void _init() async { await Provider.of(context, listen: false).initColorData(); Navigator.push( context, MaterialPageRoute(builder: (context) => MainScreen())); } ConfigData class ConfigData extends ChangeNotifier { SharedPreferences _pr..
Provider를 사용하다보면 어떤곳에는 false를 사용하고, 다른곳에서는 사용하지 않는데 이 차이를 알아보겠습니다 결론부터 말하자면 notifyListeners()를 호출해서 바로 UI에서 변경되는 부분은 true (default가 true이기 때문에 따로 설정해줄 필요는 없습니다) 그리고 데이터만 변경하고 UI를 변경하지 않는곳에서는 listen : false를해야됩니다 예제 코드로 알아보겠습니다 Splash Screen class SplashScreen extends StatefulWidget { @override _SplashScreenState createState() => _SplashScreenState(); } class _SplashScreenState extends State { @o..
build가 끝나지 않은 시점에서 데이터의 변경이 일어나고 notifyListeners를 사용해서 UI를 변경시키면 레드스크린을 볼 수 있습니다 예제로 initState에서 build가 끝나지 않은 상태에서 다음과 같이 값을 변경하면 @override void initState() { super.initState(); Provider.of(context, listen: false).setNum(2); } class TestInt extends ChangeNotifier { int _num = 0; int get getNum => _num; void setNum(int value) { _num = value; notifyListeners(); //문제가 되는 부분 } } 다음과 같은 에러가 출력됩니다 ══..
createState : 프레임워크가 Stateful을 만들 때 createState 호출 mounted is true : createState가 state class를 만든 후 buildContext가 할당된다 할당된 경우 true 아닐경우 false 여기서 setState를 콜하면 widget이 시작되지않고 오류가 발생 initState : 객체가 위젯트리에 할당되었을 때 호출 build 전에 데이터를 가져와야되는 경우 controller등을 설정하는 경우에 사용 didChangeDependencies : State의 의존성이 변경되었을 때 호출 InheritedWidget, Provider등을 통해 데이터 변경 후 상태를 변경 build : 위젯을 return하는 함수 주로 UI부분을 처리 didU..
전에 ScrollController를 이용해서 동작을 읽었는데 Listener을 통해 Drag 이벤트 등을 읽을 수 있습니다 @override Widget build(BuildContext context) { var _data = Provider.of(context); return Scaffold( appBar: AppBar(title: Text('Scroll test')), body: Listener( onPointerMove: (value) { if (value.delta.dy > 0) { _data.setVisible(true); } else if (value.delta.dy < 0) { _data.setVisible(false); } }, child: ListView.builder( itemCou..
Listview를 사용하다보면 스크롤이 맨 위 혹은 아래에 도달했을때 특정 동작을 해야되는 경우가 있는데, ScrollController를 이용하면 간단하게 해결 가능합니다 (해당 소스코드는 맨 아래에 도달했을 때 FAB을 숨기는 동작을 함) 메인 class ListTestScreen extends StatefulWidget { @override _ListTestScreenState createState() => _ListTestScreenState(); } class _ListTestScreenState extends State { ScrollController _controller; @override void initState() { super.initState(); _controller = Scro..
화면을 구성하다보면 Navigator를 통하여 다른 화면으로 이동해야되는 상황이 생기고 Animation을 이용하여 조금 더 멋진 화면을 구성하는데 listener안에서 setState를 이용하면 성능이 떨어지기 때문에 AnimatedBuilder를 이용하면 세련된 애니메이션과 성능을 동시에 잡을 수 있습니다 메인화면 class TestAnimation extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Animation test')), body: Padding( padding: const EdgeInsets.symmetric(horizontal:..
BottomNavigationBar 등을 통해 화면전환을 할 때 Indexed Stack을 이용하여 화면전환을 하면 더 관리하기 편하고 바뀌는 인덱스에 따라 해당되는 페이지를 보여줍니다 Provider를 이용하여 StatelessWidget에서 구현해봤습니다 (이후 다른 예제에서 많이 사용할 예정이어서 MultiProvider를 사용했습니다) 메인 void main() { runApp(MultiProvider( providers: [ChangeNotifierProvider(create: (_) => PageViewModel())], child: const MaterialApp(home: Main()), )); } 메인화면 class Main extends StatelessWidget { const Mai..