Skip to content

Commit 57f39c4

Browse files
committed
feat: add language selection for text recognition
- Support Chinese, Japanese, Korean, Devanagari Scripts - Add language dropdown selector in UI - Dynamic TextRecognizer instance management - Update dependencies for language packages
1 parent 0b918eb commit 57f39c4

File tree

3 files changed

+129
-22
lines changed

3 files changed

+129
-22
lines changed

android/app/build.gradle.kts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,14 @@ android {
3737
signingConfig = signingConfigs.getByName("debug")
3838
}
3939
}
40-
41-
dependencies {
42-
// ... dependensi yang sudah ada mungkin dari Flutter
4340

44-
// Tambahkan paket bahasa yang Anda perlukan di sini
45-
implementation("com.google.mlkit:text-recognition-chinese:16.0.0")
46-
implementation("com.google.mlkit:text-recognition-devanagari:16.0.0")
47-
implementation("com.google.mlkit:text-recognition-japanese:16.0.0")
48-
implementation("com.google.mlkit:text-recognition-korean:16.0.0")
49-
}
41+
dependencies {
42+
implementation("com.google.mlkit:text-recognition:16.0.1")
43+
implementation("com.google.mlkit:text-recognition-chinese:16.0.1")
44+
implementation("com.google.mlkit:text-recognition-devanagari:16.0.1")
45+
implementation("com.google.mlkit:text-recognition-japanese:16.0.1")
46+
implementation("com.google.mlkit:text-recognition-korean:16.0.1")
47+
}
5048
}
5149

