add custom srs
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../models/kanji_item.dart';
|
||||
import '../services/deck_repository.dart';
|
||||
import 'settings_screen.dart';
|
||||
|
||||
class BrowseScreen extends StatefulWidget {
|
||||
const BrowseScreen({super.key});
|
||||
@@ -10,8 +11,7 @@ class BrowseScreen extends StatefulWidget {
|
||||
State<BrowseScreen> createState() => _BrowseScreenState();
|
||||
}
|
||||
|
||||
class _BrowseScreenState extends State<BrowseScreen>
|
||||
with SingleTickerProviderStateMixin {
|
||||
class _BrowseScreenState extends State<BrowseScreen> with SingleTickerProviderStateMixin {
|
||||
late TabController _tabController;
|
||||
late PageController _kanjiPageController;
|
||||
late PageController _vocabPageController;
|
||||
@@ -27,6 +27,7 @@ class _BrowseScreenState extends State<BrowseScreen>
|
||||
String _status = 'Loading...';
|
||||
int _currentKanjiPage = 0;
|
||||
int _currentVocabPage = 0;
|
||||
bool _apiKeyMissing = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -58,6 +59,14 @@ class _BrowseScreenState extends State<BrowseScreen>
|
||||
_loadDecks();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_tabController.dispose();
|
||||
_kanjiPageController.dispose();
|
||||
_vocabPageController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> _loadDecks() async {
|
||||
setState(() => _loading = true);
|
||||
try {
|
||||
@@ -67,7 +76,7 @@ class _BrowseScreenState extends State<BrowseScreen>
|
||||
|
||||
if (apiKey == null || apiKey.isEmpty) {
|
||||
setState(() {
|
||||
_status = 'API key not set.';
|
||||
_apiKeyMissing = true;
|
||||
_loading = false;
|
||||
});
|
||||
return;
|
||||
@@ -93,6 +102,7 @@ class _BrowseScreenState extends State<BrowseScreen>
|
||||
_loading = false;
|
||||
_status =
|
||||
'Loaded ${_kanjiDeck.length} kanji and ${_vocabDeck.length} vocabulary.';
|
||||
_apiKeyMissing = false;
|
||||
});
|
||||
} catch (e) {
|
||||
setState(() {
|
||||
@@ -122,23 +132,42 @@ class _BrowseScreenState extends State<BrowseScreen>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (_apiKeyMissing) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Browse')),
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Text('WaniKani API key is not set.', style: TextStyle(color: Colors.white)),
|
||||
const SizedBox(height: 16),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
await Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => const SettingsScreen()),
|
||||
);
|
||||
_loadDecks();
|
||||
},
|
||||
child: const Text('Go to Settings'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
backgroundColor: const Color(0xFF121212),
|
||||
appBar: AppBar(
|
||||
title: const Text('Browse Items'),
|
||||
backgroundColor: const Color(0xFF1F1F1F),
|
||||
foregroundColor: Colors.white,
|
||||
title: const Text('Browse'),
|
||||
bottom: TabBar(
|
||||
controller: _tabController,
|
||||
tabs: const [
|
||||
Tab(text: 'Kanji'),
|
||||
Tab(text: 'Vocabulary'),
|
||||
],
|
||||
labelColor: Colors.blueAccent,
|
||||
unselectedLabelColor: Colors.grey,
|
||||
indicatorColor: Colors.blueAccent,
|
||||
),
|
||||
),
|
||||
backgroundColor: const Color(0xFF121212),
|
||||
body: _loading
|
||||
? Center(
|
||||
child: Column(
|
||||
@@ -438,12 +467,4 @@ class _BrowseScreenState extends State<BrowseScreen>
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_tabController.dispose();
|
||||
_kanjiPageController.dispose();
|
||||
_vocabPageController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user