frontend compliant with backend
This commit is contained in:
		| @@ -9,6 +9,9 @@ class ProfilePage extends StatefulWidget { | ||||
| } | ||||
|  | ||||
| class _ProfilePageState extends State<ProfilePage> { | ||||
|   Future<UserPreferences> _prefs = loadUserPreferences(); | ||||
|  | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return ListView( | ||||
| @@ -24,66 +27,82 @@ class _ProfilePageState extends State<ProfilePage> { | ||||
|           child: Text('Curious traveler', style: TextStyle(fontSize: 24)) | ||||
|         ), | ||||
|  | ||||
|         Padding(padding: EdgeInsets.all(10)), | ||||
|         Divider(indent: 25, endIndent: 25), | ||||
|         Padding(padding: EdgeInsets.all(10)), | ||||
|         Divider(indent: 25, endIndent: 25, height: 50), | ||||
|  | ||||
|         Padding( | ||||
|           padding: EdgeInsets.only(left: 10, right: 10, top: 0, bottom: 10), | ||||
|           child: Text('Please rate your personal preferences so that we can taylor your experience.', style: TextStyle(fontSize: 18)) | ||||
|         Center( | ||||
|           child: Padding( | ||||
|            padding: EdgeInsets.only(left: 10, right: 10, top: 0, bottom: 10), | ||||
|             child: Text('For a tailored experience, please rate your discovery preferences.', style: TextStyle(fontSize: 18)) | ||||
|           ), | ||||
|         ), | ||||
|  | ||||
|         // Now the sliders | ||||
|         ImportanceSliders() | ||||
|         FutureBuilder(future: _prefs, builder: futureSliders) | ||||
|       ] | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   Widget futureSliders(BuildContext context, AsyncSnapshot<UserPreferences> snapshot) { | ||||
|     if (snapshot.connectionState == ConnectionState.done) { | ||||
|       UserPreferences prefs = snapshot.data!; | ||||
|  | ||||
|       return Column( | ||||
|         children: [ | ||||
|           PreferenceSliders(prefs: [prefs.maxTime, prefs.maxDetour]), | ||||
|           Divider(indent: 25, endIndent: 25, height: 50), | ||||
|           PreferenceSliders(prefs: [prefs.sightseeing, prefs.shopping, prefs.nature]) | ||||
|         ] | ||||
|       ); | ||||
|     } else { | ||||
|       return CircularProgressIndicator(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| class ImportanceSliders extends StatefulWidget { | ||||
| class PreferenceSliders extends StatefulWidget { | ||||
|   final List<SinglePreference> prefs; | ||||
|  | ||||
|   PreferenceSliders({required this.prefs}); | ||||
|  | ||||
|   @override | ||||
|   State<ImportanceSliders> createState() => _ImportanceSlidersState(); | ||||
|   State<PreferenceSliders> createState() => _PreferenceSlidersState(); | ||||
| } | ||||
|  | ||||
|  | ||||
| class _ImportanceSlidersState extends State<ImportanceSliders> { | ||||
|  | ||||
|   UserPreferences _prefs = UserPreferences(); | ||||
|  | ||||
|   List<Card> _createSliders() { | ||||
|     List<Card> sliders = []; | ||||
|     for (SinglePreference pref in _prefs.preferences) { | ||||
|       sliders.add(Card( | ||||
|         child: ListTile( | ||||
|           leading: pref.icon, | ||||
|           title: Text(pref.name), | ||||
|           subtitle: Slider( | ||||
|             value: pref.value.toDouble(), | ||||
|             min: 0, | ||||
|             max: 10, | ||||
|             divisions: 10, | ||||
|             label: pref.value.toString(), | ||||
|             onChanged: (double newValue) { | ||||
|               setState(() { | ||||
|                 pref.value = newValue.toInt(); | ||||
|                 _prefs.save(); | ||||
|               }); | ||||
|             }, | ||||
|           ) | ||||
|         ), | ||||
|         margin: const EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 0), | ||||
|         shadowColor: Colors.grey, | ||||
|       )); | ||||
|     } | ||||
|     return sliders; | ||||
|   } | ||||
| class _PreferenceSlidersState extends State<PreferenceSliders> { | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     List<Card> sliders = []; | ||||
|       for (SinglePreference pref in widget.prefs) { | ||||
|       sliders.add( | ||||
|         Card( | ||||
|           child: ListTile( | ||||
|             leading: pref.icon, | ||||
|             title: Text(pref.name), | ||||
|             subtitle: Slider( | ||||
|               value: pref.value.toDouble(), | ||||
|               min: pref.minVal.toDouble(), | ||||
|               max: pref.maxVal.toDouble(), | ||||
|               divisions: pref.maxVal - pref.minVal, | ||||
|               label: pref.value.toString(), | ||||
|               onChanged: (double newValue) { | ||||
|                 setState(() { | ||||
|                   pref.value = newValue.toInt(); | ||||
|                   pref.save(); | ||||
|                 }); | ||||
|               }, | ||||
|             ) | ||||
|           ), | ||||
|           margin: const EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 0), | ||||
|           shadowColor: Colors.grey, | ||||
|         ) | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     return Column(children: _createSliders()); | ||||
|     return Column( | ||||
|       children: sliders); | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user