본문 바로가기
Flutter

[Flutter-1Team] 섹션 13 - 비동기

by Cha_Ji 2021. 1. 27.

이번 주차에는 섹션 13과 섹션 14에 대해서 학습했습니다. 저는 비동기와 라이프싸이클에 초점을 맞춰 서술했습니다.

 

  • gelocator : 위치를 찾는 라이브러리
void getLocation() async{ 
	Position position = await Geolocator()
    						.getCurrentPosition(
                            	desiredAccuracy: LocationAccuracy.high
                        	); 
                    }
  • async 프로그래밍 ?
    • synchronous? asynchronous?

      • 오래 걸리는 함수가 동작할 때, 동시에 다른 일을 할 수 있게 만든다.

         

Future<String> task2() async{ 
	Duration threeSeconds = Duration(seconds: 3); 
    String result; 
    await Future.delayed(threeSeconds, () { 
    	result = 'task 2 data'; 
        print('Task 2 complete'); 
        }); 
    return result; 
}
API
  • Application Programming Interface
  • 날씨 사이트의 API를 사용해보자

JSON Parsing and Dynamic Types

  • JavaScript Object Notation
http.Response response = await http.get('url'); 
if (response.statusCode == 200){ 
	String data = response.body;
    var temperature = jsonDecode(Data['main']['temp']; 
    ...

화면 전환하기

Navigator.push( 
	context, MaterialPageRoute( 
		builder: (context){ 
        	return CityScreen(); 
    	}, 
    ), 
); 
    
Navigator.pop(context);
  • push로 화면을 띄울 수 있고, pop으로 화면을 내릴 수 있다.

onChanged : //텍스트필드에서 변화를 인지할 수 있다.

비동기

단일 쓰레드인 플러터

  • 플러터는 단일 쓰레드로 실행되기 때문에 특정 동작을 기다릴 때 어플이 멈춘다.

느린 작업을 만났을 때

  • 느린 작업의 종료를 알리는 Listner(Future)가 생성된다.
  • Listner가 main thread에 리턴되고, 하던 작업을 다시 수행한다.
  • 느린 작업이 끝났을 때 event loop는 끝난 것을 보고,
  • 연결된 메서드를 Main thread에 올린 뒤 해당 작업을 마무리한다.

라이프사이클

  • createState()
    • 빌드를 지시할 때 호출되는 메서드
    • buildContext(위젯이 배치된 위젯 트리의 위치)가 State에 할당된다.
  • mounted == true
    • buildContext가 할당되었는가?
    • setState()를 호출하기 위한 조건
  • initState()
    • 위젯이 생성될 때 호출.
  • didChangeDependencies()
    • 위젯이 의존하는 객체가 호출될 때마다 호출
  • build()
    • Widget을 리턴한다.
  • didUpdateWidget()
    • 위젯을 재구성할 때 initState()를 대체
  • setState()
    • build context의 위젯을 다시 빌드
  • deactivate()
    • 거의 사용되지 않는 메서드, State가 제거될 때 호출
  • dispose()
    • State 제거
  • mounted == false
    • setState를 호출할 수 없는 상태

Exception Handling & Null Aware Operators

  • try, catch
  • someValue ?? defaultValue : null일 경우 예외처리