Code owners
Assign users and groups as approvers for specific file changes. Learn more.
characters_list_screen.dart 2.03 KiB
import 'package:assignment_1_base_project/db/character.dart';
import 'package:assignment_1_base_project/db/database.dart';
import 'package:assignment_1_base_project/networking/api.dart';
import 'package:assignment_1_base_project/screens/character_detail_screen.dart';
import 'package:flutter/material.dart';
class CharactersListScreen extends StatefulWidget {
@override
_CharactersListScreenState createState() => _CharactersListScreenState();
}
class _CharactersListScreenState extends State<CharactersListScreen> {
List<Character>? characters;
@override
void initState() {
// first the characters are loaded from the database and displayed
characters = Database().storedCharacters;
//// Check if characters empty (or set to false if null), then load data from API
if (characters?.isEmpty ?? false) {
// then the characters are loaded from the API and displayed as soon as they are there
API().fetchRemoteGoTCharacters().then((characters) {
setState(() {
// the setState method re-renders the UI
this.characters = characters;
});
});
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Game of Thrones Characters'),
),
body: SafeArea(
child: ListView.separated(
itemBuilder: (context, index) => _buildCharacterListTile(index),
separatorBuilder: (_, __) => Divider(),
itemCount: characters?.length ?? 0,
),
),
);
}
Widget _buildCharacterListTile(int index) {
final Character character = characters![index];
return ListTile(
title: Text(
'${index + 1}. ${character.name}',
style: TextStyle(fontSize: 17),
),
trailing: Icon(Icons.arrow_forward_ios_outlined),
onTap: () {
//TODO: open the CharacterDetailScreen with the character.
Navigator.push(context, MaterialPageRoute(builder: (context) => CharacterDetailScreen(character: character)));
},
);
}
}