From e66e33b9ed390bbfbe316902d39af61a34998e03 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 17 Jan 2022 14:43:10 +0100 Subject: [PATCH] Add grade based search --- lib/data/grades.dart | 631 ++++++++++++++++++ lib/router.dart | 4 + .../kanji_search_options_bar.dart | 26 +- .../search/search_mechanisms/grade_list.dart | 110 +++ 4 files changed, 759 insertions(+), 12 deletions(-) create mode 100644 lib/data/grades.dart diff --git a/lib/data/grades.dart b/lib/data/grades.dart new file mode 100644 index 0000000..6f17031 --- /dev/null +++ b/lib/data/grades.dart @@ -0,0 +1,631 @@ +/// Jouyou kanji sorted primarily by grades and secondarliy by strokes. +const Map>> grades = { + 1: { + 1: [ '一' ], + 2: [ + '力', '八', '入', + '二', '人', '十', + '七', '九' + ], + 3: [ + '土', '大', '川', + '千', '夕', '上', + '小', '女', '子', + '山', '三', '口', + '下' + ], + 4: [ + '六', '木', '文', + '日', '天', '中', + '水', '手', '五', + '犬', '月', '火', + '王', '円' + ], + 5: [ + '立', '目', '本', + '白', '田', '石', + '生', '正', '出', + '四', '左', '玉', + '右' + ], + 6: [ + '名', '百', '年', + '虫', '竹', '早', + '先', '耳', '字', + '糸', '休', '気' + ], + 7: [ + '町', '男', '村', + '足', '赤', '車', + '見', '貝', '花' + ], + 8: [ '林', '青', '空', '金', '学', '雨' ], + 9: [ '草', '音' ], + 10: [ '校' ], + 12: [ '森' ] + }, + 2: { + 2: [ '刀' ], + 3: [ '万', '才', '工', '弓', '丸' ], + 4: [ + '友', '毛', '方', '分', + '父', '内', '太', '切', + '心', '少', '止', '今', + '公', '午', '戸', '元', + '牛', '引' + ], + 5: [ + '用', '北', '母', + '半', '冬', '台', + '矢', '市', '広', + '古', '兄', '外' + ], + 6: [ + '毎', '米', '肉', '同', + '当', '池', '地', '多', + '西', '色', '自', '寺', + '合', '行', '考', '光', + '交', '会', '回', '羽' + ], + 7: [ + '里', '来', '麦', '売', + '弟', '体', '走', '声', + '図', '社', '作', '谷', + '言', '形', '近', '汽', + '角', '何' + ], + 8: [ + '夜', '門', '明', '妹', + '歩', '東', '店', '直', + '長', '知', '姉', '国', + '京', '岩', '画' + ], + 9: [ + '風', '南', '点', '昼', + '茶', '前', '星', '食', + '春', '秋', '首', '室', + '思', '後', '計', '活', + '海', '科' + ], + 10: [ + '馬', '通', '書', + '弱', '時', '紙', + '高', '原', '帰', + '記', '家', '夏' + ], + 11: [ + '理', '野', '鳥', + '組', '船', '雪', + '週', '細', '黒', + '黄', '教', '強', + '魚' + ], + 12: [ + '番', '買', '道', + '答', '朝', '晴', + '場', '間', '絵', + '雲' + ], + 13: [ + '話', '電', + '数', '新', + '楽', '遠', + '園' + ], + 14: [ '鳴', '聞', '読', '算', '語', '歌' ], + 15: [ '線' ], + 16: [ '頭', '親' ], + 18: [ '曜', '顔' ] + }, + 3: { + 2: [ '丁' ], + 4: [ '予', '反', '区', '化' ], + 5: [ + '礼', '由', '平', '氷', + '皮', '代', '打', '他', + '世', '申', '主', '写', + '仕', '皿', '号', '去', + '央' + ], + 6: [ + '列', '両', '羊', + '有', '全', '州', + '守', '式', '次', + '死', '向', '血', + '曲', '安' + ], + 7: [ + '役', '返', '坂', + '豆', '投', '対', + '身', '助', '住', + '決', '君', '局', + '究', '医' + ], + 8: [ + '和', '油', '命', '味', '放', + '物', '服', '表', '板', '波', + '定', '注', '昔', '所', '受', + '取', '者', '実', '事', '始', + '使', '幸', '具', '苦', '岸', + '泳', '育', '委' + ], + 9: [ + '洋', '面', '負', '品', '秒', + '美', '発', '畑', '度', '追', + '柱', '炭', '待', '送', '相', + '神', '乗', '昭', '重', '拾', + '持', '指', '県', '研', '係', + '級', '急', '客', '界', '屋' + ], + 10: [ + '旅', '流', '勉', '病', + '倍', '配', '島', '庭', + '速', '息', '真', '消', + '酒', '根', '庫', '宮', + '起', '荷', '院', '員' + ], + 11: [ + '問', '部', '動', '都', + '転', '笛', '帳', '第', + '族', '進', '深', '章', + '商', '宿', '習', '終', + '祭', '球', '悪' + ], + 12: [ + '落', '陽', '葉', '遊', '筆', + '悲', '童', '等', '登', '湯', + '着', '短', '植', '勝', '暑', + '集', '歯', '港', '湖', '軽', + '期', '寒', '階', '開', '温', + '運', '飲' + ], + 13: [ + '路', '福', '農', + '鉄', '想', '詩', + '業', '漢', '感', + '意', '暗' + ], + 14: [ '練', '緑', '様', '鼻', '銀', '駅' ], + 15: [ '箱', '調', '談', '横' ], + 16: [ '薬', '整', '橋', '館' ], + 18: [ '題' ] + }, + 4: { + 4: [ '夫', '不', '井', '氏', '欠' ], + 5: [ + '令', '民', '未', + '末', '包', '辺', + '付', '必', '失', + '司', '札', '功', + '加', '以' + ], + 6: [ + '老', '灯', '伝', + '兆', '仲', '争', + '成', '好', '共', + '各', '印', '衣' + ], + 7: [ + '労', '冷', '良', '利', + '別', '兵', '阪', '努', + '低', '沖', '束', '折', + '臣', '初', '児', '材', + '佐', '芸', '求', '希', + '岐', '完', '改', '位' + ], + 8: [ + '例', '牧', '法', '阜', '府', + '念', '奈', '典', '的', '底', + '卒', '松', '周', '治', '参', + '刷', '固', '径', '協', '泣', + '季', '官', '芽', '果', '岡', + '英' + ], + 9: [ + '要', '勇', '約', '便', + '変', '飛', '栃', '単', + '浅', '省', '信', '城', + '祝', '昨', '香', '建', + '軍', '栄', '茨' + ], + 10: [ + '連', '料', '浴', '梅', + '特', '徒', '帯', '孫', + '倉', '席', '笑', '借', + '残', '差', '候', '郡', + '訓', '挙', '害', '案' + ], + 11: [ + '陸', '望', '副', '票', + '敗', '梨', '側', '巣', + '清', '唱', '鹿', '産', + '崎', '埼', '菜', '康', + '健', '械', '貨' + ], + 12: [ + '量', '無', '満', '富', + '飯', '博', '達', '隊', + '然', '焼', '順', '滋', + '散', '最', '結', '景', + '極', '給', '覚', '街', + '賀', '媛' + ], + 13: [ + '働', '置', '続', + '戦', '節', '照', + '辞', '試', '群', + '塩', '愛' + ], + 14: [ + '徳', '説', '静', + '種', '察', '熊', + '漁', '旗', '関', + '管' + ], + 15: [ + '輪', '養', '標', + '熱', '選', '縄', + '器', '潟', '課', + '億' + ], + 16: [ '録', '積', '機' ], + 18: [ '類', '験', '観' ], + 19: [ '鏡', '願' ], + 20: [ '競', '議' ] + }, + 5: { + 3: [ '士', '久' ], + 4: [ '仏', '比', '支' ], + 5: [ + '弁', '布', '犯', + '示', '史', '句', + '旧', '刊', '可', + '永', '圧' + ], + 6: [ + '任', '団', + '在', '再', + '件', '仮', + '因' + ], + 7: [ + '余', '防', '判', '状', + '条', '序', '似', '志', + '災', '告', '均', '技', + '快', '応', '囲' + ], + 8: [ + '武', '非', '肥', '版', + '毒', '性', '制', '招', + '述', '舎', '枝', '妻', + '効', '居', '河', '価', + '往', '易' + ], + 9: [ + '迷', '保', '独', + '則', '祖', '政', + '査', '厚', '故', + '限', '型', '逆', + '紀' + ], + 10: [ + '留', '容', '脈', '粉', + '破', '能', '造', '素', + '修', '師', '殺', '財', + '航', '耕', '個', '格', + '桜', '益' + ], + 11: [ + '略', '務', '婦', '貧', '得', + '堂', '停', '張', '断', '率', + '設', '接', '責', '情', '常', + '術', '授', '採', '混', '現', + '険', '経', '許', '救', '規', + '寄', '基', '眼', '液', '移' + ], + 12: [ + '貿', '報', '復', '評', + '備', '費', '統', '程', + '提', '貯', '貸', '属', + '測', '絶', '税', '象', + '証', '減', '検', '喜', + '過', '営' + ], + 13: [ + '夢', '豊', '墓', + '損', '勢', '準', + '飼', '資', '罪', + '鉱', '禁', '義', + '幹', '解' + ], + 14: [ + '歴', '領', '綿', '複', + '銅', '適', '態', '増', + '像', '総', '製', '精', + '酸', '雑', '際', '構', + '境', '慣', '演' + ], + 15: [ + '暴', '編', '導', + '賞', '質', '賛', + '潔', '確' + ], + 16: [ '輸', '燃', '築', '興', '衛' ], + 17: [ '績', '謝', '講' ], + 18: [ '職', '織', '額' ], + 19: [ '識' ], + 20: [ '護' ] + }, + 6: { + 3: [ '亡', '寸', '己', '干' ], + 4: [ '片', '仁', '収', '尺' ], + 5: [ '幼', '庁', '処', '冊', '穴' ], + 6: [ + '宅', '存', '舌', + '至', '后', '吸', + '机', '危', '灰', + '宇' + ], + 7: [ + '卵', '乱', '忘', + '批', '否', '私', + '困', '孝', '系', + '我' + ], + 8: [ + '枚', '宝', '並', '拝', + '乳', '届', '忠', '宙', + '担', '垂', '承', '宗', + '若', '刻', '呼', '券', + '供', '拡', '沿', '延' + ], + 9: [ + '律', '肺', '背', '派', + '段', '退', '奏', '染', + '洗', '泉', '専', '宣', + '姿', '砂', '紅', '皇', + '看', '巻', '革', '映', + '胃' + ], + 10: [ + '朗', '陛', '俵', '秘', + '班', '俳', '納', '党', + '討', '展', '値', '針', + '将', '除', '純', '従', + '射', '蚕', '座', '骨', + '降', '胸', '株', '恩' + ], + 11: [ + '翌', '欲', '郵', '訳', + '密', '訪', '閉', '脳', + '頂', '著', '探', '窓', + '盛', '推', '捨', '視', + '済', '郷', '域', '異' + ], + 12: [ + '棒', '補', '晩', '痛', + '尊', '装', '創', '善', + '衆', '就', '詞', '策', + '裁', '敬', '筋', '勤', + '貴', '揮', '割' + ], + 13: [ + '裏', '預', '盟', '幕', + '腹', '賃', '腸', '暖', + '誠', '聖', '蒸', '傷', + '署', '源', '絹' + ], + 14: [ + '模', '暮', '認', + '層', '銭', '障', + '磁', '誌', '穀', + '誤', '疑', '閣' + ], + 15: [ + '論', '敵', '潮', + '誕', '蔵', '諸', + '熟', '権', '劇', + '遺' + ], + 16: [ + '奮', '糖', '操', + '縦', '樹', '鋼', + '憲', '激' + ], + 17: [ '覧', '優', '縮', '厳' ], + 18: [ '臨', '難', '簡' ], + 19: [ '臓', '警' ] + }, + 7: { + 1: [ '乙' ], + 2: [ '了', '又' ], + 3: [ + '与', '凡', + '刃', '丈', + '乞', '巾', + '及' + ], + 4: [ + '厄', '乏', '匹', '匂', + '屯', '斗', '爪', '弔', + '丹', '双', '冗', '升', + '孔', '勾', '互', '幻', + '斤', '凶', '刈', '介' + ], + 5: [ + '矛', '丙', '払', '氾', '尼', + '丼', '凸', '奴', '旦', '占', + '仙', '斥', '尻', '召', '汁', + '囚', '𠮟', '込', '甲', '巧', + '玄', '巨', '丘', '甘', '且', + '瓦', '牙', '凹' + ], + 6: [ + '劣', '吏', '妄', '朴', '忙', '伏', + '妃', '汎', '帆', '伐', '肌', '弐', + '吐', '壮', '迅', '尽', '匠', '如', + '巡', '旬', '充', '舟', '朱', '芝', + '旨', '江', '刑', '仰', '叫', '臼', + '朽', '吉', '伎', '企', '缶', '汗', + '汚', '芋', '扱' + ], + 7: [ + '弄', '呂', '戻', '励', '沃', '抑', '妖', + '冶', '妙', '没', '妨', '坊', '邦', '芳', + '扶', '肘', '尾', '伴', '抜', '伯', '把', + '忍', '妊', '尿', '那', '廷', '呈', '沈', + '但', '沢', '択', '妥', '汰', '即', '杉', + '吹', '辛', '芯', '伸', '肖', '抄', '床', + '秀', '寿', '伺', '沙', '克', '更', '攻', + '抗', '坑', '呉', '迎', '串', '吟', '狂', + '却', '忌', '含', '肝', '戒', '壱', '亜' + ], + 8: [ + '枠', '炉', '拉', '弥', '盲', '茂', '免', '岬', '抹', + '枕', '奔', '肪', '房', '泡', '抱', '奉', '併', '沸', + '侮', '附', '怖', '苗', '泌', '披', '彼', '迫', '泊', + '拍', '杯', '突', '到', '妬', '迭', '泥', '邸', '抵', + '坪', '抽', '拓', '卓', '阻', '狙', '拙', '析', '斉', + '征', '姓', '枢', '炊', '沼', '昇', '尚', '叔', '呪', + '邪', '侍', '肢', '祉', '刺', '刹', '采', '昆', '肯', + '拘', '虎', '股', '弦', '肩', '茎', '屈', '況', '享', + '拠', '拒', '宜', '祈', '奇', '玩', '岳', '劾', '拐', + '怪', '苛', '佳', '殴', '欧', '旺', '押', '炎', '依', + '宛' + ], + 9: [ + '郎', '厘', '侶', '柳', '幽', '昧', '盆', '勃', '冒', + '某', '胞', '柄', '封', '赴', '訃', '眉', '卑', '虹', + '峠', '洞', '逃', '怒', '訂', '帝', '貞', '亭', '珍', + '勅', '挑', '胆', '胎', '怠', '耐', '俗', '促', '荘', + '窃', '牲', '是', '帥', '甚', '津', '侵', '拭', '浄', + '叙', '盾', '俊', '柔', '臭', '狩', '施', '拶', '咲', + '柵', '削', '砕', '恨', '拷', '郊', '荒', '洪', '恒', + '侯', '枯', '弧', '孤', '契', '狭', '挟', '峡', '糾', + '虐', '軌', '冠', '括', '柿', '垣', '皆', '悔', '架', + '卸', '怨', '疫', '姻', '咽', '畏', '為', '威', '哀' + ], + 10: [ + '脇', '浪', '恋', '烈', '涙', '倫', '竜', '紋', '耗', '冥', + '娘', '眠', '埋', '紡', '剖', '砲', '峰', '倣', '俸', '捕', + '哺', '紛', '浮', '敏', '浜', '姫', '被', '疲', '般', '畔', + '剝', '悩', '匿', '胴', '透', '桃', '唐', '凍', '倒', '途', + '哲', '逓', '朕', '捗', '酎', '衷', '秩', '逐', '畜', '致', + '恥', '託', '泰', '捉', '桑', '挿', '捜', '租', '栓', '扇', + '隻', '脊', '逝', '凄', '衰', '粋', '陣', '浸', '振', '娠', + '唇', '辱', '称', '祥', '症', '宵', '徐', '殉', '准', '袖', + '珠', '殊', '酌', '疾', '脂', '恣', '桟', '索', '剤', '栽', + '宰', '挫', '唆', '剛', '貢', '悟', '娯', '軒', '拳', '剣', + '兼', '倹', '桁', '恵', '脅', '恭', '恐', '鬼', '飢', '既', + '陥', '釜', '核', '蚊', '華', '俺', '翁', '宴', '悦', '浦', + '畝', '唄', '挨' + ], + 11: [ + '累', '陵', '猟', '涼', '隆', '粒', '庸', '悠', '唯', '猛', + '麻', '堀', '崩', '偏', '符', '瓶', '猫', '描', '販', '舶', + '陪', '培', '排', '婆', '粘', '捻', '軟', '貪', '豚', '陶', + '盗', '悼', '添', '偵', '陳', '釣', '眺', '彫', '窒', '淡', + '脱', '逮', '袋', '堆', '唾', '爽', '曽', '曹', '掃', '粗', + '措', '旋', '戚', '惜', '据', '崇', '酔', '紳', '剰', '訟', + '紹', '渉', '庶', '粛', '淑', '渋', '羞', '寂', '釈', '蛇', + '斜', '赦', '執', '斬', '惨', '斎', '彩', '紺', '痕', '婚', + '頃', '梗', '控', '舷', '蛍', '渓', '掲', '啓', '掘', '偶', + '惧', '菌', '虚', '脚', '菊', '偽', '亀', '貫', '患', '勘', + '乾', '葛', '渇', '喝', '掛', '郭', '殻', '涯', '崖', '菓', + '陰', '淫', '逸', '萎', '尉' + ], + 12: [ + '腕', '湾', '惑', '廊', '裂', '塁', '硫', '痢', '絡', '揺', + '揚', '雄', '裕', '猶', '湧', '愉', '喩', '帽', '傍', '募', + '遍', '塀', '雰', '幅', '普', '扉', '蛮', '斑', '媒', '廃', + '鈍', '筒', '痘', '棟', '搭', '塔', '渡', '堤', '塚', '椎', + '超', '貼', '遅', '弾', '棚', '替', '惰', '堕', '葬', '痩', + '喪', '訴', '疎', '婿', '随', '遂', '須', '尋', '診', '殖', + '畳', '詔', '粧', '硝', '焦', '晶', '掌', '循', '煮', '湿', + '軸', '紫', '傘', '酢', '詐', '項', '絞', '硬', '慌', '喉', + '雇', '堅', '圏', '隅', '遇', '僅', '琴', '暁', '御', '距', + '喫', '欺', '棋', '幾', '閑', '款', '棺', '敢', '換', '堪', + '喚', '渦', '奥', '援', '越', '詠', '椅', '偉', '嵐', '握' + ], + 13: [ + '賄', '楼', '賂', '廉', '零', '鈴', '虜', '慄', '酪', '雷', + '裸', '腰', '溶', '誉', '滅', '睦', '飽', '蜂', '微', '頒', + '煩', '搬', '鉢', '漠', '頓', '督', '塗', '殿', '塡', '溺', + '艇', '跳', '蓄', '稚', '痴', '嘆', '滝', '滞', '遜', '賊', + '僧', '遡', '塑', '禅', '践', '詮', '腺', '羨', '煎', '摂', + '跡', '裾', '睡', '腎', '慎', '寝', '触', '飾', '詳', '奨', + '酬', '愁', '腫', '嫉', '慈', '嗣', '搾', '載', '歳', '塞', + '催', '債', '傲', '溝', '碁', '鼓', '誇', '遣', '献', '嫌', + '傑', '隙', '詣', '継', '携', '傾', '窟', '愚', '嗅', '詰', + '毀', '棄', '頑', '寛', '勧', '褐', '滑', '隔', '較', '該', + '蓋', '慨', '楷', '塊', '雅', '靴', '禍', '暇', '嫁', '虞', + '鉛', '猿', '煙', '違', '彙' + ], + 14: [ + '漏', '暦', '瑠', '僚', '辣', '踊', '瘍', + '誘', '網', '銘', '蜜', '漫', '慢', '膜', + '墨', '僕', '貌', '慕', '蔑', '餅', '腐', + '漂', '碑', '閥', '罰', '髪', '寧', '稲', + '滴', '摘', '漬', '徴', '嫡', '綻', '端', + '奪', '駄', '憎', '遭', '漸', '箋', '誓', + '彰', '緒', '塾', '銃', '需', '遮', '漆', + '餌', '雌', '魂', '獄', '酷', '豪', '酵', + '綱', '駆', '概', '箇', '寡', '隠', '維' + ], + 15: [ + '霊', '寮', '慮', '璃', '履', '窯', '憂', '黙', '魅', + '摩', '撲', '褒', '舗', '蔽', '弊', '幣', '憤', '墳', + '噴', '舞', '賦', '膚', '敷', '賓', '膝', '罷', '盤', + '範', '箸', '賠', '輩', '罵', '踏', '賭', '撤', '徹', + '締', '墜', '澄', '嘲', '駐', '鋳', '誰', '諾', '踪', + '槽', '遷', '潜', '請', '穂', '震', '審', '嘱', '衝', + '憧', '遵', '潤', '趣', '賜', '摯', '暫', '撮', '駒', + '稿', '撃', '稽', '憬', '慶', '勲', '緊', '窮', '戯', + '儀', '輝', '畿', '緩', '監', '歓', '潰', '餓', '稼', + '縁', '閲', '謁', '鋭', '影', '慰' + ], + 16: [ + '錬', '隷', '隣', '頼', '謡', '擁', '融', + '諭', '麺', '磨', '頰', '謀', '膨', '縫', + '壁', '避', '繁', '縛', '薄', '濃', '謎', + '曇', '篤', '諦', '緻', '壇', '濁', '膳', + '薦', '醒', '薪', '錠', '嬢', '壌', '獣', + '儒', '諮', '錯', '墾', '衡', '錮', '賢', + '憩', '薫', '錦', '凝', '還', '憾', '獲', + '骸', '諧', '懐', '壊', '穏', '憶', '緯' + ], + 17: [ + '齢', '瞭', '療', '翼', '闇', + '頻', '鍋', '瞳', '謄', '聴', + '鍛', '濯', '戴', '霜', '燥', + '鮮', '繊', '礁', '償', '醜', + '爵', '擦', '懇', '購', '鍵', + '謙', '謹', '矯', '犠', '擬', + '環', '轄', '嚇', '臆', '曖' + ], + 18: [ + '糧', '藍', '濫', '癒', '翻', + '癖', '璧', '覆', '藩', '闘', + '藤', '鎮', '懲', '贈', '騒', + '礎', '繕', '瞬', '鎖', '顕', + '繭', '襟', '騎', '韓', '鎌', + '顎', '穫' + ], + 19: [ + '麓', '麗', '離', '羅', + '霧', '簿', '譜', '爆', + '覇', '藻', '瀬', '髄', + '蹴', '璽', '鯨', '鶏', + '繰', '艶', '韻' + ], + 20: [ + '欄', '騰', '籍', + '醸', '譲', '鐘', + '懸', '響' + ], + 21: [ '露', '躍', '魔', '鶴', '顧', '艦' ], + 22: [ '籠', '襲', '驚' ], + 23: [ '鑑' ], + 29: [ '鬱' ] + }, +}; diff --git a/lib/router.dart b/lib/router.dart index 552a011..0f923be 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'view/home.dart'; import 'view/screens/search/kanji_result_page.dart'; import 'view/screens/search/search_mechanisms/drawing.dart'; +import 'view/screens/search/search_mechanisms/grade_list.dart'; import 'view/screens/search/search_mechanisms/radical_list.dart'; import 'view/screens/search/search_results_page.dart'; @@ -28,6 +29,9 @@ Route generateRoute(RouteSettings settings) { case '/kanjiSearch/draw': return MaterialPageRoute(builder: (_) => const KanjiDrawingSearch()); + case '/kanjiSearch/grade': + return MaterialPageRoute(builder: (_) => const KanjiGradeSearch()); + case '/kanjiSearch/radicals': return MaterialPageRoute(builder: (_) => const KanjiRadicalSearch()); diff --git a/lib/view/components/kanji/kanji_search_body/kanji_search_options_bar.dart b/lib/view/components/kanji/kanji_search_body/kanji_search_options_bar.dart index 8f3cdb6..97e64ac 100644 --- a/lib/view/components/kanji/kanji_search_body/kanji_search_options_bar.dart +++ b/lib/view/components/kanji/kanji_search_body/kanji_search_options_bar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -//TODO: Make buttons have an effect +import '../../../../bloc/theme/theme_bloc.dart'; class KanjiSearchOptionsBar extends StatelessWidget { const KanjiSearchOptionsBar({Key? key}) : super(key: key); @@ -12,19 +12,16 @@ class KanjiSearchOptionsBar extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ _IconButton( - icon: const Text( - '部', - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 18, - ), - ), - onPressed: () => Navigator.pushNamed(context, '/kanjiSearch/radicals'), + icon: const Icon(Icons.pie_chart), + onPressed: () => + Navigator.pushNamed(context, '/kanjiSearch/radicals'), ), + const SizedBox(width: 10,), _IconButton( - icon: const Icon(Icons.category), - onPressed: () {}, + icon: const Icon(Icons.school), + onPressed: () => Navigator.pushNamed(context, '/kanjiSearch/grade'), ), + const SizedBox(width: 10,), _IconButton( icon: const Icon(Icons.mode), onPressed: () => Navigator.pushNamed(context, '/kanjiSearch/draw'), @@ -47,6 +44,11 @@ class _IconButton extends StatelessWidget { @override Widget build(BuildContext context) { - return IconButton(onPressed: onPressed, icon: icon); + return IconButton( + onPressed: onPressed, + icon: icon, + iconSize: 30, + color: BlocProvider.of(context).state.theme.menuGreyDark.background, + ); } } diff --git a/lib/view/screens/search/search_mechanisms/grade_list.dart b/lib/view/screens/search/search_mechanisms/grade_list.dart index e69de29..6486226 100644 --- a/lib/view/screens/search/search_mechanisms/grade_list.dart +++ b/lib/view/screens/search/search_mechanisms/grade_list.dart @@ -0,0 +1,110 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import '../../../../data/grades.dart'; +import '../../../../models/themes/theme.dart'; + +class KanjiGradeSearch extends StatefulWidget { + const KanjiGradeSearch({Key? key}) : super(key: key); + + @override + _KanjiGradeSearchState createState() => _KanjiGradeSearchState(); +} + +class _GridItem extends StatelessWidget { + final bool isNumber; + final String text; + const _GridItem({Key? key, required this.text, this.isNumber = false}) + : super(key: key); + + @override + Widget build(BuildContext context) { + final color = isNumber + ? LightTheme.defaultMenuGreyDark + : LightTheme.defaultMenuGreyNormal; + + final onTap = isNumber + ? () => ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(text)), + ) + : () => + Navigator.popAndPushNamed(context, '/kanjiSearch', arguments: text); + + return InkWell( + onTap: onTap, + child: Container( + 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, + ), + ), + ), + ); + } +} + +class _KanjiGradeSearchState extends State { + Future>>> get gradeWidgets async => compute< + Map>>, Map>>>( + (gs) => gs.map( + (grade, sortedByStrokes) => MapEntry( + grade, + sortedByStrokes.map>( + (strokeCount, kanji) => MapEntry( + strokeCount, + [_GridItem(text: strokeCount.toString(), isNumber: true)] + + kanji.map((k) => _GridItem(text: k)).toList(), + ), + ), + ), + ), + grades, + ); + + Future get makeGrids async => SingleChildScrollView( + child: Column( + 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: const EdgeInsets.all(10), + children: (await gradeWidgets)[grade]! + .values + .expand((l) => l) + .toList(), + ) + ], + ), + ), + )) + .toList(), + ), + ); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('Choose by grade')), + body: FutureBuilder( + future: makeGrids, + initialData: const Center(child: CircularProgressIndicator()), + builder: (context, snapshot) => snapshot.data!, + ), + ); + } +}