toolheim/mobile-app/lib/widgets/warband_drawer_widget.dart

121 lines
3.6 KiB
Dart

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:badges/badges.dart';
import 'package:toolheim/data/github_adapter.dart';
import 'package:toolheim/data/warband_roster.dart';
class WarbandDrawerWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
GitHubAdapter github = Provider.of<GitHubAdapter>(context);
// No settings at all
if (github.repository == null) {
return Padding(
padding: const EdgeInsets.only(top: 100, left: 30, right: 30),
child: Column(children: <Widget>[
Text(
'There is no repository set up. Please open the settings and provide a valid GitHub repository.'),
FlatButton(
onPressed: () {
Navigator.popAndPushNamed(context, '/settings');
},
child: Text(
'Open Settings',
style: TextStyle(color: Colors.blue),
),
),
]),
);
}
// Never fetched any data
if (github.activeRoster() == null) {
return Padding(
padding: const EdgeInsets.only(top: 100, left: 30, right: 30),
child: Column(children: <Widget>[
Text(
'The repository is set, but no warbands are found. Try to search for warbands on the settings screen.'),
FlatButton(
onPressed: () {
Navigator.popAndPushNamed(context, '/settings');
},
child: Text(
'Open Settings',
style: TextStyle(color: Colors.blue),
),
),
]),
);
}
return buildRosterList(context);
}
Widget buildRosterList(BuildContext context) {
GitHubAdapter github = Provider.of<GitHubAdapter>(context);
WarbandRoster activeroster = github.activeRoster();
List<WarbandRoster> rosters = github.rosters;
List<Widget> tiles = new List();
tiles.add(Visibility(
visible: github.isSyncInProgress, child: LinearProgressIndicator()));
// Show some stats for the own warband
tiles.add(UserAccountsDrawerHeader(
otherAccountsPictures: <Widget>[
IconButton(
icon: Icon(Icons.refresh),
color: Colors.white,
highlightColor: Colors.brown,
tooltip: 'Refresh warbands',
onPressed: github.update,
),
IconButton(
icon: Icon(Icons.settings),
color: Colors.white,
highlightColor: Colors.brown,
onPressed: () {
Navigator.popAndPushNamed(context, '/settings');
},
),
],
accountName: Text(activeroster.name),
accountEmail: Text(activeroster.race),
));
rosters.forEach((roster) {
// We mark inactive warbands with a gray acent
var textColor = Colors.black;
if (!roster.active) {
textColor = Colors.black45;
}
tiles.add(ListTile(
onTap: () {
github.changeActiveRoster(roster.playerName);
Navigator.of(context).pop();
},
title: Text(roster.name + ' (' + roster.playerName + ')',
style: TextStyle(color: textColor)),
subtitle: Text(roster.currentVersion.message),
isThreeLine: true,
trailing: Badge(
badgeColor: Colors.black12,
shape: BadgeShape.square,
borderRadius: 2,
badgeContent: Text(roster.campaignPoints.toString() + ' CP',
style: TextStyle(color: Colors.white)),
),
));
});
tiles.add(Divider());
return Column(children: tiles);
}
}