Compare commits

...

5 Commits

9 changed files with 166 additions and 78 deletions

6
flake.lock generated
View File

@@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1762844143,
"narHash": "sha256-SlybxLZ1/e4T2lb1czEtWVzDCVSTvk9WLwGhmxFmBxI=",
"lastModified": 1771369470,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4",
"rev": "0182a361324364ae3f436a63005877674cf45efb",
"type": "github"
},
"original": {

View File

@@ -23,13 +23,13 @@
abiVersions = [ "armeabi-v7a" "arm64-v8a" ];
cmakeVersions = [ "3.22.1" ];
includeNDK = true;
ndkVersions = [ "27.0.12077973" ];
ndkVersions = [ "28.2.13676358" ];
});
in f system pkgs androidPkgs);
in {
devShells = forAllSystems (_: pkgs: androidPkgs: {
default = let
flutter' = pkgs.flutter335;
flutter' = pkgs.flutter341;
jdk' = pkgs.jdk21;
in pkgs.mkShell {
packages = [

View File

@@ -5,6 +5,7 @@ import 'package:get_it/get_it.dart';
import 'package:mugiten/bloc/theme/theme_bloc.dart';
import 'package:mugiten/components/search/search_results_body/parts/circle_badge.dart';
import 'package:mugiten/models/history_entry.dart';
import 'package:mugiten/services/clipboard.dart';
import 'package:sqflite/sqlite_api.dart';
import '../../routing/routes.dart';
@@ -26,6 +27,7 @@ class HistoryEntryTile extends StatelessWidget {
super.key,
});
/// Perform the search again when the entry is tapped.
void Function() _onTap(BuildContext context) => entry.isKanji
? () => Navigator.pushNamed(
context,
@@ -35,6 +37,11 @@ class HistoryEntryTile extends StatelessWidget {
: () =>
Navigator.pushNamed(context, Routes.search, arguments: entry.word);
/// Copy the kanji/searchword to the clipboard when the entry is long-pressed.
void Function() _onLongPress(BuildContext context) =>
() =>
copyToClipboard(context, entry.isKanji ? entry.kanji! : entry.word!);
MaterialPageRoute get timestamps => MaterialPageRoute(
builder: (context) => Scaffold(
appBar: AppBar(title: const Text('Last searched')),
@@ -77,6 +84,7 @@ class HistoryEntryTile extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 10),
child: ListTile(
onTap: _onTap(context),
onLongPress: _onLongPress(context),
contentPadding: EdgeInsets.zero,
title: Row(
children: [

View File

@@ -6,6 +6,7 @@ import 'package:mugiten/models/library_list.dart';
import 'package:sqflite/sqlite_api.dart';
import '../../routing/routes.dart';
import '../../services/clipboard.dart';
import '../../settings.dart';
import '../common/kanji_box.dart';
@@ -75,6 +76,7 @@ class LibraryListEntryTile extends StatelessWidget {
);
onUpdate?.call();
},
onLongPress: () => copyToClipboard(context, kanji),
title: Row(
children: [
SizedBox(width: 15),

View File

@@ -50,9 +50,9 @@ class ColorSet {
MaterialColor createMaterialColor(Color color) {
final List<double> strengths = [.05];
final swatch = <int, Color>{};
final int r = color.red;
final int g = color.green;
final int b = color.blue;
final int r = (color.r * 255.0).round().clamp(0, 255);
final int g = (color.g * 255.0).round().clamp(0, 255);
final int b = (color.b * 255.0).round().clamp(0, 255);
for (int i = 1; i < 10; i++) {
strengths.add(0.1 * i);
@@ -67,5 +67,5 @@ MaterialColor createMaterialColor(Color color) {
1,
);
}
return MaterialColor(color.value, swatch);
return MaterialColor(color.toARGB32(), swatch);
}

View File

@@ -0,0 +1,23 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void copyToClipboard(BuildContext context, String? clipboardContent) {
if (clipboardContent == null) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('No text to copy'),
duration: Duration(milliseconds: 500),
),
);
return;
}
Clipboard.setData(ClipboardData(text: clipboardContent));
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Copied \'$clipboardContent\''),
duration: const Duration(milliseconds: 500),
),
);
}

View File

@@ -21,10 +21,10 @@ packages:
dependency: "direct main"
description:
name: archive
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff
url: "https://pub.dev"
source: hosted
version: "4.0.7"
version: "4.0.9"
args:
dependency: transitive
description:
@@ -45,10 +45,10 @@ packages:
dependency: transitive
description:
name: bloc
sha256: a2cebb899f91d36eeeaa55c7b20b5915db5a9df1b8fd4a3c9c825e22e474537d
sha256: a48653a82055a900b88cd35f92429f068c5a8057ae9b136d197b3d56c57efb81
url: "https://pub.dev"
source: hosted
version: "9.1.0"
version: "9.2.0"
boolean_selector:
dependency: transitive
description:
@@ -61,10 +61,10 @@ packages:
dependency: transitive
description:
name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.dev"
source: hosted
version: "1.4.0"
version: "1.4.1"
checked_yaml:
dependency: transitive
description:
@@ -89,6 +89,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.2"
code_assets:
dependency: transitive
description:
name: code_assets
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
collection:
dependency: "direct main"
description:
@@ -101,10 +109,10 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937"
url: "https://pub.dev"
source: hosted
version: "0.3.5+1"
version: "0.3.5+2"
crypto:
dependency: transitive
description:
@@ -141,10 +149,10 @@ packages:
dependency: transitive
description:
name: dbus
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270
url: "https://pub.dev"
source: hosted
version: "0.7.11"
version: "0.7.12"
division:
dependency: "direct main"
description:
@@ -157,10 +165,10 @@ packages:
dependency: transitive
description:
name: equatable
sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7"
sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b"
url: "https://pub.dev"
source: hosted
version: "2.0.7"
version: "2.0.8"
fake_async:
dependency: transitive
description:
@@ -173,10 +181,10 @@ packages:
dependency: transitive
description:
name: ffi
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.2.0"
file:
dependency: transitive
description:
@@ -189,10 +197,10 @@ packages:
dependency: "direct main"
description:
name: file_picker
sha256: d974b6ba2606371ac71dd94254beefb6fa81185bde0b59bdc1df09885da85fde
sha256: "57d9a1dd5063f85fa3107fb42d1faffda52fdc948cefd5fe5ea85267a5fc7343"
url: "https://pub.dev"
source: hosted
version: "10.3.8"
version: "10.3.10"
fixnum:
dependency: transitive
description:
@@ -242,10 +250,10 @@ packages:
dependency: "direct main"
description:
name: flutter_markdown_plus
sha256: "7f349c075157816da399216a4127096108fd08e1ac931e34e72899281db4113c"
sha256: "039177906850278e8fb1cd364115ee0a46281135932fa8ecea8455522166d2de"
url: "https://pub.dev"
source: hosted
version: "1.0.5"
version: "1.0.7"
flutter_native_splash:
dependency: "direct dev"
description:
@@ -308,26 +316,42 @@ packages:
dependency: "direct main"
description:
name: get_it
sha256: "1d648d2dd2047d7f7450d5727ca24ee435f240385753d90b49650e3cdff32e56"
sha256: "568d62f0e68666fb5d95519743b3c24a34c7f19d834b0658c46e26d778461f66"
url: "https://pub.dev"
source: hosted
version: "9.2.0"
version: "9.2.1"
glob:
dependency: transitive
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.dev"
source: hosted
version: "2.1.3"
google_mlkit_commons:
dependency: transitive
description:
name: google_mlkit_commons
sha256: "8f40fbac10685cad4715d11e6a0d86837d9ad7168684dfcad29610282a88e67a"
sha256: "3e69fea4211727732cc385104e675ad1e40b29f12edd492ee52fa108423a6124"
url: "https://pub.dev"
source: hosted
version: "0.11.0"
version: "0.11.1"
google_mlkit_digital_ink_recognition:
dependency: "direct main"
description:
name: google_mlkit_digital_ink_recognition
sha256: "8d2b89401bdeeba97158377167429dbc5cb339ebbd21e0889dca773f1c79a884"
sha256: e841430c7c18e2d82d109914342bccf56084db080b1a997b66b6dac01200ee13
url: "https://pub.dev"
source: hosted
version: "0.14.1"
version: "0.14.2"
hooks:
dependency: transitive
description:
name: hooks
sha256: "7a08a0d684cb3b8fb604b78455d5d352f502b68079f7b80b831c62220ab0a4f6"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
html:
dependency: transitive
description:
@@ -356,10 +380,10 @@ packages:
dependency: transitive
description:
name: image
sha256: "51555e36056541237b15b57afc31a0f53d4f9aefd9bd00873a6dc0090e54e332"
sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce
url: "https://pub.dev"
source: hosted
version: "4.6.0"
version: "4.8.0"
infinite_scroll_pagination:
dependency: "direct main"
description:
@@ -373,7 +397,7 @@ packages:
description:
path: "."
ref: HEAD
resolved-ref: ac0cb14bbe48ff466ed4064ffe65886cb8b8d6e0
resolved-ref: "33016ca7510bafc0f0adaea4932bc38ffff7a853"
url: "https://git.pvv.ntnu.no/oysteikt/jadb.git"
source: git
version: "1.0.0"
@@ -381,18 +405,18 @@ packages:
dependency: transitive
description:
name: json_annotation
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
url: "https://pub.dev"
source: hosted
version: "4.9.0"
version: "4.11.0"
l10n_languages:
dependency: transitive
description:
name: l10n_languages
sha256: "808f25db80df1697f9e8f05cdc9f2dad11a21ea6473f14f7bb65bef7082b27d3"
sha256: "16b0026dc7261a712d3176595e7622138dace92e9cf1efc00989ef45b47725dd"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
version: "2.0.2"
leak_tracker:
dependency: transitive
description:
@@ -421,10 +445,18 @@ packages:
dependency: transitive
description:
name: lints
sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0
sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df"
url: "https://pub.dev"
source: hosted
version: "6.0.0"
version: "6.1.0"
logging:
dependency: transitive
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
version: "1.3.0"
markdown:
dependency: "direct main"
description:
@@ -437,18 +469,18 @@ packages:
dependency: transitive
description:
name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
url: "https://pub.dev"
source: hosted
version: "0.12.17"
version: "0.12.18"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.dev"
source: hosted
version: "0.11.1"
version: "0.13.0"
mdi:
dependency: "direct main"
description:
@@ -461,10 +493,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.17.0"
mime:
dependency: transitive
description:
@@ -473,6 +505,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.0"
native_toolchain_c:
dependency: transitive
description:
name: native_toolchain_c
sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac"
url: "https://pub.dev"
source: hosted
version: "0.17.4"
nested:
dependency: transitive
description:
@@ -481,6 +521,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.0"
objective_c:
dependency: transitive
description:
name: objective_c
sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
url: "https://pub.dev"
source: hosted
version: "9.3.0"
package_info_plus:
dependency: "direct main"
description:
@@ -533,10 +581,10 @@ packages:
dependency: transitive
description:
name: path_provider_foundation
sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4"
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
url: "https://pub.dev"
source: hosted
version: "2.5.1"
version: "2.6.0"
path_provider_linux:
dependency: transitive
description:
@@ -565,10 +613,10 @@ packages:
dependency: transitive
description:
name: petitparser
sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
url: "https://pub.dev"
source: hosted
version: "7.0.1"
version: "7.0.2"
platform:
dependency: transitive
description:
@@ -601,6 +649,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.1.5+1"
pub_semver:
dependency: transitive
description:
name: pub_semver
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
ruby_text:
dependency: "direct main"
description:
@@ -613,10 +669,10 @@ packages:
dependency: "direct main"
description:
name: sealed_languages
sha256: "488a2bc6ccf01bbc0182b8c3203af9cc1a85dc1c6aa3d39792539643d11d199c"
sha256: bf7a479389196ae29a074a8451734a71d11282f5380bd72e07d339047b011a29
url: "https://pub.dev"
source: hosted
version: "2.5.0"
version: "3.0.1"
share_plus:
dependency: "direct main"
description:
@@ -645,10 +701,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
sha256: "83af5c682796c0f7719c2bbf74792d113e40ae97981b8f266fa84574573556bc"
sha256: cbc40be9be1c5af4dab4d6e0de4d5d3729e6f3d65b89d21e1815d57705644a6f
url: "https://pub.dev"
source: hosted
version: "2.4.18"
version: "2.4.20"
shared_preferences_foundation:
dependency: transitive
description:
@@ -714,10 +770,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
url: "https://pub.dev"
source: hosted
version: "1.10.1"
version: "1.10.2"
sqflite:
dependency: "direct main"
description:
@@ -746,10 +802,10 @@ packages:
dependency: "direct main"
description:
name: sqflite_common_ffi
sha256: "9faa2fedc5385ef238ce772589f7718c24cdddd27419b609bb9c6f703ea27988"
sha256: "8d7b8749a516cbf6e9057f9b480b716ad14fc4f3d3873ca6938919cc626d9025"
url: "https://pub.dev"
source: hosted
version: "2.3.6"
version: "2.3.7+1"
sqflite_darwin:
dependency: transitive
description:
@@ -778,10 +834,10 @@ packages:
dependency: "direct main"
description:
name: sqlite3_flutter_libs
sha256: "1e800ebe7f85a80a66adacaa6febe4d5f4d8b75f244e9838a27cb2ffc7aec08d"
sha256: "3ed7553eee7bb368f8950f58ba29f634e06e813c029aff6a0d60862b96de8454"
url: "https://pub.dev"
source: hosted
version: "0.5.41"
version: "0.6.0+eol"
stack_trace:
dependency: transitive
description:
@@ -826,10 +882,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636"
url: "https://pub.dev"
source: hosted
version: "0.7.6"
version: "0.7.9"
tuple:
dependency: transitive
description:
@@ -874,10 +930,10 @@ packages:
dependency: transitive
description:
name: url_launcher_ios
sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad
sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
url: "https://pub.dev"
source: hosted
version: "6.3.6"
version: "6.4.1"
url_launcher_linux:
dependency: transitive
description:
@@ -906,10 +962,10 @@ packages:
dependency: transitive
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.4.2"
url_launcher_windows:
dependency: transitive
description:
@@ -946,10 +1002,10 @@ packages:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc
sha256: "5a88dd14c0954a5398af544651c7fb51b457a2a556949bfb25369b210ef73a74"
url: "https://pub.dev"
source: hosted
version: "1.1.19"
version: "1.2.0"
vector_math:
dependency: transitive
description:
@@ -1007,5 +1063,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.9.2 <4.0.0"
flutter: ">=3.35.0"
dart: ">=3.10.8 <4.0.0"
flutter: ">=3.38.4"

View File

@@ -31,7 +31,7 @@ dependencies:
signature: ^6.3.0
url_launcher: ^6.3.1
sqflite: ^2.4.1
sqlite3_flutter_libs: ^0.5.32
sqlite3_flutter_libs: ^0.6.0+eol
sqflite_common_ffi: ^2.3.4+4
ruby_text: ^3.0.3
google_mlkit_digital_ink_recognition: ^0.14.1
@@ -39,7 +39,7 @@ dependencies:
package_info_plus: ^9.0.0
flutter_markdown_plus: ^1.0.3
markdown: ^7.3.0
sealed_languages: ^2.1.0
sealed_languages: ^3.0.0
infinite_scroll_pagination: ^5.1.0
dev_dependencies:

View File

@@ -7,7 +7,6 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:get_it/get_it.dart';
import 'package:mugiten/database/database.dart';
import 'package:mugiten/models/library_list.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:sqlite3/open.dart';
@@ -21,11 +20,11 @@ Future<Database> createDatabaseCopy({
}
// Make a copy of jadbPath
final random_suffix = Random()
final randomSuffix = Random()
.nextInt((pow(2, 32) - 1) as int)
.toRadixString(16);
final jadbCopyPath = jadbFile.parent.uri
.resolve('jadb_copy_$random_suffix.sqlite')
.resolve('jadb_copy_$randomSuffix.sqlite')
.path;
await jadbFile.copy(jadbCopyPath);
@@ -34,7 +33,7 @@ Future<Database> createDatabaseCopy({
// Initialize FFI
sqfliteFfiInit();
databaseFactory = await createDatabaseFactoryFfi(
databaseFactory = createDatabaseFactoryFfi(
ffiInit: () =>
open.overrideForAll(() => DynamicLibrary.open(libsqlitePath)),
);