본문 바로가기

개발(합니다)/Flutter&android&ios

[flutter-16] 날씨 앱 만들기

반응형
  1. Widget lifecycle(생명 주기)
    • Stateless Widget : 한번 생성되면 절대로 바뀌지 않는 앱으로 새롭게 빌드해야 하는 위젯
      • 새로 빌드 될 때는 build method에서 바꾸고자하는 값들을 넣어주면 됨
    • Stateful Widget : State 위젯에 따라 원할때마다 값들을 동적으로 변경할 수 있는 위젯
    • stateful은 stateless 위젯보다 긴 수명 생명주기를 가지며 보다 많은 생명주기 함수들을 가지게 됩니다.
    • stateful 위젯의 대표적인 생명주기 위젯
      1. initState method : 최초 생성 될때 호출되는 함수
      2. builf method : 빌드 될때마다 호출되는 함수
      3. dispose method, deactivate method : 파괴 될때 호출되는 함수
  @override
  void initState() {
    print('initState');
    super.initState();
  }

  @override
  void dispose() {
    print('dispose');
    super.dispose();
  }
  1. API : Application Programming Interface
    • 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻합니다.
    • 일련의 표준화된 명령이나 기능 : appBar, backfroundColor, textSize..
    • 매개 역할자로써의 API : 은행에서 돈을 찾을 때처럼 주고 받는 창구 역할을 합니다.
    • geolocator: ^6.2.1를 사용함
    • import 'package:geolocator/geolocator.dart';
    • 권한 요청 방법
      • 안드로이드 권한
      • IOS 권한
  2. Exception handing
    • try ~ catch 구문을 이용해 예외를 처리합니다.
  3. Http pacakage
    • http 통신을 위해 라이브러리를 추가합니다.
    • dependencies: http:
    • import 'package:http/http.dart' as http;
    • Future<http.Response> fetchAlbum() { return http.get(Uri.https('jsonplaceholder.typicode.com', 'albums/1')); }
  4. Jason parsing
    • JSON과 XML로 데이터를 주고 받고 주로 JSON을 많이 사용합니다.
    • import 'dart:convert';

  • loding.dart
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';


class Loding extends StatefulWidget {
  @override
  _LodingState createState() => _LodingState();
}

class _LodingState extends State<Loding> {

  void fetchData() async{
    // Future<http.Response> fetchAlbum() {
    //   return http.get(Uri.https('jsonplaceholder.typicode.com', 'albums/1'));
    // }
    http.Response res = await http.get("https://samples.openweathermap.org/data/2.5/weather?q=London&appid=b1b15e88fa797225412429c1c50c122a1");
    if(res.statusCode == 200) {
      String jsonData = res.body;
      var myJson = jsonDecode(jsonData);
      print(myJson['weather'][0]['description']);
    }
  }

  void getLocation() async{
    try {
      Position position = await Geolocator.getCurrentPosition(
          desiredAccuracy: LocationAccuracy.high);
      print('position $position');
    } catch(e) {
      print("$e the connection failed");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          onPressed: null,
          child: Text("Get My Location", style: TextStyle(
            color: Colors.white
          ),),
          color: Colors.blue,
        ),
      ),
    );
  }

  @override
  void initState() {
    super.initState();
    getLocation();
    fetchData();
  }
}
  • wearther.dart
import 'package:flutter/material.dart';
import 'package:week4_app/weather/screens/loding.dart';

main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "waether app",
      theme: ThemeData(primarySwatch: Colors.blue),
      home: Loding(),
    );
  }
}
반응형