zoaseo
To Infinity And Beyond
zoaseo
전체 방문자
오늘
어제
  • 분류 전체보기 (760)
    • 개발이 좋아서 (378)
      • Java가 좋아서 (42)
      • Spring이 좋아서 (50)
      • JPA가 좋아서 (0)
      • QueryDSL이 좋아서 (26)
      • Docker가 좋아서 (7)
      • Redis가 좋아서 (7)
      • AWS가 좋아서 (5)
      • CI/CD가 좋아서 (6)
      • Troubleshooting이 좋아서 (4)
      • Kotlin이 좋아서 (7)
      • SQL이 좋아서 (6)
      • HTTP가 좋아서 (21)
      • JavaScript가 좋아서 (30)
      • TypeScript가 좋아서 (6)
      • Vue가 좋아서 (21)
      • Flutter가 좋아서 (61)
      • React가 좋아서 (20)
      • Redux(React)가 좋아서 (2)
      • Angular가 좋아서 (22)
      • HTML이 좋아서 (9)
      • CSS가 좋아서 (15)
      • PHP가 좋아서 (9)
      • Illustrator가 좋아서 (2)
    • 노력이 좋아서 (169)
    • 결과물이 좋아서 (14)
    • 코딩연습이 좋아서 (78)
      • 이론이 좋아서 (62)
      • SQL이 좋아서 (0)
    • 유용한 사이트가 좋아서 (28)
    • Github (2)

인기 글

티스토리

hELLO · Designed By 정상우.
zoaseo

To Infinity And Beyond

[flutter] 미세먼지 앱_마무리_const, model
개발이 좋아서/Flutter가 좋아서

[flutter] 미세먼지 앱_마무리_const, model

2023. 2. 7. 17:36

1)

2) const

/color.dart

import 'package:flutter/material.dart';

const primaryColor = Color(0xFF009688);

const darkColor = Color(0xFF00675B);

const lightColor = Color(0xFF52C7B8);

/data.dart

/regions.dart

const regions = [
  '서울',
  '경기',
  '대구',
  '충남',
  '인천',
  '대전',
  '경북',
  '세종',
  '광주',
  '전북',
  '강원',
  '울산',
  '전남',
  '부산',
  '제주',
  '충북',
];

/status_level.dart

import 'package:dusty_dust/model/status_model.dart';
import 'package:flutter/material.dart';

