2019-06-29 22:56:11 +00:00
|
|
|
import 'package:flutter/cupertino.dart';
|
2019-07-04 21:45:05 +00:00
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
|
|
import '../types/abstracts.dart';
|
|
|
|
import '../types/credential.dart';
|
2019-06-29 22:56:11 +00:00
|
|
|
|
|
|
|
import '../widgets/tappable_text_list.dart';
|
|
|
|
|
2019-07-04 21:45:05 +00:00
|
|
|
class Home extends StatefulWidget {
|
|
|
|
@override
|
|
|
|
State createState() => _HomeState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _HomeState extends State<Home> {
|
|
|
|
CredentialsRepo _client;
|
|
|
|
Future<List<Metadata>> _metadatas;
|
|
|
|
|
|
|
|
@override
|
|
|
|
didChangeDependencies() {
|
|
|
|
super.didChangeDependencies();
|
|
|
|
_client = Provider.of<CredentialsRepo>(context);
|
|
|
|
}
|
|
|
|
|
2019-06-29 22:56:11 +00:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
2019-07-04 21:45:05 +00:00
|
|
|
if (_metadatas == null) {
|
|
|
|
_metadatas = _client.getAllMetadata('').toList();
|
|
|
|
}
|
|
|
|
|
2019-06-29 22:56:11 +00:00
|
|
|
return CupertinoPageScaffold(
|
2019-07-04 21:45:05 +00:00
|
|
|
child: FutureBuilder<List<Metadata>>(
|
|
|
|
future: _metadatas,
|
|
|
|
builder: (BuildContext context,
|
|
|
|
AsyncSnapshot<List<Metadata>> snapshot) =>
|
|
|
|
(snapshot.connectionState == ConnectionState.done)
|
|
|
|
? TappableTextList(
|
|
|
|
tappableText: _buildTappableText(context, snapshot.data))
|
|
|
|
: Container(),
|
|
|
|
),
|
|
|
|
navigationBar: CupertinoNavigationBar(),
|
2019-06-29 22:56:11 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-07-04 21:45:05 +00:00
|
|
|
Map<String, GestureTapCallback> _buildTappableText(
|
|
|
|
BuildContext context,
|
|
|
|
List<Metadata> metadatas,
|
|
|
|
) {
|
|
|
|
final Map<String, List<Metadata>> metaMap = {};
|
|
|
|
|
|
|
|
metadatas.sort((a, b) => a.id.compareTo(b.id));
|
|
|
|
|
|
|
|
for (var metadata in metadatas) {
|
|
|
|
final source = metadata.sourceHost;
|
|
|
|
|
|
|
|
if (metaMap[source] == null) {
|
|
|
|
metaMap[source] = [metadata];
|
|
|
|
} else {
|
|
|
|
metaMap[source].add(metadata);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
final handleOnTap = (List<Metadata> metadatas) => () =>
|
|
|
|
Navigator.of(context).pushNamed('/credentials', arguments: metadatas);
|
|
|
|
|
|
|
|
final Map<String, GestureTapCallback> tappableText = {};
|
|
|
|
|
|
|
|
metaMap.forEach((String key, List<Metadata> value) =>
|
|
|
|
tappableText[key] = handleOnTap(value));
|
2019-06-29 22:56:11 +00:00
|
|
|
|
|
|
|
return tappableText;
|
|
|
|
}
|
|
|
|
}
|