From b1d01c691551f1b65b1c8daf5396bb532db49514 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Fri, 25 Apr 2025 15:59:53 -0700 Subject: [PATCH] Begin a refactor of code to make it more reusable and get it out of main. Going to stop worrying about this for now though and just get the data formatted and presented well, then refactor once it's working correctly. --- lib/helpers/http.dart | 45 +++++++++++++++++++++++++++++++++++++++++++ lib/main.dart | 39 ++++--------------------------------- 2 files changed, 49 insertions(+), 35 deletions(-) create mode 100644 lib/helpers/http.dart 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(); } }