import 'package:anyway/structs/preferences.dart'; import 'package:flutter/material.dart'; class ProfilePage extends StatefulWidget { @override _ProfilePageState createState() => _ProfilePageState(); } class _ProfilePageState extends State { Future _prefs = loadUserPreferences(); @override Widget build(BuildContext context) { return ListView( children: [ // First a round, centered image Center( child: CircleAvatar( radius: 100, child: Icon(Icons.person, size: 100), ) ), Center( child: Text('Curious traveler', style: TextStyle(fontSize: 24)) ), Divider(indent: 25, endIndent: 25, height: 50), 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)) ), ), FutureBuilder(future: _prefs, builder: futureSliders) ] ); } Widget futureSliders(BuildContext context, AsyncSnapshot 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 PreferenceSliders extends StatefulWidget { final List prefs; PreferenceSliders({required this.prefs}); @override State createState() => _PreferenceSlidersState(); } class _PreferenceSlidersState extends State { @override Widget build(BuildContext context) { List 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: sliders); } }