Add kanji page

This commit is contained in:
2022-01-26 01:58:47 +01:00
parent a8b0f3b737
commit c1ccbc00b3
16 changed files with 292 additions and 97 deletions

View File

@@ -1,81 +1,37 @@
import 'dart:convert';
import 'dart:io';
import 'package:tangocard_reader/models/yokutango_entry.dart';
import 'package:tangocard_reader/screens/error.dart';
import 'package:tangocard_reader/screens/loading.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:tangocard_reader/service/tangocard_files.dart';
class Home extends StatelessWidget {
import 'pages/tango_set_list.dart';
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
int page = 0;
final _pages = [
TangoSetList(files: tangocardFilePaths, route: '/list/tango',),
TangoSetList(files: kanjicardFilePaths, route: '/list/kanji',),
];
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: const Text("よく単語"),
centerTitle: true,
),
body: const TangocardList());
}
}
class TangocardList extends StatelessWidget {
const TangocardList({Key? key}) : super(key: key);
Future<Map<File, List<YokutangoEntry>>> get tangocardFilePaths => rootBundle
.loadString('AssetManifest.json')
.then(
(json) => jsonDecode(json)
.keys
.where((String key) =>
key.contains('yokutango/json/') && key.contains('.json'))
.toList(),
)
.then(
(l) async => Map.fromIterables(
l.map<File>((f) => File(f)),
await Future.wait<List<YokutangoEntry>>(
l
.map<Future<List<YokutangoEntry>>>(
(String t) => rootBundle
.loadString(t)
.then<List<YokutangoEntry>>((s) => jsonDecode(s)
.map<YokutangoEntry>(
(e) => YokutangoEntry.fromJson(e))
.toList()),
)
),
body: _pages[page],
bottomNavigationBar: BottomNavigationBar(
onTap: (int index) => setState(() => page = index),
currentIndex: page,
items: const [
BottomNavigationBarItem(label: 'Tango', icon: Icon(Icons.style)),
BottomNavigationBarItem(label: 'Kanji', icon: Text('漢字')),
],
),
);
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: tangocardFilePaths,
builder: (context, snapshot) {
if (snapshot.hasError) {
debugPrint(snapshot.error.toString());
return const ErrorScreen();
} else if (!snapshot.hasData) {
return const LoadingScreen();
}
return ListView(
children: (snapshot.data as Map<File, List<YokutangoEntry>>)
.entries
.map(
(e) => ListTile(
title: Text(
"${e.key.uri.pathSegments.last} - ${e.value.length} cards"),
onTap: () => Navigator.pushNamed(context, '/tangolist',
arguments: e.key),
),
)
.toList(),
);
},
);
}
}