import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:wetter/components/compact_weather_data.dart'; import 'package:wetter/components/main_menu.dart'; import 'package:wetter/models/daily_weather_model.dart'; import 'package:wetter/services/brightsky_api_service.dart'; void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { const MyApp({super.key}); @override State createState() => _MyAppState(); } class _MyAppState extends State { SharedPreferences? prefs; int _daysToLoad = 7; late Future> dailyWeather; @override void initState() { super.initState(); initializePreferences(); dailyWeather = BrightSkyAPI.fetchForecastForTimeRange(DateTime.now(), _daysToLoad); } Future initializePreferences() async { prefs = await SharedPreferences.getInstance(); setState(() { _daysToLoad = prefs!.getInt("daysToLoad") ?? 7; }); } @override Widget build(BuildContext context) { return MaterialApp( title: 'Wetter', theme: ThemeData( primarySwatch: Colors.blue, textTheme: const TextTheme( headline1: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold), headline6: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic), bodyText2: TextStyle(fontSize: 14.0, fontFamily: 'Hind'), ), ), home: Scaffold( appBar: AppBar( title: const Text('Wetter in Harburg'), ), drawer: const NavBar(), body: RefreshIndicator( onRefresh: () { return Future(() { setState(() { _daysToLoad = prefs?.getInt("daysToLoad") ?? 7; dailyWeather = BrightSkyAPI.fetchForecastForTimeRange( DateTime.now(), _daysToLoad); }); }); }, child: SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), child: Center( child: FutureBuilder>( future: BrightSkyAPI.fetchForecastForTimeRange( DateTime.now(), _daysToLoad), builder: (context, snapshot) { if (snapshot.hasData) { return Column( children: snapshot.data! .map((e) => CompactWeatherData(e)) .toList()); } else if (snapshot.hasError) { return Text('${snapshot.error}'); } // By default, show a loading spinner. return const CircularProgressIndicator(); }, ), ), ))), ); } }