diff --git a/lib/bloc/kanji/kanji_bloc.dart b/lib/bloc/kanji/kanji_bloc.dart index ab0859e..3731462 100644 --- a/lib/bloc/kanji/kanji_bloc.dart +++ b/lib/bloc/kanji/kanji_bloc.dart @@ -12,7 +12,7 @@ export './kanji_state.dart'; class KanjiBloc extends Bloc { - KanjiBloc() : super(KanjiSearchInitial()); + KanjiBloc() : super(KanjiSearch(KanjiSearchType.Initial)); @override Stream mapEventToState(KanjiEvent event) @@ -31,10 +31,10 @@ class KanjiBloc extends Bloc { } else if (event is GetKanjiSuggestions) { final suggestions = kanjiSuggestions(event.searchString); - yield KanjiSearchInput(suggestions); + yield KanjiSearchKeyboard(KanjiSearchType.Keyboard, suggestions); } else if (event is ReturnToInitialState) { - yield KanjiSearchInitial(); + yield KanjiSearch(KanjiSearchType.Initial); } } } diff --git a/lib/bloc/kanji/kanji_state.dart b/lib/bloc/kanji/kanji_state.dart index ad835db..e280c64 100644 --- a/lib/bloc/kanji/kanji_state.dart +++ b/lib/bloc/kanji/kanji_state.dart @@ -4,13 +4,22 @@ abstract class KanjiState { const KanjiState(); } -class KanjiSearchInitial extends KanjiState { - const KanjiSearchInitial(); +enum KanjiSearchType { + Initial, + Keyboard, + Drawing, + Radical, + Grade } -class KanjiSearchInput extends KanjiState { +class KanjiSearch extends KanjiState { + final KanjiSearchType type; + const KanjiSearch(this.type); +} + +class KanjiSearchKeyboard extends KanjiSearch { final List kanjiSuggestions; - const KanjiSearchInput(this.kanjiSuggestions); + const KanjiSearchKeyboard(KanjiSearchType type, this.kanjiSuggestions) : super(type); } class KanjiSearchLoading extends KanjiState { diff --git a/lib/main.dart b/lib/main.dart index e26b8f6..de77b09 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,9 +3,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:mdi/mdi.dart'; import 'package:jisho_study_tool/bloc/kanji/kanji_bloc.dart'; -import 'package:jisho_study_tool/view/screens/kanji_search.dart'; +import 'package:jisho_study_tool/view/screens/kanji/view.dart'; import 'package:jisho_study_tool/view/screens/history.dart'; -import 'package:jisho_study_tool/view/screens/search.dart'; +import 'package:jisho_study_tool/view/screens/search/view.dart'; import 'bloc/search/search_bloc.dart'; @@ -69,16 +69,18 @@ final List navBar = [ icon: Icon(Icons.search), ), BottomNavigationBarItem( - label: 'Kanji', - icon: Icon(Mdi.ideogramCjk, size: 30,) - ), + label: 'Kanji', + icon: Icon( + Mdi.ideogramCjk, + size: 30, + )), BottomNavigationBarItem( label: 'History', - icon: Icon(Icons.bookmark), + icon: Icon(Icons.history), ), BottomNavigationBarItem( label: 'Memorize', - icon: Icon(Icons.local_offer), + icon: Icon(Icons.bookmark), ), BottomNavigationBarItem( label: 'Settings', diff --git a/lib/view/components/kanji/kanji_search_suggestion_list/kanji_search_suggestion_list.dart b/lib/view/components/kanji/kanji_grid.dart similarity index 65% rename from lib/view/components/kanji/kanji_search_suggestion_list/kanji_search_suggestion_list.dart rename to lib/view/components/kanji/kanji_grid.dart index 28dfb48..5861b76 100644 --- a/lib/view/components/kanji/kanji_search_suggestion_list/kanji_search_suggestion_list.dart +++ b/lib/view/components/kanji/kanji_grid.dart @@ -1,32 +1,32 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; + import 'package:jisho_study_tool/bloc/kanji/kanji_bloc.dart'; -class KanjiSuggestions extends StatelessWidget { +class KanjiGrid extends StatelessWidget { final List suggestions; - const KanjiSuggestions(this.suggestions); + const KanjiGrid(this.suggestions); @override Widget build(BuildContext context) { return Container( - color: Colors.grey[300], padding: EdgeInsets.symmetric( vertical: 20.0, horizontal: 40.0, ), child: GridView.count( crossAxisCount: 3, - mainAxisSpacing: 20.0, - crossAxisSpacing: 40.0, - children: suggestions.map((kanji) => _Suggestion(kanji)).toList(), + mainAxisSpacing: 10.0, + crossAxisSpacing: 10.0, + children: suggestions.map((kanji) => _GridItem(kanji)).toList(), ), ); } } -class _Suggestion extends StatelessWidget { +class _GridItem extends StatelessWidget { final String kanji; - const _Suggestion(this.kanji); + const _GridItem(this.kanji); @override Widget build(BuildContext context) { @@ -36,19 +36,19 @@ class _Suggestion extends StatelessWidget { }, child: Container( decoration: BoxDecoration( - color: Colors.grey, - borderRadius: BorderRadius.circular(10.0), + color: Colors.grey[300], + borderRadius: BorderRadius.circular(20.0), ), child: Container( margin: EdgeInsets.all(10.0), child: FittedBox( child: Text( kanji, - style: TextStyle(color: Colors.white), + style: TextStyle(color: Colors.black), ), ), ), ), ); } -} +} \ No newline at end of file diff --git a/lib/view/components/kanji/kanji_search_bar.dart b/lib/view/components/kanji/kanji_search_bar.dart index 1e94bfe..67e4342 100644 --- a/lib/view/components/kanji/kanji_search_bar.dart +++ b/lib/view/components/kanji/kanji_search_bar.dart @@ -69,12 +69,13 @@ class _KanjiSearchBarState extends State { onSubmitted: (text) => BlocProvider.of(context).add(GetKanji(text)), decoration: new InputDecoration( + prefixIcon: Icon(Icons.search), - hintText: 'Search for kanji', + hintText: 'Search', fillColor: Colors.white, filled: true, border: OutlineInputBorder( - borderRadius: BorderRadius.circular(100.0), + borderRadius: BorderRadius.circular(10.0), ), contentPadding: EdgeInsets.symmetric(vertical: 10.0), isDense: false, diff --git a/lib/view/components/kanji/kanji_search_suggestion_list/kanji_grid.dart b/lib/view/components/kanji/kanji_search_suggestion_list/kanji_grid.dart deleted file mode 100644 index b0f49fb..0000000 --- a/lib/view/components/kanji/kanji_search_suggestion_list/kanji_grid.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/material.dart'; - -class KanjiGrid extends StatelessWidget { - - @override - Widget build(BuildContext context) { - return GridView.count( - crossAxisCount: 3, - ); - } -} \ No newline at end of file diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/examples.dart b/lib/view/components/kanji/result/examples.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/examples.dart rename to lib/view/components/kanji/result/examples.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/grade.dart b/lib/view/components/kanji/result/grade.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/grade.dart rename to lib/view/components/kanji/result/grade.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/header.dart b/lib/view/components/kanji/result/header.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/header.dart rename to lib/view/components/kanji/result/header.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/jlpt_level.dart b/lib/view/components/kanji/result/jlpt_level.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/jlpt_level.dart rename to lib/view/components/kanji/result/jlpt_level.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/kunyomi.dart b/lib/view/components/kanji/result/kunyomi.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/kunyomi.dart rename to lib/view/components/kanji/result/kunyomi.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/meaning.dart b/lib/view/components/kanji/result/meaning.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/meaning.dart rename to lib/view/components/kanji/result/meaning.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/onyomi.dart b/lib/view/components/kanji/result/onyomi.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/onyomi.dart rename to lib/view/components/kanji/result/onyomi.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/radical.dart b/lib/view/components/kanji/result/radical.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/radical.dart rename to lib/view/components/kanji/result/radical.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/rank.dart b/lib/view/components/kanji/result/rank.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/rank.dart rename to lib/view/components/kanji/result/rank.dart diff --git a/lib/view/components/kanji/kanji_search_result_page/parts/stroke_order_gif.dart b/lib/view/components/kanji/result/stroke_order_gif.dart similarity index 100% rename from lib/view/components/kanji/kanji_search_result_page/parts/stroke_order_gif.dart rename to lib/view/components/kanji/result/stroke_order_gif.dart diff --git a/lib/view/components/search/search_bar.dart b/lib/view/components/search/search_bar.dart index 3378b40..7738ce7 100644 --- a/lib/view/components/search/search_bar.dart +++ b/lib/view/components/search/search_bar.dart @@ -11,8 +11,11 @@ class SearchBar extends StatelessWidget { child: Column( children: [ TextField( - onSubmitted: (text) => BlocProvider.of(context) - .add(GetSearchResults(text)), + onSubmitted: (text) { + + BlocProvider.of(context) + .add(GetSearchResults(text)); + }, controller: TextEditingController(), decoration: InputDecoration( labelText: 'Search', diff --git a/lib/view/components/search/search_result_page/parts/other_forms.dart b/lib/view/components/search/search_result_page/parts/other_forms.dart index 8f78c20..837fd5b 100644 --- a/lib/view/components/search/search_result_page/parts/other_forms.dart +++ b/lib/view/components/search/search_result_page/parts/other_forms.dart @@ -9,15 +9,18 @@ class OtherForms extends StatelessWidget { Widget build(BuildContext context) { return Container( child: Column( - children: [ - Text( - 'Other Forms', - style: TextStyle(fontWeight: FontWeight.bold), - ), - Row( - children: otherForms.map((form) => _KanaBox(form)).toList(), - ), - ], + children: + this.otherForms.isNotEmpty + ? [ + Text( + 'Other Forms', + style: TextStyle(fontWeight: FontWeight.bold), + ), + Row( + children: otherForms.map((form) => _KanaBox(form)).toList(), + ), + ] + : [], ), ); } diff --git a/lib/view/components/search/search_result_page/parts/senses.dart b/lib/view/components/search/search_result_page/parts/senses.dart index 524bcfb..d6666d1 100644 --- a/lib/view/components/search/search_result_page/parts/senses.dart +++ b/lib/view/components/search/search_result_page/parts/senses.dart @@ -8,7 +8,7 @@ class Senses extends StatelessWidget { @override Widget build(BuildContext context) { final List senseWidgets = - senses.map((sense) => _Sense(sense)).toList(); + senses.asMap().entries.map((e) => _Sense(e.key, e.value)).toList(); return Container( child: Column( @@ -18,23 +18,42 @@ class Senses extends StatelessWidget { } class _Sense extends StatelessWidget { + final int index; final JishoWordSense sense; - const _Sense(this.sense); + + const _Sense(this.index, this.sense); @override Widget build(BuildContext context) { return Container( child: Column( children: [ - Text( - sense.parts_of_speech.join(', '), - style: TextStyle(fontWeight: FontWeight.bold), - textAlign: TextAlign.left, + Row( + children: [ + Text( + (index + 1).toString() + '. ', + style: TextStyle(color: Colors.grey), + ), + Text( + sense.parts_of_speech.join(', '), + style: TextStyle(fontWeight: FontWeight.bold), + textAlign: TextAlign.left, + ), + ], + ), + Container( + child: Row( + children:[ + Column( + children: + sense.english_definitions.map((def) => Text(def)).toList(), + crossAxisAlignment: CrossAxisAlignment.start, + ), + ] + ), + padding: EdgeInsets.symmetric(horizontal: 20), + margin: EdgeInsets.fromLTRB(0, 5, 0, 15), ), - Column( - children: - sense.english_definitions.map((def) => Text(def)).toList(), - ) ], ), ); diff --git a/lib/view/components/search/search_result_page/search_card.dart b/lib/view/components/search/search_result_page/search_card.dart index 1b2e53c..c6d96b7 100644 --- a/lib/view/components/search/search_result_page/search_card.dart +++ b/lib/view/components/search/search_result_page/search_card.dart @@ -44,6 +44,9 @@ class SearchResultCard extends StatelessWidget { children: [ Senses(result.senses), OtherForms(otherForms), + // Text(result.toJson().toString()), + // Text(result.attribution.toJson().toString()), + // Text(result.japanese.map((e) => e.toJson().toString()).toList().toString()), ], ), padding: EdgeInsets.symmetric(horizontal: 30), diff --git a/lib/view/screens/kanji/init.dart b/lib/view/screens/kanji/init.dart new file mode 100644 index 0000000..44717c7 --- /dev/null +++ b/lib/view/screens/kanji/init.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +import 'package:jisho_study_tool/view/components/kanji/kanji_search_bar.dart'; + +class InitScreen extends StatelessWidget { + const InitScreen({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: 20), + child: KanjiSearchBar(), + ); + + } +} \ No newline at end of file diff --git a/lib/view/components/kanji/kanji_search_result_page/kanji_search_result_page.dart b/lib/view/screens/kanji/result.dart similarity index 76% rename from lib/view/components/kanji/kanji_search_result_page/kanji_search_result_page.dart rename to lib/view/screens/kanji/result.dart index 87a5763..b73bd0a 100644 --- a/lib/view/components/kanji/kanji_search_result_page/kanji_search_result_page.dart +++ b/lib/view/screens/kanji/result.dart @@ -1,17 +1,18 @@ + import 'package:flutter/material.dart'; import 'package:unofficial_jisho_api/api.dart' as jisho; -import 'parts/grade.dart'; -import 'parts/header.dart'; -import 'parts/jlpt_level.dart'; -import 'parts/meaning.dart'; -import 'parts/radical.dart'; -import 'parts/rank.dart'; -import 'parts/stroke_order_gif.dart'; -import 'parts/onyomi.dart'; -import 'parts/kunyomi.dart'; -import 'parts/examples.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/grade.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/header.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/jlpt_level.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/meaning.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/radical.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/rank.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/stroke_order_gif.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/onyomi.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/kunyomi.dart'; +import 'package:jisho_study_tool/view/components/kanji/result/examples.dart'; class KanjiResultCard extends StatelessWidget { final jisho.KanjiResult result; @@ -88,4 +89,4 @@ class KanjiResultCard extends StatelessWidget { } KanjiResultCard(this.result); -} +} \ No newline at end of file diff --git a/lib/view/screens/kanji/search/drawing.dart b/lib/view/screens/kanji/search/drawing.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/view/screens/kanji/search/grade_list.dart b/lib/view/screens/kanji/search/grade_list.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/view/screens/kanji/search/grid.dart b/lib/view/screens/kanji/search/grid.dart new file mode 100644 index 0000000..f1c6829 --- /dev/null +++ b/lib/view/screens/kanji/search/grid.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:jisho_study_tool/bloc/kanji/kanji_bloc.dart'; +import 'package:jisho_study_tool/view/components/kanji/kanji_grid.dart'; +import 'package:jisho_study_tool/view/components/kanji/kanji_search_bar.dart'; + +class SearchGrid extends StatelessWidget { + final List suggestions; + const SearchGrid(this.suggestions); + + @override + Widget build(BuildContext context) { + return + Column( + children: [ + SizedBox(height: 10), + KanjiSearchBar(), + SizedBox(height: 10), + Expanded( + child: KanjiGrid(suggestions) + ) + ], + ); + } +} \ No newline at end of file diff --git a/lib/view/screens/kanji/search/radical_list.dart b/lib/view/screens/kanji/search/radical_list.dart new file mode 100644 index 0000000..8d93387 --- /dev/null +++ b/lib/view/screens/kanji/search/radical_list.dart @@ -0,0 +1 @@ +const List> radicals = [[]]; \ No newline at end of file diff --git a/lib/view/screens/kanji_search.dart b/lib/view/screens/kanji/view.dart similarity index 66% rename from lib/view/screens/kanji_search.dart rename to lib/view/screens/kanji/view.dart index 91cacb4..77c1daf 100644 --- a/lib/view/screens/kanji_search.dart +++ b/lib/view/screens/kanji/view.dart @@ -1,18 +1,22 @@ + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:jisho_study_tool/bloc/kanji/kanji_bloc.dart'; -import 'package:jisho_study_tool/view/components/kanji/kanji_search_bar.dart'; -import 'package:jisho_study_tool/view/components/kanji/kanji_search_result_page/kanji_search_result_page.dart'; -import 'package:jisho_study_tool/view/components/kanji/kanji_search_suggestion_list/kanji_search_suggestion_list.dart'; import 'package:jisho_study_tool/view/screens/loading.dart'; +import 'package:jisho_study_tool/view/components/kanji/kanji_grid.dart'; +import 'package:jisho_study_tool/view/components/kanji/kanji_search_bar.dart'; + +import 'init.dart'; +import 'result.dart'; +import 'search/grid.dart'; class KanjiView extends StatelessWidget { @override Widget build(BuildContext context) { return BlocListener( listener: (context, state) { - if (state is KanjiSearchInitial) { + if (state is KanjiSearch && state.type == KanjiSearchType.Initial) { FocusScope.of(context).unfocus(); } else if (state is KanjiSearchLoading) { FocusScope.of(context).unfocus(); @@ -20,8 +24,10 @@ class KanjiView extends StatelessWidget { }, child: BlocBuilder( builder: (context, state) { - if (state is KanjiSearchInitial) return Container(); - else if (state is KanjiSearchInput) return KanjiSuggestions(state.kanjiSuggestions); + if (state is KanjiSearch) { + if (state.type == KanjiSearchType.Initial) return InitScreen(); + else if (state is KanjiSearchKeyboard) return SearchGrid(state.kanjiSuggestions); + } else if (state is KanjiSearchLoading) return LoadingScreen(); else if (state is KanjiSearchFinished) return WillPopScope( @@ -49,19 +55,19 @@ class KanjiViewBar extends StatelessWidget { onPressed: () => BlocProvider.of(context).add(ReturnToInitialState()), ), - Expanded( - child: Container( - child: KanjiSearchBar(), - ), - ), - IconButton( - icon: Icon(Icons.star_border), - onPressed: null, - ), - IconButton( - icon: Icon(Icons.add), - onPressed: null, - ), + // Expanded( + // child: Container( + // child: KanjiSearchBar(), + // ), + // ), + // IconButton( + // icon: Icon(Icons.star_border), + // onPressed: null, + // ), + // IconButton( + // icon: Icon(Icons.add), + // onPressed: null, + // ), ], ), ); diff --git a/lib/view/screens/search/details.dart b/lib/view/screens/search/details.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/view/screens/search/results.dart b/lib/view/screens/search/results.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/view/screens/search.dart b/lib/view/screens/search/view.dart similarity index 100% rename from lib/view/screens/search.dart rename to lib/view/screens/search/view.dart