import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:kulinar_app/models/recipe_class.dart'; import 'package:kulinar_app/widgets/error_widgets.dart'; import 'package:kulinar_app/widgets/recipe_card_widget.dart'; import 'package:kulinar_app/widgets/custom_drawer_widget.dart'; import 'package:kulinar_app/models/data/recipe_data_class.dart'; import 'package:kulinar_app/models/data/settings_data_class.dart'; import 'package:http/http.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class WeekView extends StatefulWidget { const WeekView({Key? key}) : super(key: key); @override _WeekViewState createState() => _WeekViewState(); } class _WeekViewState extends State { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(AppLocalizations.of(context)!.category5)), drawer: CustomDrawer(initalIndex: 2), body: FutureBuilder( future: _getWeeklyRecipes(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.connectionState != ConnectionState.done) return LinearProgressIndicator(); if (snapshot.hasError || !snapshot.hasData) return NetworkContentError(refreshCallback: _retry); return RefreshIndicator( onRefresh: () async { setState(() {}); }, child: ListView( children: _buildRecipeCardsFromString(snapshot.data.body), ), ); }, ), ); } Future _getWeeklyRecipes() async { Map _headers = {"Content-Type": "application/json; charset=UTF-8"}; try { return await Future.delayed(Duration(milliseconds: 500), () { print(SettingsData.settings["serverURL"]); return get(Uri.https(SettingsData.settings["serverURL"]!, "/weekly"), headers: _headers); }); } catch (e) { print(e); return null; } } List _buildRecipeCardsFromString(String string) { List _list = []; RecipeData.remoteRecipeList.clear(); for (dynamic _entry in jsonDecode(string)) { Recipe _recipe = Recipe.fromJson(jsonEncode(_entry)); RecipeData.remoteRecipeList.add(_recipe); _list.add(RecipeCard(remote: true, recipe: _recipe)); } return _list; } Future _retry() async { await Future.delayed(Duration(milliseconds: 300)); setState(() {}); return null; } }