suncheck

为什么选择Suncheck

你一天晒太阳的时间有多少?

在特殊时期,更感到忧郁或无精打采,可能是因为没有摄取足够的阳光。每天只要15分钟的阳光照射,就能分泌足够的血清素,足以预防忧郁症。如果你能知道自己一天接受了多少阳光的照射,是不是就能更主动地管理自己的情绪呢?来Suncheck,记录你的阳光日记,创造更清新、更愉悦的每一天吧 ?

主要功能

1. 记录阳光

suncheck

通过主屏幕的圆形按钮,可以记录自己接受阳光照射的时间。每经过15分钟,按钮的颜色会变得更深。

当检测到行走动作,或应用打开15分钟后,会发送提醒通知。

2. 查看记录

suncheck

通过日历界面,可以查看自己的月度阳光日记,点击每个圆形按钮,可以看到当天接受的阳光照射量、位置、维生素D和电量。

3. 我当前位置的实时天气

可以查看自己当前位置的实时天气。

实现

无服务器跨平台移动应用

  • 一个代码库即可在Android和iOS上发布,维护和更新都更简单。
  • 无服务器架构比传统的客户端-服务器架构更具可扩展性、灵活性和成本效益。
  • 为了实现跨平台性和成本效益,我们没有使用独立的数据库服务器,而是使用了SQLite在本地实现了一个简单的数据库。
框架 Client 数据库 外部API
Flutter ios SQLite Open Weather API
android SharedPreference

Flutter / Dart 版本

  
  Flutter 2.0.5 • channel stable • https://github.com/flutter/flutter.git
  Framework • revision adc687823a (3 months ago) • 2021-04-16 09:40:20 -0700
  Engine • revision b09f014e96
  Tools • Dart 2.12.3
  

使用的Flutter依赖项列表

  
  provider: ^4.3.2+3
  weather: ^2.0.1
  geolocator: ^7.2.0+1
  sqflite: ^2.0.0+3
  path: ^1.8.0
  path_provider: ^2.0.2
  intl: ^0.17.0
  shared_preferences: ^2.0.6
  geocoder: ^0.2.1
  avatar_glow: ^2.0.1
  dotted_line: ^3.0.0
  jiffy: ^4.1.0
  flutter_local_notifications: ^5.0.0+1
  timezone: ^0.7.0
  

阳光记录模型

<div class="snippet-clipboard-content position-relative" data-snippet-clipboard-copy-content="
class Record {

Record({int id, DateTime date, int energy, String location}) {
this.id = id;
this.date = DateTime.parse(DateFormat('yyyy-MM-dd 00:00:00.000').format(date));
this.energy = energy;
this.location = location;
}

Map toMap() {
return {‘id’: id, ‘date’: date.toString(), ‘energy’: energy, ‘location’: location};
}

“>


class Record {

Record({int id, DateTime date, int energy, String location}) {
  this.id = id;
  this.date = DateTime.parse(DateFormat('yyyy-MM-dd 00:00:00.000').format(date));
  this.energy = energy;
  this.location = location;
}

Map<String, dynamic> toMap() {
  return {'id': id, 'date': date.toString(), 'energy': energy, 'location': location};
}