final statusLevel = [
  // 최고
  StatusModel(
    level: 0,
    label: '최고',
    primaryColor: Color(0xFF2196F3),
    darkColor: Color(0xFF0069C0),
    lightColor: Color(0xFF6EC6FF),
    detailFontColor: Colors.black,
    imagePath: 'asset/img/best.png',
    comment: '우와! 100년에 한번 오는 날!',
    minFineDust: 0,
    minUltraFineDust: 0,
    minO3: 0,
    minNO2: 0,
    minCO: 0,
    minSO2: 0,
  ),

  // 좋음
  StatusModel(
    level: 1,
    label: '좋음',
    primaryColor: Color(0xFF03a9f4),
    darkColor: Color(0xFF007ac1),
    lightColor: Color(0xFF67daff),
    detailFontColor: Colors.black,
    imagePath: 'asset/img/good.png',
    comment: '공기가 좋아요! 외부활동 해도 좋아요!',
    minFineDust: 16,
    minUltraFineDust: 9,
    minO3: 0.02,
    minNO2: 0.02,
    minCO: 1,
    minSO2: 0.01,
  ),

  // 양호
  StatusModel(
    level: 2,
    label: '양호',
    primaryColor: Color(0xFF00bcd4),
    darkColor: Color(0xFF008ba3),
    lightColor: Color(0xFF62efff),
    detailFontColor: Colors.black,
    imagePath: 'asset/img/ok.png',
    comment: '공기가 좋은 날이예요!',
    minFineDust: 31,
    minUltraFineDust: 16,
    minO3: 0.03,
    minNO2: 0.03,
    minCO: 2,
    minSO2: 0.02,
  ),

  // 보통
  StatusModel(
    level: 3,
    label: '보통',
    primaryColor: Color(0xFF009688),
    darkColor: Color(0xFF00675b),
    lightColor: Color(0xFF52c7b8),
    detailFontColor: Colors.black,
    imagePath: 'asset/img/mediocre.png',
    comment: '나쁘지 않네요!',
    minFineDust: 41,
    minUltraFineDust: 21,
    minO3: 0.06,
    minNO2: 0.05,
    minCO: 5.5,
    minSO2: 0.04,
  ),

  // 나쁨
  StatusModel(
    level: 4,
    label: '나쁨',
    primaryColor: Color(0xFFffc107),
    darkColor: Color(0xFFc79100),
    lightColor: Color(0xFFfff350),
    detailFontColor: Colors.black,
    imagePath: 'asset/img/bad.png',
    comment: '공기가 안좋아요...',
    minFineDust: 51,
    minUltraFineDust: 26,
    minO3: 0.09,
    minNO2: 0.06,
    minCO: 9,
    minSO2: 0.05,
  ),

  // 상당히 나쁨
  StatusModel(
    level: 5,
    label: '상당히 나쁨',
    primaryColor: Color(0xFFff9800),
    darkColor: Color(0xFFc66900),
    lightColor: Color(0xFFffc947),
    detailFontColor: Colors.black,
    imagePath: 'asset/img/very_bad.png',
    comment: '공기가 나빠요! 외부활동을 자제해주세요!',
    minFineDust: 76,
    minUltraFineDust: 38,
    minO3: 0.12,
    minNO2: 0.13,
    minCO: 12,
    minSO2: 0.1,
  ),

  // 매우 나쁨
  StatusModel(
    level: 6,
    label: '매우 나쁨',
    primaryColor: Color(0xFFf44336),
    darkColor: Color(0xFFba000d),
    lightColor: Color(0xFFff7961),
    detailFontColor: Colors.black,
    imagePath: 'asset/img/worse.png',
    comment: '매우 안좋아요! 나가지 마세요!',
    minFineDust: 101,
    minUltraFineDust: 51,
    minO3: 0.15,
    minNO2: 0.2,
    minCO: 15,
    minSO2: 0.15,
  ),

  // 최악
  StatusModel(
    level: 7,
    label: '최악',
    primaryColor: Color(0xFF212121),
    darkColor: Color(0xFF000000),
    lightColor: Color(0xFF484848),
    detailFontColor: Colors.white,
    imagePath: 'asset/img/worst.png',
    comment: '역대급 최악의 날! 집에만 계세요!',
    minFineDust: 151,
    minUltraFineDust: 76,
    minO3: 0.38,
    minNO2: 1.1,
    minCO: 32,
    minSO2: 0.16,
  )
];

3) model

/stat_and_status_model.dart

import 'package:dusty_dust/model/stat_model.dart';
import 'package:dusty_dust/model/status_model.dart';

class StatAndStatusModel {
  final StatModel stat;
  final StatusModel status;
  final ItemCode itemCode;

  StatAndStatusModel({
    required this.stat,
    required this.status,
    required this.itemCode,
  });
}

/stat_model.dart

import 'package:hive_flutter/hive_flutter.dart';
part 'stat_model.g.dart';

@HiveType(typeId: 2)
enum ItemCode {
  // 미세먼지
  @HiveField(0)
  PM10,
  // 초미세먼지
  @HiveField(1)
  PM25,
  // 일산화탄소
  @HiveField(2)
  CO,
  // 오존
  @HiveField(3)
  O3,
  // 이산화질소
  @HiveField(4)
  NO2,
  // 이황산가스
  @HiveField(5)
  SO2,
}

@HiveType(typeId: 1)
class StatModel {
  @HiveField(0)
  final double daegu;
  @HiveField(1)
  final double chungnam;
  @HiveField(2)
  final double incheon;
  @HiveField(3)
  final double daejeon;
  @HiveField(4)
  final double gyeongbuk;
  @HiveField(5)
  final double sejong;
  @HiveField(6)
  final double gwangju;
  @HiveField(7)
  final double jeonbuk;
  @HiveField(8)
  final double gangwon;
  @HiveField(9)
  final double ulsan;
  @HiveField(10)
  final double jeonnam;
  @HiveField(11)
  final double seoul;
  @HiveField(12)
  final double busan;
  @HiveField(13)
  final double jeju;
  @HiveField(14)
  final double chungbuk;
  @HiveField(15)
  final double gyeongnam;
  @HiveField(16)
  final DateTime dataTime;
  @HiveField(17)
  final double gyeonggi;
  @HiveField(18)
  final ItemCode itemCode;

  StatModel({
  required this.daegu,
  required this.chungnam,
  required this.incheon,
  required this.daejeon,
  required this.gyeongbuk,
  required this.sejong,
  required this.gwangju,
  required this.jeonbuk,
  required this.gangwon,
  required this.ulsan,
  required this.jeonnam,
  required this.seoul,
  required this.busan,
  required this.jeju,
  required this.chungbuk,
  required this.gyeongnam,
  required this.dataTime,
  required this.gyeonggi,
  required this.itemCode,
});

