diff --git a/lib/helpers/http.dart b/lib/helpers/http.dart new file mode 100644 index 0000000..f807a50 --- /dev/null +++ b/lib/helpers/http.dart @@ -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 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 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"); +} diff --git a/lib/main.dart b/lib/main.dart index d17df7d..ad98b46 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,11 +1,10 @@ // Local import '/var/secrets.dart'; -import 'var/config.dart'; +import '/var/config.dart'; +import 'helpers/http.dart'; // Flutter / Dart import 'package:flutter/material.dart'; -import 'package:http/http.dart' as http; -import 'dart:convert'; void main() { runApp(const MainApp()); @@ -75,37 +74,7 @@ class _MainAppState extends State { ); } - // How to guide: - // https://openweathermap.org/current#zip - Future _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"); - } - + // Call the _refreshWeather() { var lastReloadSeconds = DateTime.now().difference(lastLoadTime).inSeconds; if (debug) debugPrint("DEBUG: Refresh was $lastReloadSeconds seconds ago."); @@ -118,7 +87,7 @@ class _MainAppState extends State { } weather = loadText; - _callOpenWeather(); + weather = loadWeather(); lastLoadTime = DateTime.now(); } }