5250
flutter {

lib/camera/camera_new.dart

Lines changed: 110 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,25 @@ class _CameraScreenState extends State<CameraScreen> {
1717
String _recognizedText = 'Tekan capture untuk scan teks';
1818
bool _isProcessing = false;
1919

20+
TextRecognitionScript _currentScript = TextRecognitionScript.latin;
21+
2022
@override
2123
void initState() {
2224
super.initState();
2325
_initializeCamera();
24-
_textRecognizer = TextRecognizer(script: TextRecognitionScript.latin);
26+
// _textRecognizer = TextRecognizer(script: TextRecognitionScript.latin);
27+
_textRecognizer = TextRecognizer(script: _currentScript);
28+
}
29+
30+
// Method untuk ganti bahasa
31+
void _changeLanguage(TextRecognitionScript newScript) {
32+
_textRecognizer.close();
33+
34+
// buat recognizer baru dengan bahasa yang ingin dipilih
35+
setState(() {
36+
_currentScript = newScript;
37+
_textRecognizer = TextRecognizer(script: _currentScript);
38+
});
2539
}
2640

2741
void _initializeCamera() async {
@@ -67,6 +81,58 @@ class _CameraScreenState extends State<CameraScreen> {
6781
}
6882
}
6983

84+
void _showLanguageSelection() { // Dialog Language Selection
85+
showDialog(
86+
context: context,
87+
builder: (BuildContext context) {
88+
return AlertDialog(
89+
title: Text('Pilih Bahasa'),
90+
content: SingleChildScrollView(
91+
child: Column(
92+
children: [
93+
ListTile(
94+
title: Text('English, Indonesia, dll'),
95+
onTap: () {
96+
Navigator.pop(context);
97+
_changeLanguage(TextRecognitionScript.latin);
98+
},
99+
),
100+
ListTile(
101+
title: Text('Chinese'),
102+
onTap: () {
103+
Navigator.pop(context);
104+
_changeLanguage(TextRecognitionScript.chinese);
105+
},
106+
),
107+
ListTile(
108+
title: Text('Devanagari'),
109+
onTap: () {
110+
Navigator.pop(context);
111+
_changeLanguage(TextRecognitionScript.devanagiri);
112+
},
113+
),
114+
ListTile(
115+
title: Text('Japanese'),
116+
onTap: () {
117+
Navigator.pop(context);
118+
_changeLanguage(TextRecognitionScript.japanese);
119+
},
120+
),
121+
ListTile(
122+
title: Text('Korean'),
123+
onTap: () {
124+
Navigator.pop(context);
125+
_changeLanguage(TextRecognitionScript.korean);
126+
},
127+
),
128+
],
129+
),
130+
),
131+
);
132+
}
133+
);
134+
}
135+
70136
// memilih sumber gambar
71137
void _showImageSourceSelection() {
72138
showModalBottomSheet(
@@ -203,6 +269,43 @@ class _CameraScreenState extends State<CameraScreen> {
203269
}
204270

205271
return Scaffold(
272+
appBar: AppBar(
273+
actions: [
274+
DropdownButton<TextRecognitionScript>( //* Dropdown button untuk pilihan bahasa
275+
value: _currentScript,
276+
icon: Icon(Icons.language, color: Colors.black),
277+
dropdownColor: Colors.blue,
278+
onChanged: (TextRecognitionScript? newScript) {
279+
if (newScript != null) {
280+
_changeLanguage(newScript);
281+
}
282+
},
283+
items: [
284+
DropdownMenuItem(
285+
value: TextRecognitionScript.latin,
286+
child: Text('Latin', style: TextStyle(color: Colors.black)),
287+
),
288+
DropdownMenuItem(
289+
value: TextRecognitionScript.chinese,
290+
child: Text('Chinese', style: TextStyle(color: Colors.black)),
291+
),
292+
DropdownMenuItem(
293+
value: TextRecognitionScript.devanagiri,
294+
child: Text('Devanagiri', style: TextStyle(color: Colors.black)),
295+
),
296+
DropdownMenuItem(
297+
value: TextRecognitionScript.japanese,
298+
child: Text('Japanese', style: TextStyle(color: Colors.black)),
299+
),
300+
DropdownMenuItem(
301+
value: TextRecognitionScript.korean,
302+
child: Text('Korean', style: TextStyle(color: Colors.black)),
303+
),
304+
],
305+
),
306+
SizedBox(width: 20),
307+
],
308+
),
206309
body: Column(
207310
children: [
208311
Expanded(
@@ -242,6 +345,12 @@ class _CameraScreenState extends State<CameraScreen> {
242345
backgroundColor: Colors.green,
243346
child: Icon(Icons.photo_library)
244347
),
348+
SizedBox(width: 20),
349+
FloatingActionButton(
350+
onPressed: _showLanguageSelection,
351+
backgroundColor: Colors.orange,
352+
child: Icon(Icons.language)
353+
),
245354
],
246355
),
247356
),

pubspec.lock

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ packages:
2929
dependency: transitive
3030
description:
3131
name: camera_android_camerax
32-
sha256: d04649fab70a5d586a7b26d5ac26f700656b6aab26a16bfd5a29302589b7a973
32+
sha256: a3b96427f89fe5a7e0253f51f02d93e104a3ec51993a928963a5d2e1be71850d
3333
url: "https://pub.dev"
3434
source: hosted
35-
version: "0.6.23"
35+
version: "0.6.23+3"
3636
camera_avfoundation:
3737
dependency: transitive
3838
description:
@@ -109,10 +109,10 @@ packages:
109109
dependency: transitive
110110
description:
111111
name: file_selector_macos
112-
sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c"
112+
sha256: "88707a3bec4b988aaed3b4df5d7441ee4e987f20b286cddca5d6a8270cab23f2"
113113
url: "https://pub.dev"
114114
source: hosted
115-
version: "0.9.4+4"
115+
version: "0.9.4+5"
116116
file_selector_platform_interface:
117117
dependency: transitive
118118
description:
@@ -146,10 +146,10 @@ packages:
146146
dependency: transitive
147147
description:
148148
name: flutter_plugin_android_lifecycle
149-
sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
149+
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
150150
url: "https://pub.dev"
151151
source: hosted
152-
version: "2.0.30"
152+
version: "2.0.32"
153153
flutter_test:
154154
dependency: "direct dev"
155155
description: flutter
@@ -204,10 +204,10 @@ packages:
204204
dependency: transitive
205205
description:
206206
name: image_picker_android
207-
sha256: "8dfe08ea7fcf7467dbaf6889e72eebd5e0d6711caae201fdac780eb45232cd02"
207+
sha256: "58a85e6f09fe9c4484d53d18a0bd6271b72c53fce1d05e6f745ae36d8c18efca"
208208
url: "https://pub.dev"
209209
source: hosted
210-
version: "0.8.13+3"
210+
version: "0.8.13+5"
211211
image_picker_for_web:
212212
dependency: transitive
213213
description:
@@ -220,10 +220,10 @@ packages:
220220
dependency: transitive
221221
description:
222222
name: image_picker_ios
223-
sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e
223+
sha256: e675c22790bcc24e9abd455deead2b7a88de4b79f7327a281812f14de1a56f58
224224
url: "https://pub.dev"
225225
source: hosted
226-
version: "0.8.13"
226+
version: "0.8.13+1"
227227
image_picker_linux:
228228
dependency: transitive
229229
description:
@@ -236,10 +236,10 @@ packages:
236236
dependency: transitive
237237
description:
238238
name: image_picker_macos
239-
sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04
239+
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
240240
url: "https://pub.dev"
241241
source: hosted
242-
version: "0.2.2"
242+
version: "0.2.2+1"
243243
image_picker_platform_interface:
244244
dependency: transitive
245245
description:

0 commit comments

Comments
 (0)