  StatModel.fromJson({required Map<String, dynamic> json})
      : daegu = double.parse(json['daegu'] ?? '0'),
        chungnam = double.parse(json['chungnam'] ?? '0'),
        incheon = double.parse(json['incheon'] ?? '0'),
        daejeon = double.parse(json['daejeon'] ?? '0'),
        gyeongbuk = double.parse(json['gyeongbuk'] ?? '0'),
        sejong = double.parse(json['sejong'] ?? '0'),
        gwangju = double.parse(json['gwangju'] ?? '0'),
        jeonbuk = double.parse(json['jeonbuk'] ?? '0'),
        gangwon = double.parse(json['gangwon'] ?? '0'),
        ulsan = double.parse(json['ulsan'] ?? '0'),
        jeonnam = double.parse(json['jeonnam'] ?? '0'),
        seoul = double.parse(json['seoul'] ?? '0'),
        busan = double.parse(json['busan'] ?? '0'),
        jeju = double.parse(json['jeju'] ?? '0'),
        chungbuk = double.parse(json['chungbuk'] ?? '0'),
        gyeongnam = double.parse(json['gyeongnam'] ?? '0'),
        dataTime = DateTime.parse(json['dataTime']),
        gyeonggi = double.parse(json['gyeonggi'] ?? '0'),
        itemCode = parseItemCode(json['itemCode']);

  static ItemCode parseItemCode(String raw) {
    if (raw == 'PM2.5') {
      return ItemCode.PM25;
    }
    return ItemCode.values.firstWhere((element) => element.name == raw);
  }

  double getLevelFromRegion(String region) {
    if (region == '서울') {
      return seoul;
    } else if (region == '경기') {
      return gyeonggi;
    } else if (region == '대구') {
      return daegu;
    } else if (region == '충남') {
      return chungnam;
    } else if (region == '인천') {
      return incheon;
    } else if (region == '대전') {
      return daejeon;
    } else if (region == '경북') {
      return gyeongbuk;
    } else if (region == '세종') {
      return sejong;
    } else if (region == '광주') {
      return gwangju;
    } else if (region == '전북') {
      return jeonbuk;
    } else if (region == '강원') {
      return gangwon;
    } else if (region == '울산') {
      return ulsan;
    } else if (region == '전남') {
      return jeonnam;
    } else if (region == '부산') {
      return busan;
    } else if (region == '제주') {
      return jeju;
    } else if (region == '충북') {
      return chungbuk;
    } else if (region == '경남') {
      return gyeongnam;
    } else {
      return throw Exception('알 수 없는 지역입니다.');
    }
  }
}

/stat_model.g.dart

-- flutter pub run build_runner build

/status_model.dart

import 'package:flutter/material.dart';

class StatusModel {
  // 단계
  final int level;

  // 단계 이름
  final String label;

  // 주 색상
  final Color primaryColor;

  // 어두운 색상
  final Color darkColor;

  // 밝은 색상
  final Color lightColor;

  // 폰트 색상
  final Color detailFontColor;

  // 이모티콘 이미지
  final String imagePath;

  // 코멘트
  final String comment;

  // 미세먼지 최소치
  final double minFineDust;

  // 초미세먼지 최소치
  final double minUltraFineDust;

  // 오존 최소치
  final double minO3;

  // 이산화질소 최소치
  final double minNO2;

  // 일산화탄소 최소치
  final double minCO;

  // 이황산가스 최소치
  final double minSO2;

  StatusModel({
    required this.level,
    required this.label,
    required this.primaryColor,
    required this.darkColor,
    required this.lightColor,
    required this.detailFontColor,
    required this.imagePath,
    required this.comment,
    required this.minFineDust,
    required this.minUltraFineDust,
    required this.minO3,
    required this.minNO2,
    required this.minCO,
    required this.minSO2,
  });
}

'개발이 좋아서 > Flutter가 좋아서' 카테고리의 다른 글

[flutter] 미세먼지 앱_마무리_UI  (0) 2023.02.07
[flutter] 미세먼지 앱_마무리_repository, screen, utils, main  (0) 2023.02.07
[flutter] 미세먼지 앱_최종 마무리_component, container  (0) 2023.02.07
[flutter] 미세먼지 앱_Hive_연습  (0) 2023.02.06
[flutter] 미세먼지 앱_데이터 모델링  (0) 2023.01.31

    티스토리툴바