From 83f4eb2f5c3999ea5154ef8f448dfa220fb15535 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Thu, 27 Jan 2022 00:18:11 +0100 Subject: [PATCH] Several changes --- android/app/build.gradle | 2 +- lib/components/common/square.dart | 30 +++++++++ lib/components/kanji/kanji_result_body.dart | 8 +-- .../kanji/kanji_result_body/header.dart | 11 ++-- .../kanji/kanji_result_body/radical.dart | 44 +++++++++---- .../search_results_body/parts/kanji.dart | 65 +++++++++---------- .../parts/kanji_kana_box.dart | 4 ++ lib/data/grades.dart | 2 +- lib/screens/info/about.dart | 1 + lib/screens/search/result_page.dart | 13 +++- .../search/search_mechanisms/drawing.dart | 2 +- .../search/search_mechanisms/grade_list.dart | 43 ++++++------ 12 files changed, 140 insertions(+), 85 deletions(-) create mode 100644 lib/components/common/square.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index 6a92391..290e841 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -38,7 +38,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.jisho_study_tool" + applicationId "app.jishostudytool.jisho_study_tool" minSdkVersion 16 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() diff --git a/lib/components/common/square.dart b/lib/components/common/square.dart new file mode 100644 index 0000000..2fb96df --- /dev/null +++ b/lib/components/common/square.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; + +/// This is somewhat of a hack. +/// Wrapping the AspectRatio inside an UnconstrainedBox and IntrinsicHeight will +/// result in the AspectRatio having an unbounded width and intrinsic height. +/// That makes the AspectRatio size the widget with respect to the height +/// (essentially stretch the width out to match the height) +class Square extends StatelessWidget { + final Widget child; + final void Function()? onTap; + + const Square({ + Key? key, + required this.child, + this.onTap, + }) : super(key: key); + + @override + Widget build(BuildContext context) => InkWell( + onTap: onTap, + child: UnconstrainedBox( + child: IntrinsicHeight( + child: AspectRatio( + aspectRatio: 1, + child: child, + ), + ), + ), + ); +} diff --git a/lib/components/kanji/kanji_result_body.dart b/lib/components/kanji/kanji_result_body.dart index 4f8fd9e..fabbbcb 100644 --- a/lib/components/kanji/kanji_result_body.dart +++ b/lib/components/kanji/kanji_result_body.dart @@ -39,11 +39,9 @@ class KanjiResultBody extends StatelessWidget { ), Flexible( fit: FlexFit.tight, - child: Center( - child: (resultData.radical != null) - ? Radical(radical: resultData.radical!) - : const SizedBox(), - ), + child: (resultData.radical != null) + ? Center(child: Radical(radical: resultData.radical!)) + : const SizedBox(), ), ], ), diff --git a/lib/components/kanji/kanji_result_body/header.dart b/lib/components/kanji/kanji_result_body/header.dart index 461454a..f677cc2 100644 --- a/lib/components/kanji/kanji_result_body/header.dart +++ b/lib/components/kanji/kanji_result_body/header.dart @@ -19,15 +19,16 @@ class Header extends StatelessWidget { final colors = state.theme.kanjiResultColor; return Container( - alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), color: colors.background, ), - child: Text( - kanji, - style: TextStyle(fontSize: 70.0, color: colors.foreground) - .merge(japaneseFont.textStyle), + child: FittedBox( + child: Text( + kanji, + style: TextStyle(color: colors.foreground) + .merge(japaneseFont.textStyle), + ), ), ); }, diff --git a/lib/components/kanji/kanji_result_body/radical.dart b/lib/components/kanji/kanji_result_body/radical.dart index 6184b1d..a6c1070 100644 --- a/lib/components/kanji/kanji_result_body/radical.dart +++ b/lib/components/kanji/kanji_result_body/radical.dart @@ -19,21 +19,37 @@ class Radical extends StatelessWidget { final colors = state.theme.kanjiResultColor; return InkWell( - onTap: () => Navigator.pushNamed(context, Routes.kanjiSearchRadicals, arguments: radical.symbol), - child: Container( - padding: const EdgeInsets.all(15.0), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: colors.background, - ), - child: Text( - radical.symbol, - style: TextStyle( - color: colors.foreground, - fontSize: 40.0, - ).merge(japaneseFont.textStyle), - ), + onTap: () => Navigator.pushNamed( + context, + Routes.kanjiSearchRadicals, + arguments: radical.symbol, ), + child: + Expanded( + child: Row( + children: [ + const Expanded(child: SizedBox()), + Expanded( + flex: 2, + child: Container( + padding: const EdgeInsets.all(20.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colors.background, + ), + child: FittedBox( + child: Text( + radical.symbol, + style: TextStyle(color: colors.foreground) + .merge(japaneseFont.textStyle), + ), + ), + ), + ), + const Expanded(child: SizedBox()), + ], + ), + ), ); }, ); diff --git a/lib/components/search/search_results_body/parts/kanji.dart b/lib/components/search/search_results_body/parts/kanji.dart index 9ebab9d..32d4110 100644 --- a/lib/components/search/search_results_body/parts/kanji.dart +++ b/lib/components/search/search_results_body/parts/kanji.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import '../../../../bloc/theme/theme_bloc.dart'; import '../../../../routing/routes.dart'; import '../../../../settings.dart'; +import '../../../common/square.dart'; class KanjiRow extends StatelessWidget { final List kanji; @@ -13,33 +14,33 @@ class KanjiRow extends StatelessWidget { this.fontSize = 20, }) : super(key: key); - Widget _kanjiBox(String kanji) => UnconstrainedBox( - child: IntrinsicHeight( - child: AspectRatio( - aspectRatio: 1, - child: BlocBuilder( - builder: (context, state) { - final colors = state.theme.menuGreyLight; - return Container( - padding: const EdgeInsets.all(10), - alignment: Alignment.center, - decoration: BoxDecoration( - color: colors.background, - borderRadius: BorderRadius.circular(10), - ), - child: FittedBox( - child: Text( - kanji, - style: TextStyle( - color: colors.foreground, - fontSize: fontSize, - ).merge(japaneseFont.textStyle), - ), - ), - ); - }, - ), - ), + Widget _kanjiBox(BuildContext context, String kanji) => Square( + onTap: () => Navigator.pushNamed( + context, + Routes.kanjiSearch, + arguments: kanji, + ), + child: BlocBuilder( + builder: (context, state) { + final colors = state.theme.menuGreyLight; + return Container( + padding: const EdgeInsets.all(10), + alignment: Alignment.center, + decoration: BoxDecoration( + color: colors.background, + borderRadius: BorderRadius.circular(10), + ), + child: FittedBox( + child: Text( + kanji, + style: TextStyle( + color: colors.foreground, + fontSize: fontSize, + ).merge(japaneseFont.textStyle), + ), + ), + ); + }, ), ); @@ -57,15 +58,7 @@ class KanjiRow extends StatelessWidget { spacing: 10, runSpacing: 10, children: [ - for (final k in kanji) - InkWell( - onTap: () => Navigator.pushNamed( - context, - Routes.kanjiSearch, - arguments: k, - ), - child: _kanjiBox(k), - ) + for (final k in kanji) _kanjiBox(context, k), ], ), ], diff --git a/lib/components/search/search_results_body/parts/kanji_kana_box.dart b/lib/components/search/search_results_body/parts/kanji_kana_box.dart index 448b81c..bf14cd7 100644 --- a/lib/components/search/search_results_body/parts/kanji_kana_box.dart +++ b/lib/components/search/search_results_body/parts/kanji_kana_box.dart @@ -76,6 +76,10 @@ class KanjiKanaBox extends StatelessWidget { style: TextStyle( color: Colors.transparent, fontSize: fFontsize, + ).merge( + romajiEnabled && autoTransliterateRomaji + ? null + : japaneseFont.textStyle, ), ), diff --git a/lib/data/grades.dart b/lib/data/grades.dart index 6f17031..20b98c6 100644 --- a/lib/data/grades.dart +++ b/lib/data/grades.dart @@ -456,7 +456,7 @@ const Map>> grades = { '矛', '丙', '払', '氾', '尼', '丼', '凸', '奴', '旦', '占', '仙', '斥', '尻', '召', '汁', - '囚', '𠮟', '込', '甲', '巧', + '囚', '叱', '込', '甲', '巧', '玄', '巨', '丘', '甘', '且', '瓦', '牙', '凹' ], diff --git a/lib/screens/info/about.dart b/lib/screens/info/about.dart index d13bda5..43d32b3 100644 --- a/lib/screens/info/about.dart +++ b/lib/screens/info/about.dart @@ -73,6 +73,7 @@ class AboutView extends StatelessWidget { borderRadius: BorderRadius.circular(15), ), child: IconButton( + color: Colors.white, iconSize: 50, onPressed: () => open_webpage( 'https://github.com/h7x4ABk3g/Jisho-Study-Tool', diff --git a/lib/screens/search/result_page.dart b/lib/screens/search/result_page.dart index f9cbc3c..3730907 100644 --- a/lib/screens/search/result_page.dart +++ b/lib/screens/search/result_page.dart @@ -27,7 +27,18 @@ class _ResultPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar(), + appBar: AppBar( + leadingWidth: 100, + leading: Row( + children: [ + const BackButton(), + CloseButton( + onPressed: () => + Navigator.popUntil(context, (route) => route.isFirst), + ), + ], + ), + ), body: FutureBuilder( future: widget.isKanji ? fetchKanji(widget.searchTerm) diff --git a/lib/screens/search/search_mechanisms/drawing.dart b/lib/screens/search/search_mechanisms/drawing.dart index 35ce101..8c03147 100644 --- a/lib/screens/search/search_mechanisms/drawing.dart +++ b/lib/screens/search/search_mechanisms/drawing.dart @@ -15,7 +15,7 @@ class KanjiDrawingSearch extends StatelessWidget { Expanded(child: Column()), DrawingBoard( onlyOneCharacterSuggestions: true, - onSuggestionChosen: (suggestion) => Navigator.popAndPushNamed( + onSuggestionChosen: (suggestion) => Navigator.pushNamed( context, Routes.kanjiSearch, arguments: suggestion, diff --git a/lib/screens/search/search_mechanisms/grade_list.dart b/lib/screens/search/search_mechanisms/grade_list.dart index 7edd6f1..67abd4f 100644 --- a/lib/screens/search/search_mechanisms/grade_list.dart +++ b/lib/screens/search/search_mechanisms/grade_list.dart @@ -5,6 +5,7 @@ import '../../../../data/grades.dart'; import '../../../../models/themes/theme.dart'; import '../../../../routing/routes.dart'; import '../../../components/common/loading.dart'; +import '../../../components/common/square.dart'; import '../../../settings.dart'; class KanjiGradeSearch extends StatefulWidget { @@ -30,26 +31,28 @@ class _GridItem extends StatelessWidget { ? () => ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(text)), ) - : () => Navigator.popAndPushNamed( + : () => Navigator.pushNamed( context, Routes.kanjiSearch, arguments: text, ); - return InkWell( + return Square( onTap: onTap, child: Container( + padding: const EdgeInsets.all(10), + alignment: Alignment.center, decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(5)), color: color.background, ), - alignment: Alignment.center, child: Text( text, - style: TextStyle( - color: color.foreground, - fontSize: 25, - ).merge(japaneseFont.textStyle), + style: Theme.of(context) + .textTheme + .headline5 + ?.merge(TextStyle(color: color.foreground)) + .merge(japaneseFont.textStyle), ), ), ); @@ -78,29 +81,27 @@ class _KanjiGradeSearchState extends State { Future get makeGrids async => SingleChildScrollView( child: Column( - children: (await Future.wait( + children: await Future.wait( grades.keys.map( (grade) async => ExpansionTile( title: Text(grade == 7 ? 'Junior Highschool' : 'Grade $grade'), maintainState: true, children: [ - GridView.count( - crossAxisCount: 6, - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - mainAxisSpacing: 10, - crossAxisSpacing: 10, + Padding( padding: const EdgeInsets.all(10), - children: (await gradeWidgets)[grade]! - .values - .expand((l) => l) - .toList(), - ) + child: Wrap( + runSpacing: 10, + spacing: 10, + children: (await gradeWidgets)[grade]! + .values + .expand((l) => l) + .toList(), + ), + ), ], ), ), - )) - .toList(), + ), ), );