Compare commits

..

3 Commits

4 changed files with 61 additions and 36 deletions

45
lib/helpers/http.dart Normal file
View File

@ -0,0 +1,45 @@
// File for helper functions.
import '/var/config.dart';
import '/var/secrets.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
// Generic method to hit a GET request and return the response.
Future<String> hitAPI(String url) async {
if (debug) debugPrint(url);
http.Response response = await http.get(Uri.parse(url));
String data = "";
if (response.statusCode == 200) {
data = response.body;
var decodedData = jsonDecode(data);
if (debugVerbose) debugPrint(decodedData.toString());
data = decodedData.toString();
} else {
if (debug) debugPrint(response.statusCode.toString());
}
return data;
}
// How to guide: https://openweathermap.org/current#zip
Future<String> hitOpenWeatherZip(String zipCode, String? countryCode) async {
countryCode ??= "US";
String url =
'$openWeatherAPI'
'?zip=$zipCode,$countryCode'
'&units=imperial'
'&appid=$openWeatherKey';
String data = await hitAPI(url);
return data;
}
// Convert the Future value into a usable value.
loadWeather() async {
return await hitOpenWeatherZip("47630", "US");
}

1
lib/helpers/json.dart Normal file
View File

@ -0,0 +1 @@
// Functions related to parsing JSON strings and objects.

View File

@ -1,11 +1,10 @@
// Local // Local
import '/var/secrets.dart'; import '/var/secrets.dart';
import 'var/config.dart'; import '/var/config.dart';
import 'helpers/http.dart';
// Flutter / Dart // Flutter / Dart
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() { void main() {
runApp(const MainApp()); runApp(const MainApp());
@ -75,37 +74,7 @@ class _MainAppState extends State<MainApp> {
); );
} }
// How to guide: // Call the
// https://openweathermap.org/current#zip
Future<String> _hitOpenWeather(String zipCode, String? countryCode) async {
countryCode ??= "US";
String url =
'https://api.openweathermap.org/data/2.5/forecast'
'?zip=$zipCode,$countryCode'
'&units=imperial'
'&appid=$openWeatherKey';
if (debug) debugPrint(url);
http.Response response = await http.get(Uri.parse(url));
String data = "";
if (response.statusCode == 200) {
data = response.body;
var decodedData = jsonDecode(data);
//if (debug) debugPrint(decodedData.toString());
data = decodedData.toString();
} else {
if (debug) debugPrint(response.statusCode.toString());
}
return data;
}
_callOpenWeather() async {
weather = await _hitOpenWeather("47630", "US");
}
_refreshWeather() { _refreshWeather() {
var lastReloadSeconds = DateTime.now().difference(lastLoadTime).inSeconds; var lastReloadSeconds = DateTime.now().difference(lastLoadTime).inSeconds;
if (debug) debugPrint("DEBUG: Refresh was $lastReloadSeconds seconds ago."); if (debug) debugPrint("DEBUG: Refresh was $lastReloadSeconds seconds ago.");
@ -118,7 +87,7 @@ class _MainAppState extends State<MainApp> {
} }
weather = loadText; weather = loadText;
_callOpenWeather(); weather = loadWeather();
lastLoadTime = DateTime.now(); lastLoadTime = DateTime.now();
} }
} }

View File

@ -1,5 +1,15 @@
// This file needs renamed `local.dart` when implemented. // This file needs renamed `local.dart` when implemented.
// Basic
// Project-wide configuration variables for both testing and production. // Project-wide configuration variables for both testing and production.
const bool debug = false; const bool debug = true;
const bool debugVerbose = false;
const int limitRefreshSeconds = 60; const int limitRefreshSeconds = 60;
// OpenWeather Constants
// Settings for how to use the OpenWeather API.
const String openWeatherProtocol = "https://";
const String openWeatherHost = "api.openweathermap.org";
const String openWeatherURI = "/data/2.5/forecast";
const String openWeatherAPI =
"$openWeatherProtocol$openWeatherHost$openWeatherURI";