30
loading...
This website collects cookies to deliver better user experience
class GenreListScreen extends StatefulWidget {
static const routeName = '/genre-list';
@override
_GenreListScreenState createState() => _GenreListScreenState();
}
class _GenreListScreenState extends State<GenreListScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: ...
),
body: Consumer<GenreProvider>(
builder: (context, data, index) {
var genres = data.getGenres;
return ListView.builder(
itemCount: genres.length,
itemBuilder: (context, index) {
var genre = genres[index];
return ListTile(
title: Text(genre['title']),
subtitle: IconButton(
icon: Icon(Icons.edit),
onPressed: () async {
try {
GenreProvider().updateGenre(genre['id'], 'Testing');
} on Exception catch (_) {
showSnackBar(
text: 'Unknown error updating the genre.',
color: Colors.red,
context: context,
);
}
},
),
);
},
);
},
),
);
}
}
class GenreProvider with ChangeNotifier {
static List<Map<String, dynamic>> _genres = [];
Future fetchGenres() async {
try {
QuerySnapshot<Map<String, dynamic>> genres =
await FirebaseFirestore.instance.collection('genres').get();
_genres = [];
genres.docs.forEach((genre) {
_genres.add({'id': genre.id, 'title': genre['title']});
});
notifyListeners();
} catch (e) {
print(e);
}
}
Future updateGenre(String id, String title) async {
try {
await FirebaseFirestore.instance
.collection('genres')
.doc(id)
.update({'title': title});
var updatedGenre = _genres.firstWhere((element) => element['id'] == id);
updatedGenre['title'] = title;
notifyListeners();
} catch (e) {
throw (e);
}
}
List<Map<String, dynamic>> get getGenres {
return _genres;
}
}