first commit

This commit is contained in:
kicap 2024-02-04 20:57:23 +08:00
commit 27c529dad9
162 changed files with 8557 additions and 0 deletions

44
.gitignore vendored Normal file
View File

@ -0,0 +1,44 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

45
.metadata Normal file
View File

@ -0,0 +1,45 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: "8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f"
channel: "beta"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
base_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
- platform: android
create_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
base_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
- platform: ios
create_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
base_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
- platform: linux
create_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
base_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
- platform: macos
create_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
base_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
- platform: web
create_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
base_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
- platform: windows
create_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
base_revision: 8fcb74dbc16b9edb3d3f14c11c627d9e8f24fb1f
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'

16
README.md Normal file
View File

@ -0,0 +1,16 @@
# kamus_kesehatan
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

29
analysis_options.yaml Normal file
View File

@ -0,0 +1,29 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

13
android/.gitignore vendored Normal file
View File

@ -0,0 +1,13 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks

68
android/app/build.gradle Normal file
View File

@ -0,0 +1,68 @@
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
android {
namespace "com.example.kamus_kesehatan"
compileSdkVersion flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.kamus_kesehatan"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
// minSdkVersion flutter.minSdkVersion
minSdkVersion 21
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {}

View File

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View File

@ -0,0 +1,36 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="sms" />
</intent>
<!-- If your app checks for call support -->
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
<!-- If your application checks for inAppBrowserView launch mode support -->
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
<application android:label="Kamus Medis" android:name="${applicationName}" android:icon="@mipmap/ic_launcher">
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data android:name="flutterEmbedding" android:value="2" />
</application>
</manifest>

View File

@ -0,0 +1,6 @@
package com.example.kamus_kesehatan
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

View File

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

31
android/build.gradle Normal file
View File

@ -0,0 +1,31 @@
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}

View File

@ -0,0 +1,3 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip

20
android/settings.gradle Normal file
View File

@ -0,0 +1,20 @@
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}
settings.ext.flutterSdkPath = flutterSdkPath()
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
plugins {
id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
}
}
include ":app"
apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"

922
assets/dataset.json Normal file
View File

@ -0,0 +1,922 @@
[
{
"istilah": "abdomen",
"arti": "abdomen adalah area tubuh antara bagian bawah tulang rusuk dan bagian atas paha."
},
{
"istilah": "akut abdomen",
"arti": "abdomen akut adalah istilah medis yang mengacu pada gejala nyeri perut seperti radang usus buntu (apendisitis), radang kantong empedu (kolesistitis), perfpsi usu atau limpah pecah."
},
{
"istilah": "abdominal",
"arti": "abdominal adalah berhubungan dengan perut atau abdomen, yang merupakan bagian tubuh antara dada dan pinggul yang berisi pankreas, lambung, usus, hati, kandung empedu, dan organ lainnya."
},
{
"istilah": "abdominoplasti",
"arti": "abdominoplasti adalah sebuah prosedur pembedahan yang dilakukan untuk meratakan perut"
},
{
"istilah": "AIDS",
"arti": "Virus ini menyerang sistem kekebalan tubuh dan melemahkan kemampuan tubuh\nuntuk melawan infeksi dan penyakit."
},
{
"istilah": "acne vulgaris",
"arti": "acne vulgaris atau jerawat adalah sebuah kondisi kulit yang ditandai dengan sumbatan dan peradangan yang melibatkan folikel rambut dan kelenjar sebasea"
},
{
"istilah": "adenin",
"arti": "dalam genetika, a singkatan adenin, salah satu anggota dari at (adenin-timin) pasangan basa dalam dna. Pasangan basa dan lainnya di gc (guanin-sitosin)."
},
{
"istilah": "adenohipofisis",
"arti": "adenohipofisis adalah kelenjar hipofisis anterior"
},
{
"istilah": "adenosin",
"arti": "adenosin adalah bahan kimia alami tubuh"
},
{
"istilah": "adenopati",
"arti": "adenopati adalah setiap penyakit yang melibatkan atau menyebabkan pembesaran kelenjar getah bening."
},
{
"istilah": "bariatrik",
"arti": "bidang kedokteran yang menawarkan perawatan untuk menurunkan kelebihan berat badan dengan prosedur pembedahan"
},
{
"istilah": "barium telan",
"arti": "barium telan adalah penggunaan larutan barium sulfat yang diberikan secara oral untuk memungkinkan pe- meriksaan rontgen pada saluran usus bagian atas"
},
{
"istilah": "Batang Otak",
"arti": "batang otak adalah wilayah otak yang menghubungkan otak dengan sumsum tulang belakang"
},
{
"istilah": "babyhood",
"arti": "masa bayi"
},
{
"istilah": "badan barr",
"arti": "massa krimatiin seks pada membran nukleus"
},
{
"istilah": "badan pankreas",
"arti": "artinya badan pertengahan pankreas"
},
{
"istilah": "baduta",
"arti": "istilah yang digunakan untuk anak berusia 0-23 bulan"
},
{
"istilah": "balsem",
"arti": "salah satu dari zat bergetah aromatik yang di gunakan untuk menyembuhkan dan menenangkan."
},
{
"istilah": "band",
"arti": "pengikat, penjepit berupa cincin logam yang disemen pada gigi dan penyakit elastis pada lambung yang ditempatkan dalam bedah gastric banding."
},
{
"istilah": "basilfobia",
"arti": "adalah ketakutan yang abnormal dan terus menerus terhadap basil (bakteri)"
},
{
"istilah": "cacar",
"arti": "adalah penyakit sangat menular yang sering fatal di sebabkan oleh poxvirus"
},
{
"istilah": "cacing tambang",
"arti": "adalah penyakit usus yang disebabkan oleh dua spesies nemotoda, necator americanus duodenale"
},
{
"istilah": "caesar",
"arti": "adalah melahirkan bayi melalui sayatan bedah di perut."
},
{
"istilah": "calceneus",
"arti": "adalah istilah medis untuk tulang tumit"
},
{
"istilah": "carpal",
"arti": "adalah istilah medis untuk tulang pergelangan tangan."
},
{
"istilah": "centanarian",
"arti": "seorang yang berusia 100 tahun atau lebih"
},
{
"istilah": "cervidil",
"arti": "adalah obat yang digunakan untuk mematangkan serviks sebelum induksi"
},
{
"istilah": "chelioplasty",
"arti": "adalah oprasi untuk mengoreksi bibir sumbing."
},
{
"istilah": "citalopram",
"arti": "adalah obat anti depresan jenis selective serotonin reuptake inhibitor (SSRI)"
},
{
"istilah": "clasp",
"arti": "adalah perangkat yang mengcengkeram gigi tiruan parsial (jembatan gigi) oada gigi stasioner."
},
{
"istilah": "defisiensi",
"arti": "kurangnya pasokan yang cukup dari enzim laktase. Orang dengan defisiensi laktase mengalami kesulitan mencerna susu dan produk susu."
},
{
"istilah": "defisiensi sfingter intrinsik",
"arti": "melemahnya otot sfingter uretra. Kelemahan sfingter ini menyebabkannya tidak berfungsi secara normal, bagaimana pun posisi leher kandung kemih atau uretra. kondisi ini adalah penyebab umum dari inkontinensia urin stres."
},
{
"istilah": "defisiensi warna",
"arti": "adalah ketidakmampuan untuk membedakan beberapa warna dan nuansa, terjadi ketika sel-sel kerucut yang sensitif warna di retina tidak mengambil atau mengirim sinyal warna secara normal ke otak."
},
{
"istilah": "deformitas buttonniere",
"arti": "pecah slip pusat dari tendon ekstensor falang tengah yang disebabkan oleh fleksi cepat dan kuat pada sendi interfalangeal proksimal; ditandai dengan fleksi sendi interfalangeal proksimal dan hiperekstensi pada sendi interfalangeal distal"
},
{
"istilah": "degeneratif",
"arti": "kerusakan progresif dan sering ireversibel"
},
{
"istilah": "defibrilator",
"arti": "adalah sebuah perangkat elektronik yang digunakan untuk membuat denyut jantung normal"
},
{
"istilah": "dehidrasi",
"arti": "berarti tubuh anda tidak memiliki cairan sebanyak yang seharusnya. Dehidrasi dapat disebabkan oleh kehilangan cairan terlalu banyak, tidak cukup minum, atau keduanya"
},
{
"istilah": "dehidrogenasi",
"arti": "proses kebalikan dari hidrogenasi, yaitu proses yang mengubah lemak tak jenuh menjadi lemak jenuh"
},
{
"istilah": "demam rematik",
"arti": "penyakit autoimun yang mungkin terjadi setelah infeksi tenggorokan streptokokus grup a."
},
{
"istilah": "demografi",
"arti": "karakteristik populasi (misalnya, jenis kelamin, ras, umur)."
},
{
"istilah": "Enzim bimolekul",
"arti": "berupa protein yang berfungsi sebagai katalis dalam suatu reaksi kimia organic"
},
{
"istilah": "Echocardiografi",
"arti": "pemeriksaan jantung dengan teknik gelombang ultra- sonik"
},
{
"istilah": "enzim hati",
"arti": "protein yang terletak di hati yang mempercepat laju reaksi kimia untuk membuat mereka layak"
},
{
"istilah": "endemi",
"arti": "penyakit infeksi yang terus menerus"
},
{
"istilah": "eikosanoid",
"arti": "utusan bahan kimia yang berasal dari asam lemak tak jenuh."
},
{
"istilah": "ebner",
"arti": "kelenjar yang ditemukan di sekitar papila sirkumvalata pada permukaan lidah"
},
{
"istilah": "epilepsi",
"arti": "gangguan saraf yang ditandai dengan kejang mendadak."
},
{
"istilah": "efek sinergis",
"arti": "efek dari beberapa obat yang diambil bersama-sama lebih besar daripada jumlah efek masing-masing secara individual"
},
{
"istilah": "efikasi",
"arti": "efektifitas, kemampuan untuk mencapai hasil yang diinginkan"
},
{
"istilah": "efek aditif",
"arti": "efek gabungan dari beberapa obat"
},
{
"istilah": "Felon",
"arti": "suatu abses ruang pulpa pada falang distal"
},
{
"istilah": "femur",
"arti": "bagian tubuh terbesar dan tulang terkuat pada tubuh manusia"
},
{
"istilah": "fenilanin",
"arti": "suatu asam amino penting dan banyak terdapat pada makanan"
},
{
"istilah": "farmasi",
"arti": "ilmu yang mempelajari cara membuat, mencampur, meracik, memformulasi, mengidentifikasi, mengombinasi, menganalisis, serta menstandarkan obat."
},
{
"istilah": "Fagosit",
"arti": "pengolongan dari sel darah putih yang berperan dalam sistem kekebalan"
},
{
"istilah": "fagositosis",
"arti": "proses yang digunakan oleh sel untuk menelan dan kemudian mencerna partikel nutrisi atau bakteri"
},
{
"istilah": "falang",
"arti": "istilah medis yang digunakan untuk menggambarkan jari tangan dan kaki"
},
{
"istilah": "feminin",
"arti": "sebuah kata sifat, adjektif yang berarti <20>kewanitaan<61> atau menunjukkan sifat perempuan"
},
{
"istilah": "Ferritin",
"arti": "sebuah protein yang terdapat di dalam sel pada hamper seluruh makhluk hidup."
},
{
"istilah": "femur",
"arti": "denyut abnormal yang terjadi di jantung"
},
{
"istilah": "Gagap",
"arti": "suatu gangguan bicara di mana aliran bicara terganggu"
},
{
"istilah": "ganas",
"arti": "suatu kondisi yang parah, berbahaya, atau resisten terhadap pengobatan"
},
{
"istilah": "gangguan bicara",
"arti": "penggunaan yang buruk atau abnormal dari sistem vocal"
},
{
"istilah": "gangguan bipolar",
"arti": "gangguan mental yang menyerang kondisi psikis sese- orang yang ditandai dengan perubahan suasana hati yang sangat ekstrem berupa mania dan depresi"
},
{
"istilah": "gangguan kepribadian",
"arti": "kondisi yang menyebabkan penderitanya memiliki pola pikir dan perilaku yang tidak sehat dan berbeda dari orang normal"
},
{
"istilah": "gangguan kecemasan",
"arti": "rasa cemas berlebihan yang bisa memengaruhi aktivitas sehari-hari seseorang"
},
{
"istilah": "gangguan saraf",
"arti": "penyakit yang menyerang sistem saraf yaitu otak atau beberapa sel saraf pada jaringan saraf"
},
{
"istilah": "gangguan mental",
"arti": "pola psikologis atau perilaku yang pada umumnya terkait dengan stres atau kelainan mental yang tidak dianggap sebagai bagian dari perkembangan normal manusia"
},
{
"istilah": "gamet",
"arti": "sel haploid (tidak berpasangan) khusus untuk fertilisasi"
},
{
"istilah": "ganas",
"arti": "suatu kondisi yang parah, berbahaya, atau resisten terhadap pengobatan"
},
{
"istilah": "halotan",
"arti": "obat anestesi inhalasi berbentuk cairan bening tak berwarna yang mudah menguap dan berbau harum"
},
{
"istilah": "halusinasi",
"arti": "terjadinya persepsi dalam kondisi sadar tanpa adanya rangsang nyata terhadap indera"
},
{
"istilah": "halusinogen",
"arti": "jenis napza yang dapat menimbulkan efek halusinasi yang bersifat mengubah perasaan"
},
{
"istilah": "hammertoe",
"arti": "kondisi yang ditandai dengan deformitas sendi yang paling dekat dengan ibu jari kaki"
},
{
"istilah": "handikap",
"arti": "hambatan dalam individu yang diakibatkan oleh disabilitas dan impairmen"
},
{
"istilah": "hemoroid",
"arti": "pembengkakan yang berisi pembuluh darah yang membesar"
},
{
"istilah": "hemokromatosis",
"arti": "penyakit genetik yang menyebabkan tubuh menyerap terlalu banyak zat besi dari makanan yang kita konsumsi"
},
{
"istilah": "hemolysis",
"arti": "kerusakan atau penghancuran sel darah merah karena gangguan integritas membran sel darah merah yang menyebabkan pelepasan hemoglobin"
},
{
"istilah": "hemopoietik",
"arti": "berkenaan atau terkait dengan pembentukan sel darah"
},
{
"istilah": "hemoptisis",
"arti": "keadaan ketika seseorang mengalami batuk yang disertai darah."
},
{
"istilah": "indeks terapetik",
"arti": "ukuran selektifitas obat yang merupakan ukuran faktor keamanan obat"
},
{
"istilah": "indera",
"arti": "alat penghubung kontak antara jiwa dalam wujud kes- adaran rohani diri dengan material lingkungan"
},
{
"istilah": "individuasi",
"arti": "kebutuhan untuk menjadi beberapa dengan orang lain dalam beberapa ha"
},
{
"istilah": "induksi ovulasi",
"arti": "stimulasi ovulasi dari pasien yang an-ovulatori atau ti- dak terjadi ovulasi"
},
{
"istilah": "infeksi paru-paru",
"arti": "penyakit peradangan pada paru-paru yang disebabkan oleh mikroorganisme bakteri, jamur, parasit atau virus"
},
{
"istilah": "infeksi",
"arti": "proses invasi dan multiplikasi berbagai mikroorganisme ke dalam tubuh"
},
{
"istilah": "infeksi laten",
"arti": "infeksi yang tidak aktif di dalam tubuh untuk beberapa bulan atau tahun tetapi dapat muncul kembali"
},
{
"istilah": "infeksi aktif",
"arti": "dimana mikroorganisme penyakit secara aktif merep- likasi dan menginfeksi sel-sel baru"
},
{
"istilah": "inhalation",
"arti": "menghirup udara atau uap lain ke dalam paru-paru"
},
{
"istilah": "injeksi",
"arti": "memasukkan larutan obat atau larutan-larutan lain ke dalam tubuh melalui semprit"
},
{
"istilah": "jarum suntik",
"arti": "jarum yang secara umum digunakan dengan alat suntik untuk menyuntikkan suatu zat kedalam tubuh"
},
{
"istilah": "jalur fekal-oral",
"arti": "rute penularan penyakit dari feses ke mulut"
},
{
"istilah": "jalan lahir",
"arti": "bagian yang mencakup rahim dan vagina yang dilalui bayi saat lahir"
},
{
"istilah": "janin melintang",
"arti": "posisi janin horisontal di dalam rahim dengan sumbu melintang terhadap sumbu tubuh ibu, dengan kepala di satu sisi dan bokong di sisi yang lain"
},
{
"istilah": "jantung",
"arti": "sebuah rongga-rongga organ berotot yang memompa darah lewat pembuluh darah oleh kontraksi berirama yang berulang"
},
{
"istilah": "jantung berdebar",
"arti": "sensasi yang dirasakan saat jantung berdentum dengan kuat,cepat, atau tidak beraturan"
},
{
"istilah": "jalur auditori",
"arti": "saraf dan koneksi dalam sistem saraf pusat, yang dimulai pada sel-sel rambut organ corti, berlanjut kesepanjang kedelapan saraf pendengaran dan berakhir di korteks auditori"
},
{
"istilah": "jampersal",
"arti": "jaminan pembiayaan perlayan persalinan"
},
{
"istilah": "jaringan parut",
"arti": "area dari jaringan fibrosa yang menggantikan kulit yang luka setelah cedera"
},
{
"istilah": "jaringan otot",
"arti": "jaringan yang terdiri atas kumpulan sel otot atau serat otot dan miofibril yang halus untuk membantu proses pergerakan tubuh"
},
{
"istilah": "kacamata",
"arti": "lensa tipis untuk mata guna menormalkan dan mempertajam penglihatan"
},
{
"istilah": "kacamata matahari",
"arti": "kacamata untuk melindungi mata dari sinar matahari"
},
{
"istilah": "kacamata obat",
"arti": "alat bantu penglingatan dan melindungi mata yang terdiri dari lensa, frame"
},
{
"istilah": "kanker",
"arti": "penyakit akibat pertumbuhan tidak normal dari sel-sel jaringan tubuh yang berusaha menjadi sel kanker"
},
{
"istilah": "kapas",
"arti": "serat halus yang menyelubungi biji beberapa jenis gossypium, tumbuhan semak yang berasal dari daerah tropika dan subtropika"
},
{
"istilah": "kencing manis",
"arti": "gangguan metabolisme tubuh yang sifatnya kronis"
},
{
"istilah": "klinik",
"arti": "suatu fasilitas kesehatan publik kecil yang didirikan untuk memberikan perawatan kepada pasien luar"
},
{
"istilah": "kolera",
"arti": "infeksi bakteri yang dapat menyebabkanpenderitanya dehidrasi akibat diare parah"
},
{
"istilah": "kalitonin",
"arti": "hormon protein yang disekresikan oleh sel-sel di kelenjar tiroid. hormon ini menghambat degradasi tulang dan merangsang penyerapan kalsium dan fosfat oleh tulang"
},
{
"istilah": "kalsium sulfat",
"arti": "garam yang terdiri dari kristal putih yang dapat larut dalam air"
},
{
"istilah": "laju endap darah",
"arti": "sebuah pengukuran seberapa cepat sel-sel darah merah jatuh ke dasar sebuah tabung uji"
},
{
"istilah": "laksatif",
"arti": "agenyang mempromosikan evakuasi usus (mendorong buang air besar)."
},
{
"istilah": "laktosa",
"arti": "jenis gula yang ditemukan dalam susu dan produk susu (keju, mentega, dll). gula ini dianggap sebagai pemanis nutritif karena memiliki kalori."
},
{
"istilah": "lapisan germinal",
"arti": "tingkat yang paling primitif dari organisasi jaringan."
},
{
"istilah": "lapisan nutfah ektodermal",
"arti": "lapisandalam embrio yang akan berkembang menjadi struktur pada tahap janin. struktur tersebut termasuk kulit, gigi dan kelenjar mulut, sistem saraf dan kelenjar pituitari. juga disebut ektoderma."
},
{
"istilah": "larutan dialisat",
"arti": "suatu cairan pembersih yang digunakan dalam dua bentuk utama dialisis: hemodialisis dan dialisis peritoneal"
},
{
"istilah": "larvisida",
"arti": "agenkimia atau bakteri alami yang dapat digunakan untuk membunuh larva serangga pengganggu, misalnya nyamuk."
},
{
"istilah": "laser argon",
"arti": "perangkat yang digunakan untuk mengobati glaukoma (biasanya sudut terbuka) dan retinopati diabetik dengan menggunakan sinar termal."
},
{
"istilah": "laserasi",
"arti": "luka yang disebabkan oleh robekan, bukan bentuk yang teratur seperti sayatan bedah."
},
{
"istilah": "latihan aerobik",
"arti": "jenis latihan (misalnya, berlari, berenang) yang mem- buat jantung dan paru-paru bekerja lebih keras untuk memasok otot dengan oksigen"
},
{
"istilah": "menstruasi migren",
"arti": "migren yang terjadi antara satu hari sebelum dan empat hari setelah onset menstruasi, diduga akibat penarikan estrogen"
},
{
"istilah": "metformin",
"arti": "obat oral untuk meningkatkan penggunaan insulin oleh tubuh"
},
{
"istilah": "metroragia",
"arti": "pendarahan rahim"
},
{
"istilah": "Myeloma",
"arti": "tumor pada sumsum tulang"
},
{
"istilah": "Mielinasi",
"arti": "penutupan aksn atau serabut panjang sarah oleh myelin, yang merupakan isolator lemak migraine sakit kepala yang berlangsung 4 <20> 27 jam."
},
{
"istilah": "mikroskop",
"arti": "alat optic yang menambah kekuatan mata untuk melihat benda- benda kecil"
},
{
"istilah": "mikrosefali",
"arti": "kondisi ketika kepala bayi secara signifikan lebih kecil dari yang diharapkan, biasanya disebabkan karena perkembangan otak yang tidak normal."
},
{
"istilah": "milia",
"arti": "bintik kecil, putih dank eras yang terlihat seperti jerawat dihidung bayi yang baru lahir."
},
{
"istilah": "nanah",
"arti": "cairan berwarna kuning keputihan atau kuning kehijauan yang disebabkan bakteri."
},
{
"istilah": "nambi",
"arti": "penyakit puru"
},
{
"istilah": "nanar",
"arti": "pusing"
},
{
"istilah": "narkoleps",
"arti": "penyakit kantuk kronis"
},
{
"istilah": "narkose",
"arti": "obat pembius"
},
{
"istilah": "narcosis",
"arti": "keadaan terbius"
},
{
"istilah": "natalitas",
"arti": "laju kelahiran"
},
{
"istilah": "natrium",
"arti": "sebuah mineral yang ditemukan dalam tubuh dan dalam banyak makanan."
},
{
"istilah": "nausea",
"arti": "rasa mau muntah"
},
{
"istilah": "nefrosis",
"arti": "nefrosis penyakit ginjal."
},
{
"istilah": "nefrotomi",
"arti": "pemotongan/pembedahan ginjal."
},
{
"istilah": "negative",
"arti": "kesalahan dimana hasil tes menunjukkan negative."
},
{
"istilah": "obat",
"arti": "bahan/paduan bahan-bahan untuk digunakan dalam menetapkan diagnosis, mencegah, mengurangi, meng- hilangkan, menyembuhkan penyakit, atau luka."
},
{
"istilah": "obat aborsi",
"arti": "proses menggugurkan kandungan atau dalam dunia kedokteran"
},
{
"istilah": "Obat keras",
"arti": "obat beracun yang mempunyai khasiat mengobati, menguatkan, mendefinisikan dan lain <20> lain tubuh manusia."
},
{
"istilah": "obat penenang",
"arti": "untuk menenangkan (meredakan ketegangan) jiwa dsb."
},
{
"istilah": "obat perangsang",
"arti": "obat untuk merangsang nafsu seks dsb."
},
{
"istilah": "Obat penawar racun",
"arti": "penawar terhadap zat yang beracun terhadap tubuh."
},
{
"istilah": "Obsesi",
"arti": "pemikiran, dorongan, atau gambaran berulang dan terus menerus yang terasa menganggu, menekan dan diakui sebagai sesuatu yang berlebihan dan tidak masuk akal."
},
{
"istilah": "Observasi",
"arti": "pemantauan ketat kondisi pasien tanpa pengobatan sampai gejalanya mucul atau berubah."
},
{
"istilah": "obstetrika",
"arti": "ilmu kebidanan"
},
{
"istilah": "oksida",
"arti": "senyawa kimia yang sedikitnya mengandung sebuah atom oksigen serta sedikitnya sebuah unsur lain"
},
{
"istilah": "pangan",
"arti": "segala sesuatu yang berasal dari sumber hayati dan air, baik yang diolah maupun yang tidak diolah, yang diperuntukkan sebagai makanan atau minuman bagi konsumsi manusia."
},
{
"istilah": "Panik",
"arti": "ketakukan atau kecemasan yang ekstrim dan tidak masuk akal"
},
{
"istilah": "pankreas",
"arti": "organ kelenjar yang terletak dipeut"
},
{
"istilah": "paparan",
"arti": "eksposur hadir dalam kontak dengan mikrorganisme penyebab penyakit;dapat menyebabkan infeksi."
},
{
"istilah": "paparan akut",
"arti": "kontak dengan zat yang terjadi selama waktu yang lama (lebih dari 24 jam)."
},
{
"istilah": "paramedis",
"arti": "seseorang yang dilatih untuk memberikan pengobatan darurat atau membantu orang lain yang professional di bidang kesehatan (dokter)"
},
{
"istilah": "pica",
"arti": "istilah yang mengacu pada keinginan memakan zat yang bukan makanan."
},
{
"istilah": "pigmen",
"arti": "sebuah zat yang member warna pada jaringan."
},
{
"istilah": "Pilek",
"arti": "penyakit infeksi saluran pernafasan atas yang paling sering terjadi di seluruh dunia"
},
{
"istilah": "pinna",
"arti": "istilah yang digunakan untuk menggambarkan bagian luar telinga kita"
},
{
"istilah": "Qi gong",
"arti": "bagian dari pengobatan tradisional cina"
},
{
"istilah": "quercetin",
"arti": "fitokimia yang merupakan bagian dari zat warna yang ditemukan pada kulit apel dan bawang merah."
},
{
"istilah": "Quantum sufficiat",
"arti": "jumlah secukupnya."
},
{
"istilah": "quaque 4 hora",
"arti": "setiap 4 jam."
},
{
"istilah": "quaque 6 hora",
"arti": "setiap 6 jam."
},
{
"istilah": "quaque die",
"arti": "setiap hari."
},
{
"istilah": "quarter die sumendus",
"arti": "4X sehari. quarter in die 5X sehari."
},
{
"istilah": "Raba",
"arti": "rasa dimana kita menentukan ukuran, bentuk, dan tekstur objek, menggunakan reseptor di kulit."
},
{
"istilah": "Rabies",
"arti": "penyakit mematikan yang disebabkan oleh virus yang menyerang system saraf pusat."
},
{
"istilah": "rabun jauh",
"arti": "kesalahan refraksi mata di mana bola mata terlalu mencembung dan fokus cahaya berada di depan retina mata."
},
{
"istilah": "Rachitic",
"arti": "pelunakan tulang pada anak-anak karena kekurangan atau gangguan metabolisme vitamin D, magnesium, fosfor, atau kalsium, berpotensi menyebabkan patah tulang dan kelainan bentuk."
},
{
"istilah": "Racun",
"arti": "zat padat, cair, atau gas yang dapat mengganggu proses kehidupan sel suatu organisme."
},
{
"istilah": "Radang",
"arti": "sakit tenggorokan yang disebabkan oleh radang bagian belakang tenggorokan, atau yang dalam dunia medis disebut dengan faring"
},
{
"istilah": "radang amandel",
"arti": "infeksi pada amandel yang kadang mengakibatkan sakit tenggorokan dan demam."
},
{
"istilah": "radang buah pinggang",
"arti": "terdapat kerusakan pada glomeruli yaitu sekumpulan kapilari yang berfungsi sebagai penapisan"
},
{
"istilah": "radang di bawah kulit",
"arti": "infeksi pada bagian jaringan bawah permukaan kulit dan lapisan lemak pun juga disebut dengan selulitis."
},
{
"istilah": "peradangan bursa",
"arti": "Cedera atau peradangan dari bursa di sekitar bahu penyebab sendi bahu bursitis."
},
{
"istilah": "sabin vaccine",
"arti": "vaksin polio yang mengandung 3 serotipe virus polio dalam keadaan hidup yang dilemahkan dan diberikan secara oral."
},
{
"istilah": "sac",
"arti": "struktur berisi cairan yang berkembang pada awal kehamilan, yang mungkin berlokasi di dalam atau di luar rahim."
},
{
"istilah": "saccades",
"arti": "gerakan mata ketika bergerak dari satu fiXasi ke fiXasi berikutnya."
},
{
"istilah": "saccharide",
"arti": "adalah anion dan garam dari sakarin pemanis (sodium saccharide, denatonium saccharide). sakarin kadang- kadang digunakan untuk menggantikan gula."
},
{
"istilah": "saccule (sacculus)",
"arti": "sebuah kantung kecil, khusus, sacculus telinga."
},
{
"istilah": "sacralization",
"arti": "adalah anomali kongenital di mana proses transversus dari tulang belakang lumbar terakhir menyatu ke sakrum atau ilium. Fusi dapat terjadi pada satu sisi atau keduanya. Telah diduga itu mungkin menjadi penyebab sakit punggung."
},
{
"istilah": "safranin",
"arti": "noda biologis yang digunakan dalam histologi dan sitologi."
},
{
"istilah": "sagittal",
"arti": "bidang yang membagi tubuh menjadi 2 bagian dari titik tertentu. bidang ini sejajar dengan bidang median."
},
{
"istilah": "shock",
"arti": "penyakit yang disebabkan oleh virus varicella-zoster. setelah seseorang menderita cacar air, virus varicella- zoster akan menetap dalam kondisi dorman (tidak aktif atau laten) pada satu atau lebih ganglia (pusat saraf) posterior"
},
{
"istilah": "tablet",
"arti": "bentuk sediaan padat yang terdiri dari satu atau lebih bahan obat yang dibuat dengan pemadatan, kedua permukaannya rata atau cembung"
},
{
"istilah": "tabir surya",
"arti": "tabir surya dapat mengurangi resiko kanker kulit, termasuk melanoma"
},
{
"istilah": "tacrolimus",
"arti": "obat yang umumnya digunakan bersama obat lain untuk mencegah penolakan transplantasi ginjal, jantung, atau hati."
},
{
"istilah": "tactile",
"arti": "sebuah perangkat yang mengukur informasi yang timbul dari interaksi fisik dengan lingkungannya."
},
{
"istilah": "taeniafuge",
"arti": "Sebuah obat untuk mengusir cacing pita"
},
{
"istilah": "taeniasis",
"arti": "penyakit akibat parasit berupa cacing pita yang tergolong dalam genus Taenia yang dapat menular dari hewan ke manusia, maupun sebaliknya"
},
{
"istilah": "takifilaksis",
"arti": "penurunan respon terhadap aplikasi berulang dari agonis, biasanya terjadi selama kurun waktu yang relative singkat (detik sampai jam)."
},
{
"istilah": "talus",
"arti": "dipakai untuk menyatakan jaringan yang tidak berdife- rensiasi (masih belum bisa dibedakan bagian-bagiannya) yang membentuk tubuh sekelompok vegetasi tingkat rendah."
},
{
"istilah": "tamoxifen",
"arti": "salah satu obat yang bisa digunakan dokter untuk menangani kanker payudara dan salah satu obat untuk terapi hormon."
},
{
"istilah": "tampon",
"arti": "massa silinder yang berfungsi sebagai alat serap, umumnya digunakan sebagai produk kesehatan wanita"
},
{
"istilah": "ulcer",
"arti": "luka yang muncul pada dinding lambung akibat terkikisnya lapisan dinding lambung. Luka ini juga berpotensi muncul pada dinding bagian pertama usus kecil (duodenum) serta kerongkongan (esofagus)."
},
{
"istilah": "ulcerative colitis",
"arti": "penyakit peradangan usus yang menyebabkan per- dangan kronis pada saluran pencernaan. Penyakit ini ditandai dengan sakit perut dan diare."
},
{
"istilah": "ulna",
"arti": "adalah sebuah tulang pipa yang mempunyai sebuah batang dan dua ujung."
},
{
"istilah": "ultramikroskop",
"arti": "alat pembesar penglihatan yang memiliki kemampuan mikroskop cahaya biasa."
},
{
"istilah": "uracil",
"arti": "basa organik dalam RNA yang menggantikan timin dalam DNA yang bersangkutan"
},
{
"istilah": "uremia",
"arti": "kadaran toksik yang disebabkan gagal ginjal. Hal ini terjadi bila fungsi ginjal tidak dapat membuang urea keluar dari tubuh sehingga urea menumpuk dalam darah."
},
{
"istilah": "uretritis",
"arti": "peradangan atau infeksi uretra, saluran yang mengangkut urin dari kandung kemih keluar dari tubuh."
},
{
"istilah": "vagina",
"arti": "vagina adalah bagian tubuh perempuan yang meng- hubungkan rahim (uterus) dan leher rahim keluar tubuh, atau tabung berotot yang dilapisi selaput lendir."
},
{
"istilah": "vaginismus",
"arti": "vaginismus adalah gangguan seksual yang ditandai oleh pengetatan otot-otot sepertiga bagian luar vagina yang sering kali menyakitkan"
},
{
"istilah": "vaginitis",
"arti": "vaginitis adalah peradangan vagina. gejala yang menyertai adalah keputihan (leukorea) dan bau amis."
},
{
"istilah": "vaginitis atrofik",
"arti": "vaginitis atrofik adalah bentuk vaginitis tidak menular yang biasanya disebabkan oleh penurunan karena menopause, operasi pengangkatan induk telur , terapi radiasi, atau bahkan setelah melahirkan- terauma pada wanita menyusui."
},
{
"istilah": "vaginosis bakteri",
"arti": "vaginosis bakteri (bakterial vaginosis/bv) adalah kondisi pada wanita dimana keseimbngan normal bakteri di vagina terganggu dan digantikan oleh pertumbuhan berlebih bakteri tertentu."
},
{
"istilah": "vaksin",
"arti": "vaksin adalah sebuah produk yang menghasilkan kekebalan sehingga melindungi tubuh dari penyakit. vaksin diberikan melalui suntikan jarum, melalui mulut dan aerosol."
},
{
"istilah": "valgus",
"arti": "valgus adalah deformitas yang menyebabkan tulang membengkok menjauhi garis tengah tubuh, seperti talipes valgus."
},
{
"istilah": "validitas",
"arti": "validitas atau kebasahan adalah apakah tes atau teknik benar-benar mengukur apa yang dimaksudkan untuk diukur atau biasa disebut dengan akurasi pengukuran."
},
{
"istilah": "validitas eksternal",
"arti": "validitas eksternal adalah sejauh mana studi penelitian klinis berlaku untuk populasi yang lebih luas."
},
{
"istilah": "validitas internal",
"arti": "validitas internal adalah sejauh mana hasil studi penelitian klinis tidak bias."
},
{
"istilah": "wabah",
"arti": "wabah seringkali identik dengan epidemi"
},
{
"istilah": "warfarin",
"arti": "warfarin adalah obat anti kogulan yang awalnya di kem- bangkan untuk mengobati tromboembolisme ddemgan cara menghalangi metabolisme hati terhadap vitamin k sehingga menurunkan produksi faktor koagulasi"
},
{
"istilah": "wellferon",
"arti": "wellferon adalah nama merek lymphoblastoid interfer- on-alfan-n1, diproduksi oleh glaxosmithkline, bolt western"
},
{
"istilah": "western bolt",
"arti": "adalah tes anti bodi yang digunakan untuk mengkonfirmasi tes elisa positif hiv."
},
{
"istilah": "whitening",
"arti": "(pemutihan gigi) adalah penggunaaan proksida untuk menghilangkan pigmen gigi. pemutihan gigi tidak merusak enamel"
},
{
"istilah": "wilayah perut",
"arti": "selain dibagi menurut kuadran, perut juga dapat di bagi menjadi area atau wilayah (region) yang jumlah ada 9 dengan pusar sebagai pusat atau patokan."
},
{
"istilah": "xanthoma",
"arti": "Xantoma adalah benjolan kulit kuning, lembut, dan se- dikit terangkat. Xenthoma terbuat dari endapan kolestrol dan cukup umum pada klopak mata, biasanya di kedua sisi."
},
{
"istilah": "xentokromia",
"arti": "Xentokromia adalah perubahan warna kekuningan , biasanya berhubungan dengan cairantulang belakang."
},
{
"istilah": "xenograft",
"arti": "Xenograft dan xenotransplantasi adalah tranplantasi sel antara spesies."
},
{
"istilah": "xeroderma",
"arti": "Xeroderma adalah kulit abnormal kering."
},
{
"istilah": "xeroderma pigmentosum",
"arti": "Xeroderma pigmentosum adalah sebuah penyakit ge- netic yang di tandai dengan sensitivitas yang luar biasa seperti sinar matahari"
},
{
"istilah": "xerofatalia",
"arti": "Xerofatalia adalah penyakit mata kering karena kekuran- gan vitamin a"
},
{
"istilah": "xerograft",
"arti": "Xerograft (Xenotranplant) adalah transplantasi organ atau jaringan dari spesies yang berbeda"
},
{
"istilah": "xerosis",
"arti": "Xerosis adalah istilah untuk kulit kering .kita semua memiliki lapisan minyak alami di kulit kita yang di hasil- kan oleh kelenjar minyak kulit"
},
{
"istilah": "xerostomia",
"arti": "Xerostomia adalah mulut kering yang disebabkan oleh berkurang atau tidak adanya air liur ."
},
{
"istilah": "yoghurt",
"arti": "susu asam"
},
{
"istilah": "zaitun",
"arti": "zaitun bermanfaat untuk kesehatan"
}
]

BIN
assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

34
ios/.gitignore vendored Normal file
View File

@ -0,0 +1,34 @@
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>11.0</string>
</dict>
</plist>

View File

@ -0,0 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"

View File

@ -0,0 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

44
ios/Podfile Normal file
View File

@ -0,0 +1,44 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end

View File

@ -0,0 +1,614 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
proxyType = 1;
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
remoteInfo = Runner;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
331C807B294A618700263BE5 /* RunnerTests.swift */,
);
path = RunnerTests;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
331C8080294A63A400263BE5 /* RunnerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
331C807D294A63A400263BE5 /* Sources */,
331C807E294A63A400263BE5 /* Frameworks */,
331C807F294A63A400263BE5 /* Resources */,
);
buildRules = (
);
dependencies = (
331C8086294A63A400263BE5 /* PBXTargetDependency */,
);
name = RunnerTests;
productName = RunnerTests;
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C8080294A63A400263BE5 = {
CreatedOnToolsVersion = 14.0;
TestTargetID = 97C146ED1CF9000F007C117D;
};
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
331C8080294A63A400263BE5 /* RunnerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
331C807F294A63A400263BE5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
331C807D294A63A400263BE5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 97C146ED1CF9000F007C117D /* Runner */;
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.kamusKesehatan;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.kamusKesehatan.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Debug;
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.kamusKesehatan.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Release;
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.kamusKesehatan.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.kamusKesehatan;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.kamusKesehatan;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
331C8088294A63A400263BE5 /* Debug */,
331C8089294A63A400263BE5 /* Release */,
331C808A294A63A400263BE5 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "331C8080294A63A400263BE5"
BuildableName = "RunnerTests.xctest"
BlueprintName = "RunnerTests"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

View File

@ -0,0 +1,13 @@
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}

View File

@ -0,0 +1,122 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

View File

@ -0,0 +1,5 @@
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

51
ios/Runner/Info.plist Normal file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Kamus Kesehatan</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>kamus_kesehatan</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1 @@
#import "GeneratedPluginRegistrant.h"

View File

@ -0,0 +1,12 @@
import Flutter
import UIKit
import XCTest
class RunnerTests: XCTestCase {
func testExample() {
// If you add code to the Runner application, consider adding tests here.
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
}
}

52
lib/app/app.dart Normal file
View File

@ -0,0 +1,52 @@
import 'package:stacked_services/stacked_services.dart';
import 'package:stacked/stacked_annotations.dart';
import '../services/global_var.dart';
import '../services/my_easyloading.dart';
import '../services/my_storage.dart';
import '../services/my_tts.dart';
import '../services/other_function.dart';
import '../ui/views/action_dialog/action_dialog_view.dart';
import '../ui/views/nomor_telpon_dialog/nomor_telpon_dialog_view.dart';
import '../ui/views/splash_screen/splash_screen_view.dart';
import '../ui/views/user_tracking_index/list_kamus_kesehatan/list_kamus_kesehatan_view.dart';
import '../ui/views/user_tracking_index/profil_user/profil_user_view.dart';
import '../ui/views/user_tracking_index/user_tracking_index_view.dart';
@StackedApp(
routes: [
MaterialRoute(page: SplashScreenView, initial: true),
MaterialRoute(
page: UserTrackingIndexView,
children: [
MaterialRoute(page: ListKamusKesehatanView),
// MaterialRoute(page: TampilkanListView),
MaterialRoute(page: ProfilUserView),
],
),
],
dialogs: [
StackedDialog(classType: ActionDialogView),
StackedDialog(classType: NomorTelponDialogView)
],
dependencies: [
LazySingleton(classType: NavigationService),
LazySingleton(classType: DialogService),
LazySingleton(classType: SnackbarService),
LazySingleton(classType: BottomSheetService),
// this below is mine
LazySingleton(classType: MyEasyLoading),
// LazySingleton(classType: MyHttpServices),
LazySingleton(classType: GlobalVar),
LazySingleton(classType: MyFunction),
// LazySingleton(classType: MySharedPrefs)
LazySingleton(classType: MyTts),
LazySingleton(classType: MyStorage),
],
logger: StackedLogger(),
// bottomsheets: [
// StackedBottomsheet(classType: DetailSuaraBottomSheetView),
// StackedBottomsheet(classType: DetailSuaraPemilihBottomSheetView)
// ],
)
class App {}

32
lib/app/app.dialogs.dart Normal file
View File

@ -0,0 +1,32 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedDialogGenerator
// **************************************************************************
import 'package:stacked_services/stacked_services.dart';
import '../model/istilah_model.dart';
import 'app.locator.dart';
import '../ui/views/action_dialog/action_dialog_view.dart';
import '../ui/views/nomor_telpon_dialog/nomor_telpon_dialog_view.dart';
enum DialogType {
actionDialogView,
nomorTelponDialogView,
}
void setupDialogUi() {
final dialogService = locator<DialogService>();
final Map<DialogType, DialogBuilder> builders = {
DialogType.actionDialogView: (context, request, completer) =>
ActionDialogView(
request: request as DialogRequest<IstilahModel>,
completer: completer),
DialogType.nomorTelponDialogView: (context, request, completer) =>
NomorTelponDialogView(request: request, completer: completer),
};
dialogService.registerCustomDialogBuilders(builders);
}

41
lib/app/app.locator.dart Normal file
View File

@ -0,0 +1,41 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedLocatorGenerator
// **************************************************************************
// ignore_for_file: public_member_api_docs, implementation_imports, depend_on_referenced_packages
import 'package:stacked_services/src/bottom_sheet/bottom_sheet_service.dart';
import 'package:stacked_services/src/dialog/dialog_service.dart';
import 'package:stacked_services/src/navigation/navigation_service.dart';
import 'package:stacked_services/src/snackbar/snackbar_service.dart';
import 'package:stacked_shared/stacked_shared.dart';
import '../services/global_var.dart';
import '../services/my_easyloading.dart';
import '../services/my_storage.dart';
import '../services/my_tts.dart';
import '../services/other_function.dart';
final locator = StackedLocator.instance;
Future<void> setupLocator({
String? environment,
EnvironmentFilter? environmentFilter,
}) async {
// Register environments
locator.registerEnvironment(
environment: environment, environmentFilter: environmentFilter);
// Register dependencies
locator.registerLazySingleton(() => NavigationService());
locator.registerLazySingleton(() => DialogService());
locator.registerLazySingleton(() => SnackbarService());
locator.registerLazySingleton(() => BottomSheetService());
locator.registerLazySingleton(() => MyEasyLoading());
locator.registerLazySingleton(() => GlobalVar());
locator.registerLazySingleton(() => MyFunction());
locator.registerLazySingleton(() => MyTts());
locator.registerLazySingleton(() => MyStorage());
}

159
lib/app/app.logger.dart Normal file
View File

@ -0,0 +1,159 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedLoggerGenerator
// **************************************************************************
// ignore_for_file: avoid_print, depend_on_referenced_packages
/// Maybe this should be generated for the user as well?
///
/// import 'package:customer_app/services/stackdriver/stackdriver_service.dart';
import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';
class SimpleLogPrinter extends LogPrinter {
final String className;
final bool printCallingFunctionName;
final bool printCallStack;
final List<String> exludeLogsFromClasses;
final String? showOnlyClass;
SimpleLogPrinter(
this.className, {
this.printCallingFunctionName = true,
this.printCallStack = false,
this.exludeLogsFromClasses = const [],
this.showOnlyClass,
});
@override
List<String> log(LogEvent event) {
var color = PrettyPrinter.levelColors[event.level];
var emoji = PrettyPrinter.levelEmojis[event.level];
var methodName = _getMethodName();
var methodNameSection =
printCallingFunctionName && methodName != null ? ' | $methodName' : '';
var stackLog = event.stackTrace.toString();
var output =
'$emoji $className$methodNameSection - ${event.message}${event.error != null ? '\nERROR: ${event.error}\n' : ''}${printCallStack ? '\nSTACKTRACE:\n$stackLog' : ''}';
if (exludeLogsFromClasses
.any((excludeClass) => className == excludeClass) ||
(showOnlyClass != null && className != showOnlyClass)) return [];
final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
List<String> result = [];
for (var line in output.split('\n')) {
result.addAll(pattern.allMatches(line).map((match) {
if (kReleaseMode) {
return match.group(0)!;
} else {
return color!(match.group(0)!);
}
}));
}
return result;
}
String? _getMethodName() {
try {
final currentStack = StackTrace.current;
final formattedStacktrace = _formatStackTrace(currentStack, 3);
if (kIsWeb) {
final classNameParts = _splitClassNameWords(className);
return _findMostMatchedTrace(formattedStacktrace!, classNameParts)
.split(' ')
.last;
} else {
final realFirstLine = formattedStacktrace
?.firstWhere((line) => line.contains(className), orElse: () => "");
final methodName = realFirstLine?.replaceAll('$className.', '');
return methodName;
}
} catch (e) {
// There's no deliberate function call from our code so we return null;
return null;
}
}
List<String> _splitClassNameWords(String className) {
return className
.split(RegExp(r'(?=[A-Z])'))
.map((e) => e.toLowerCase())
.toList();
}
/// When the faulty word exists in the begging this method will not be very usefull
String _findMostMatchedTrace(
List<String> stackTraces, List<String> keyWords) {
String match = stackTraces.firstWhere(
(trace) => _doesTraceContainsAllKeywords(trace, keyWords),
orElse: () => '');
if (match.isEmpty) {
match = _findMostMatchedTrace(
stackTraces, keyWords.sublist(0, keyWords.length - 1));
}
return match;
}
bool _doesTraceContainsAllKeywords(String stackTrace, List<String> keywords) {
final formattedKeywordsAsRegex = RegExp(keywords.join('.*'));
return stackTrace.contains(formattedKeywordsAsRegex);
}
}
final stackTraceRegex = RegExp(r'#[0-9]+[\s]+(.+) \(([^\s]+)\)');
List<String>? _formatStackTrace(StackTrace stackTrace, int methodCount) {
var lines = stackTrace.toString().split('\n');
var formatted = <String>[];
var count = 0;
for (var line in lines) {
var match = stackTraceRegex.matchAsPrefix(line);
if (match != null) {
if (match.group(2)!.startsWith('package:logger')) {
continue;
}
var newLine = ("${match.group(1)}");
formatted.add(newLine.replaceAll('<anonymous closure>', '()'));
if (++count == methodCount) {
break;
}
} else {
formatted.add(line);
}
}
if (formatted.isEmpty) {
return null;
} else {
return formatted;
}
}
Logger getLogger(
String className, {
bool printCallingFunctionName = true,
bool printCallstack = false,
List<String> exludeLogsFromClasses = const [],
String? showOnlyClass,
}) {
return Logger(
printer: SimpleLogPrinter(
className,
printCallingFunctionName: printCallingFunctionName,
printCallStack: printCallstack,
showOnlyClass: showOnlyClass,
exludeLogsFromClasses: exludeLogsFromClasses,
),
output: MultiOutput([
if (!kReleaseMode) ConsoleOutput(),
]),
);
}

227
lib/app/app.router.dart Normal file
View File

@ -0,0 +1,227 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// StackedNavigatorGenerator
// **************************************************************************
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:flutter/material.dart' as _i4;
import 'package:flutter/material.dart';
import 'package:kamus_kesehatan/ui/views/splash_screen/splash_screen_view.dart'
as _i2;
import 'package:kamus_kesehatan/ui/views/user_tracking_index/list_kamus_kesehatan/list_kamus_kesehatan_view.dart'
as _i5;
import 'package:kamus_kesehatan/ui/views/user_tracking_index/profil_user/profil_user_view.dart'
as _i6;
import 'package:kamus_kesehatan/ui/views/user_tracking_index/user_tracking_index_view.dart'
as _i3;
import 'package:stacked/stacked.dart' as _i1;
import 'package:stacked_services/stacked_services.dart' as _i7;
class Routes {
static const splashScreenView = '/';
static const userTrackingIndexView = '/user-tracking-index-view';
static const all = <String>{
splashScreenView,
userTrackingIndexView,
};
}
class StackedRouter extends _i1.RouterBase {
final _routes = <_i1.RouteDef>[
_i1.RouteDef(
Routes.splashScreenView,
page: _i2.SplashScreenView,
),
_i1.RouteDef(
Routes.userTrackingIndexView,
page: _i3.UserTrackingIndexView,
),
];
final _pagesMap = <Type, _i1.StackedRouteFactory>{
_i2.SplashScreenView: (data) {
return _i4.MaterialPageRoute<dynamic>(
builder: (context) => const _i2.SplashScreenView(),
settings: data,
);
},
_i3.UserTrackingIndexView: (data) {
return _i4.MaterialPageRoute<dynamic>(
builder: (context) => const _i3.UserTrackingIndexView(),
settings: data,
);
},
};
@override
List<_i1.RouteDef> get routes => _routes;
@override
Map<Type, _i1.StackedRouteFactory> get pagesMap => _pagesMap;
}
class UserTrackingIndexViewRoutes {
static const listKamusKesehatanView = 'list-kamus-kesehatan-view';
static const profilUserView = 'profil-user-view';
static const all = <String>{
listKamusKesehatanView,
profilUserView,
};
}
class UserTrackingIndexViewRouter extends _i1.RouterBase {
final _routes = <_i1.RouteDef>[
_i1.RouteDef(
UserTrackingIndexViewRoutes.listKamusKesehatanView,
page: _i5.ListKamusKesehatanView,
),
_i1.RouteDef(
UserTrackingIndexViewRoutes.profilUserView,
page: _i6.ProfilUserView,
),
];
final _pagesMap = <Type, _i1.StackedRouteFactory>{
_i5.ListKamusKesehatanView: (data) {
return _i4.MaterialPageRoute<dynamic>(
builder: (context) => const _i5.ListKamusKesehatanView(),
settings: data,
);
},
_i6.ProfilUserView: (data) {
return _i4.MaterialPageRoute<dynamic>(
builder: (context) => const _i6.ProfilUserView(),
settings: data,
);
},
};
@override
List<_i1.RouteDef> get routes => _routes;
@override
Map<Type, _i1.StackedRouteFactory> get pagesMap => _pagesMap;
}
extension NavigatorStateExtension on _i7.NavigationService {
Future<dynamic> navigateToSplashScreenView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(Routes.splashScreenView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToUserTrackingIndexView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(Routes.userTrackingIndexView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic>
navigateToNestedListKamusKesehatanViewInUserTrackingIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(
UserTrackingIndexViewRoutes.listKamusKesehatanView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> navigateToNestedProfilUserViewInUserTrackingIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(UserTrackingIndexViewRoutes.profilUserView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithSplashScreenView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(Routes.splashScreenView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithUserTrackingIndexView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(Routes.userTrackingIndexView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic>
replaceWithNestedListKamusKesehatanViewInUserTrackingIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(
UserTrackingIndexViewRoutes.listKamusKesehatanView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithNestedProfilUserViewInUserTrackingIndexViewRouter([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(UserTrackingIndexViewRoutes.profilUserView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
}

View File

@ -0,0 +1,22 @@
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import '../../services/global_var.dart';
import '../../services/my_easyloading.dart';
import '../../services/other_function.dart';
import '../app.locator.dart';
class CustomBaseViewModel extends BaseViewModel {
final dialogService = locator<DialogService>();
final navigationService = locator<NavigationService>();
final bottomSheetService = locator<BottomSheetService>();
final snackbarService = locator<SnackbarService>();
// below is mine
final easyLoading = locator<MyEasyLoading>();
final globalVar = locator<GlobalVar>();
final myFunction = locator<MyFunction>();
void back() {
navigationService.back();
}
}

30
lib/app/themes/app_colors.dart Executable file
View File

@ -0,0 +1,30 @@
import 'dart:ui';
const Color mainColor = Color(0xFF25C0F1);
const Color secondaryColor = Color(0xFFB72025);
const Color dangerColor = Color(0xFFFF4B68);
const Color warningColor = Color(0xFFFBFFA3);
const Color lightColor = Color(0xFFF4FAFE);
const Color lightGreyColor = Color(0xFFFCFCFC);
const Color stockColor = Color(0xFFEEF3F6);
const Color backgroundColor = Color(0xFFE5E5E5);
const Color backgroundColor3 = Color(0xFFF6F7F8);
const Color orangeColor = Color.fromARGB(255, 250, 145, 84);
const Color blueColor = Color(0xFF026AA2);
const Color greenColor = Color(0xFF2ABB52);
const Color redColor = Color(0xFFED1717);
const Color greyBlueColor = Color(0xFF363F72);
const Color fontColor = Color(0xFF101828);
const Color fontSecondaryColor = Color(0xFF667085);
const Color fontParagraphColor = Color(0xFFB2B2B2);
const Color fontGrey = Color(0xFF1C1C1C);
const Color mainGrey = Color(0xFF8991A4);
const Color secondaryGrey = Color(0xFFD0D5DD);
const Color thirdGrey = Color(0xFFF2F4F7);
const Color fourthGrey = Color(0xFF5C5C5C);
const Color fifthGrey = Color(0xFFEBEBEB);
const Color sixthGrey = Color(0xFF151515);

View File

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'app_colors.dart';
const regularTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w400,
color: fontColor);
const italicTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
color: fontColor,
fontStyle: FontStyle.italic,
);
const mediumTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w500,
color: fontColor,
);
const semiBoldTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w600,
color: fontColor,
);
const boldTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w700,
color: fontColor,
);
const extraBoldTextStyle = TextStyle(
fontFamily: 'Arial',
fontSize: 14,
fontWeight: FontWeight.w800,
color: fontColor,
);

126
lib/app/themes/app_theme.dart Executable file
View File

@ -0,0 +1,126 @@
// ignore_for_file: deprecated_member_use
import 'package:flutter/material.dart';
import 'app_colors.dart';
import 'app_text.dart';
ThemeData appTheme = ThemeData(
useMaterial3: true,
primaryColor: mainColor,
scaffoldBackgroundColor: Colors.white,
canvasColor: Colors.white,
fontFamily: 'Poppins',
appBarTheme: AppBarTheme(
elevation: 0,
titleTextStyle: boldTextStyle.copyWith(fontSize: 16, color: fontGrey),
centerTitle: true,
),
textTheme: TextTheme(
headline1: regularTextStyle.copyWith(fontSize: 32),
headline2: regularTextStyle.copyWith(fontSize: 20),
headline3: regularTextStyle.copyWith(fontSize: 18),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: mainColor,
foregroundColor: Colors.white,
disabledBackgroundColor: mainColor.withOpacity(.3),
minimumSize: const Size(double.maxFinite, 58),
textStyle: boldTextStyle,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
shadowColor: Colors.transparent,
elevation: 0,
),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
textStyle: boldTextStyle,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
side: const BorderSide(
color: mainColor,
width: 1,
),
foregroundColor: mainColor,
// disabledForegroundColor: mainColor.withOpacity(.3),
minimumSize: const Size(double.maxFinite, 58),
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
foregroundColor: mainColor,
disabledForegroundColor: mainColor.withOpacity(.3),
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
textStyle: semiBoldTextStyle,
shadowColor: Colors.transparent,
),
),
iconTheme: const IconThemeData(
color: mainColor,
),
listTileTheme: ListTileThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
checkboxTheme: CheckboxThemeData(
fillColor: MaterialStateProperty.all(mainColor),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
),
side: const BorderSide(
color: secondaryGrey,
width: 1,
),
),
radioTheme: RadioThemeData(
fillColor: MaterialStateProperty.all(mainColor),
),
tabBarTheme: TabBarTheme(
labelColor: mainColor,
unselectedLabelColor: secondaryGrey,
labelStyle: boldTextStyle.copyWith(fontSize: 16),
unselectedLabelStyle: mediumTextStyle.copyWith(fontSize: 16),
),
chipTheme: ChipThemeData(
backgroundColor: Colors.white,
disabledColor: Colors.white,
selectedColor: Colors.white,
secondarySelectedColor: Colors.white,
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
side: const BorderSide(color: fifthGrey),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
labelStyle: regularTextStyle.copyWith(fontSize: 12, color: fontGrey),
secondaryLabelStyle:
regularTextStyle.copyWith(fontSize: 12, color: secondaryColor),
deleteIconColor: fontGrey,
showCheckmark: false,
),
popupMenuTheme: PopupMenuThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
side: const BorderSide(
color: fifthGrey,
width: 1,
),
),
),
colorScheme: const ColorScheme.light(
primary: mainColor,
secondary: secondaryColor,
onPrimary: Colors.white,
onSecondary: Colors.white,
error: dangerColor,
onError: dangerColor,
background: backgroundColor,
).copyWith(background: Colors.white),
);

40
lib/main.dart Normal file
View File

@ -0,0 +1,40 @@
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:kamus_kesehatan/services/my_storage.dart';
import 'package:stacked_services/stacked_services.dart';
import 'app/app.dialogs.dart';
import 'app/app.locator.dart';
import 'app/app.router.dart';
import 'app/themes/app_theme.dart';
Future main() async {
await setupAllLocator();
await MyStorage().init();
// await MyTts().init();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Cek Suara Caleg',
theme: appTheme,
debugShowCheckedModeBanner: false,
navigatorKey: StackedService.navigatorKey,
onGenerateRoute: StackedRouter().onGenerateRoute,
builder: EasyLoading.init(),
);
}
}
Future<void> setupAllLocator() async {
await setupLocator();
setupDialogUi();
// setupBottomSheetUi();
// setupSnackbarUi();
}

View File

@ -0,0 +1,18 @@
class IstilahModel {
String? istilah;
String? arti;
IstilahModel({this.istilah, this.arti});
IstilahModel.fromJson(Map<String, dynamic> json) {
istilah = json['istilah'];
arti = json['arti'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['istilah'] = istilah;
data['arti'] = arti;
return data;
}
}

View File

@ -0,0 +1,3 @@
class GlobalVar {
String backPressed = 'backNormal';
}

View File

@ -0,0 +1,39 @@
import 'package:flutter_easyloading/flutter_easyloading.dart';
class MyEasyLoading {
showLoading() {
EasyLoading.show(
status: 'loading...',
maskType: EasyLoadingMaskType.black,
dismissOnTap: false,
);
}
dismissLoading() {
EasyLoading.dismiss();
}
customLoading(String message) {
EasyLoading.show(
status: message,
maskType: EasyLoadingMaskType.black,
dismissOnTap: false,
);
}
showSuccess(String message) {
EasyLoading.showSuccess(message);
}
showError(String message) {
EasyLoading.showError(message);
}
showInfo(String message) {
EasyLoading.showInfo(message);
}
showProgress(double progress, String status) {
EasyLoading.showProgress(progress, status: status);
}
}

View File

@ -0,0 +1,25 @@
import 'package:get_storage/get_storage.dart';
class MyStorage {
final box = GetStorage();
init() async {
await GetStorage.init();
}
write(String key, dynamic value) async {
await box.write(key, value);
}
read(String key) {
return box.read(key);
}
remove(String key) async {
await box.remove(key);
}
clear() async {
await box.erase();
}
}

115
lib/services/my_tts.dart Normal file
View File

@ -0,0 +1,115 @@
import 'dart:io' show Platform;
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter_tts/flutter_tts.dart';
import '../app/app.logger.dart';
enum TtsState { playing, stopped, paused, continued }
// create a singleton class of MyTts which have init() method
class MyTts {
final log = getLogger('MyTts');
late FlutterTts flutterTts;
TtsState ttsState = TtsState.stopped;
bool get isAndroid => !kIsWeb && Platform.isAndroid;
Future init() async {
flutterTts = FlutterTts();
_setAwaitOptions();
if (isAndroid) {
await getVoices();
await _getLanguages();
await _getEngines();
await _getDefaultVoice();
await _setLanguage();
// male voice
// await flutterTts.setVoice({"name": "id-id-x-dfz#male_2-local"});
}
flutterTts.setStartHandler(() {
log.i("Playing");
ttsState = TtsState.playing;
});
flutterTts.setCompletionHandler(() {
log.i("Complete");
ttsState = TtsState.stopped;
});
flutterTts.setCancelHandler(() {
log.i("Cancel");
ttsState = TtsState.stopped;
});
flutterTts.setPauseHandler(() {
log.i("Paused");
ttsState = TtsState.paused;
});
flutterTts.setContinueHandler(() {
log.i("Continued");
ttsState = TtsState.continued;
});
flutterTts.setErrorHandler((msg) {
log.e("error: $msg");
ttsState = TtsState.stopped;
});
}
Future<dynamic> _getLanguages() async => await flutterTts.getLanguages;
Future<dynamic> _getEngines() async => await flutterTts.getEngines;
Future<dynamic> getVoices() async => await flutterTts.getVoices;
Future<dynamic> _setLanguage() async => await flutterTts.setLanguage("id-ID");
// Future setVoice() async {
// for (var voice in await flutterTts.getVoices) {
// if (voice.
// }
// }
Future _getDefaultVoice() async {
var voice = await flutterTts.getDefaultVoice;
if (voice != null) {
log.i(voice);
}
}
Future speak(String text) async {
await flutterTts.setVolume(1.0);
await flutterTts.setSpeechRate(0.5);
await flutterTts.setPitch(1.0);
if (text.isNotEmpty) {
var result = await flutterTts.speak(text);
if (result == 1) {
ttsState = TtsState.playing;
}
}
}
Future _setAwaitOptions() async {
await flutterTts.awaitSpeakCompletion(true);
}
Future stop() async {
var result = await flutterTts.stop();
if (result == 1) {
ttsState = TtsState.stopped;
}
}
Future pause() async {
var result = await flutterTts.pause();
if (result == 1) {
ttsState = TtsState.paused;
}
}
}

View File

@ -0,0 +1,16 @@
import 'package:intl/intl.dart';
class MyFunction {
String convertDateTime(String input) {
DateTime dateTime = DateTime.parse(input);
String formattedDateTime =
DateFormat('dd-MM-yyyy | hh.mm.ss a').format(dateTime);
return formattedDateTime;
}
// chnage | to \n in string
String convertDateTime2(String input) {
input = input.replaceAll('| ', '\n');
return input;
}
}

View File

@ -0,0 +1,63 @@
import 'package:flutter/material.dart';
import 'package:kamus_kesehatan/model/istilah_model.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import './action_dialog_view_model.dart';
class ActionDialogView extends StatelessWidget {
final DialogRequest<IstilahModel> request;
final Function(DialogResponse) completer;
const ActionDialogView({
Key? key,
required this.request,
required this.completer,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ViewModelBuilder<ActionDialogViewModel>.reactive(
viewModelBuilder: () => ActionDialogViewModel(),
onViewModelReady: (ActionDialogViewModel model) async {
await model.init(request.data);
},
builder: (
BuildContext context,
ActionDialogViewModel model,
Widget? child,
) {
return Dialog(
child: Container(
padding: const EdgeInsets.all(20),
// create a row with 2 circle icon , 1 is whataspp icon, 2 is bookmark, no need text
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
CircleAvatar(
backgroundColor: Colors.green,
child: IconButton(
icon: const Icon(Icons.phone),
onPressed: () {
// completer(DialogResponse(confirmed: true));
model.openWhatsapp();
},
),
),
CircleAvatar(
backgroundColor: Colors.blue,
child: IconButton(
icon: const Icon(Icons.bookmark),
onPressed: () {
model.addBookmark(request.data!);
},
),
),
],
),
),
);
},
);
}
}

View File

@ -0,0 +1,90 @@
import '../../../app/app.dialogs.dart';
import '../../../app/app.locator.dart';
import '../../../app/app.logger.dart';
import '../../../app/core/custom_base_view_model.dart';
import '../../../model/istilah_model.dart';
import '../../../services/my_storage.dart';
class ActionDialogViewModel extends CustomBaseViewModel {
final log = getLogger('ActionDialogViewModel');
final myStorage = locator<MyStorage>();
IstilahModel? data;
Future<void> init(IstilahModel? data) async {
// log.i('init');
// log.i(data!.istilah.toString());
// log.i(data.arti.toString());
this.data = data;
// await myStorage.clear();
}
addBookmark(IstilahModel istilahModel) async {
List<dynamic>? listBookmark;
listBookmark = await myStorage.read('listBookmark');
listBookmark ??= [];
log.i('ini panjang listBookmark ${listBookmark.length}');
log.i('ini listBookmark $listBookmark');
// check if istilahModel is already in listBookmark
bool isExist = false;
for (var item in listBookmark) {
if (item['istilah'] == istilahModel.istilah) {
isExist = true;
break;
}
}
if (isExist) {
snackbarService.showSnackbar(
message: 'Bookmark sudah ada',
duration: const Duration(seconds: 2),
);
return;
}
listBookmark.add({
'istilah': istilahModel.istilah,
'arti': istilahModel.arti,
});
await myStorage.write('listBookmark', listBookmark);
snackbarService.showSnackbar(
message: 'Berhasil menambahkan bookmark',
duration: const Duration(seconds: 2),
);
// // check if istilahModel is already in listBookmark
// bool isExist = false;
// for (var item in listBookmark) {
// if (item.istilah == istilahModel.istilah) {
// isExist = true;
// break;
// }
// }
// if (!isExist) {
// listBookmark.add(istilahModel);
// await myStorage.write('listBookmark', listBookmark);
// snackbarService.showSnackbar(
// message: 'Berhasil menambahkan bookmark',
// duration: const Duration(seconds: 2),
// );
// } else {
// snackbarService.showSnackbar(
// message: 'Bookmark sudah ada',
// duration: const Duration(seconds: 2),
// );
// }
}
openWhatsapp() async {
await dialogService.showCustomDialog(
variant: DialogType.nomorTelponDialogView,
data: data,
);
}
}

View File

@ -0,0 +1,82 @@
import 'package:flutter/material.dart';
import 'package:kamus_kesehatan/ui/widgets/my_textformfield.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:validatorless/validatorless.dart';
import './nomor_telpon_dialog_view_model.dart';
class NomorTelponDialogView extends StatelessWidget {
final DialogRequest? request;
final Function(DialogResponse)? completer;
const NomorTelponDialogView({
Key? key,
this.request,
this.completer,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ViewModelBuilder<NomorTelponDialogViewModel>.reactive(
viewModelBuilder: () => NomorTelponDialogViewModel(),
onViewModelReady: (NomorTelponDialogViewModel model) async {
await model.init(request!.data);
},
builder: (
BuildContext context,
NomorTelponDialogViewModel model,
Widget? child,
) {
return Dialog(
child: Container(
padding: const EdgeInsets.all(20),
child: Form(
key: model.formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
MyTextFormField(
controller: model.nomorTelponController,
hintText: 'Nomor Telpon',
keyboardType: TextInputType.phone,
maxLength: 13,
validator: Validatorless.multiple([
Validatorless.required(
'Nomor Telpon tidak boleh kosong'),
Validatorless.number('Nomor Telpon harus angka'),
Validatorless.min(10, 'Nomor Telpon minimal 10 digit'),
Validatorless.regex(
RegExp(r'^[0-9]*$'), 'Nomor Telpon tidak valid')
])),
const SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () =>
completer!(DialogResponse(confirmed: false)),
child: const Text(
'Batal',
style: TextStyle(color: Colors.red),
),
),
TextButton(
onPressed: () {
if (model.formKey.currentState!.validate()) {
model.openWhatsapp();
}
},
child: const Text('Share'),
),
],
),
],
),
),
),
);
},
);
}
}

View File

@ -0,0 +1,38 @@
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../../app/app.logger.dart';
import '../../../app/core/custom_base_view_model.dart';
import '../../../model/istilah_model.dart';
class NomorTelponDialogViewModel extends CustomBaseViewModel {
final log = getLogger('NomorTelponDialogViewModel');
TextEditingController nomorTelponController = TextEditingController();
final formKey = GlobalKey<FormState>();
IstilahModel? data;
Future<void> init(IstilahModel data) async {
log.i('init');
log.i(data.istilah.toString());
log.i(data.arti.toString());
this.data = data;
// await myStorage.clear();
}
openWhatsapp() async {
// open whatsapp using url
String noTelpon = nomorTelponController.text;
// convert the number to international format
noTelpon = noTelpon.replaceAll(RegExp(r'[^0-9]'), '');
noTelpon = '62${noTelpon.substring(1)}';
log.i('no_telpon: $noTelpon');
// add the data to url with query parameter
final url = Uri.parse('https://wa.me/$noTelpon?text=Kamus Medis : \n'
'Istilah : ${data!.istilah}\n'
'Arti : ${data!.arti}');
if (!await launchUrl(url)) {
throw Exception('Could not launch $url');
}
}
}

View File

@ -0,0 +1,94 @@
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import '../../../app/themes/app_text.dart';
import './splash_screen_view_model.dart';
class SplashScreenView extends StatelessWidget {
const SplashScreenView({super.key});
@override
Widget build(BuildContext context) {
return ViewModelBuilder<SplashScreenViewModel>.nonReactive(
viewModelBuilder: () => SplashScreenViewModel(),
onViewModelReady: (SplashScreenViewModel model) async {
await model.init();
},
builder: (
BuildContext context,
SplashScreenViewModel model,
Widget? child,
) {
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
// backgroundColor: warningColor,
body: SafeArea(
child: Center(
child: Column(
children: [
const Expanded(
flex: 1,
child: SizedBox(
height: 100,
),
),
Image.asset(
'assets/logo.png',
width: 200,
height: 200,
),
const SizedBox(
height: 10,
),
Text(
'KAMUS MEDIS DAN KESEHATAN',
style: boldTextStyle.copyWith(
// color: backgroundColor,
fontSize: 20,
),
textAlign: TextAlign.center,
),
// Text(
// '(Survei App)',
// style: boldTextStyle.copyWith(
// // color: backgroundColor,
// fontStyle: FontStyle.italic,
// ),
// textAlign: TextAlign.center,
// ),
const Expanded(child: SizedBox()),
Text(
'Created By',
style: regularTextStyle.copyWith(
fontSize: 12,
),
textAlign: TextAlign.center,
),
Text(
'Kicap Karan',
style: boldTextStyle.copyWith(
fontSize: 13,
fontStyle: FontStyle.italic,
),
textAlign: TextAlign.center,
),
Text(
'www.kicap-karan.com',
style: boldTextStyle.copyWith(
fontSize: 13,
),
),
const SizedBox(
height: 20,
)
],
),
),
),
),
);
},
);
}
}

View File

@ -0,0 +1,16 @@
import '../../../app/app.locator.dart';
import '../../../app/app.logger.dart';
import '../../../app/app.router.dart';
import '../../../app/core/custom_base_view_model.dart';
import '../../../services/my_tts.dart';
class SplashScreenViewModel extends CustomBaseViewModel {
final log = getLogger('SplashScreenViewModel');
final myTts = locator<MyTts>();
Future<void> init() async {
await myTts.init();
// await 3 seconds then go to login
// await Future.delayed(const Duration(seconds: 3));
await navigationService.navigateTo(Routes.userTrackingIndexView);
}
}

View File

@ -0,0 +1,86 @@
import 'package:flutter/material.dart';
import 'package:kamus_kesehatan/app/themes/app_text.dart';
import 'package:kamus_kesehatan/ui/widgets/my_textformfield.dart';
import 'package:stacked/stacked.dart';
import './list_kamus_kesehatan_view_model.dart';
class ListKamusKesehatanView extends StatelessWidget {
const ListKamusKesehatanView({super.key});
@override
Widget build(BuildContext context) {
return ViewModelBuilder<ListKamusKesehatanViewModel>.reactive(
viewModelBuilder: () => ListKamusKesehatanViewModel(),
onViewModelReady: (ListKamusKesehatanViewModel model) async {
await model.init();
},
builder: (
BuildContext context,
ListKamusKesehatanViewModel model,
Widget? child,
) {
return Padding(
padding: const EdgeInsets.all(25),
child: Column(
children: [
MyTextFormField(
hintText: 'Cari istilah',
labelText: 'Cari istilah',
controller: model.searchController,
suffixIcon: const Icon(Icons.search),
onChanged: (String value) {
model.searchIstilah();
},
),
const SizedBox(
height: 20,
),
Expanded(
child: model.listIstilah.isEmpty
? const Center(
child: CircularProgressIndicator(),
)
: ListView.builder(
itemCount: model.listIstilah.length,
itemBuilder: (
BuildContext context,
int index,
) {
return Card(
child: ListTile(
title: Text(
model.listIstilah[index].istilah!.toUpperCase(),
style: boldTextStyle,
),
subtitle: Text(model.listIstilah[index].arti!),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
GestureDetector(
onTap: () {
model.cekSuara(model.listIstilah[index]);
},
child: const Icon(Icons.volume_up),
),
IconButton(
onPressed: () {
model.bukaDialogAksi(
model.listIstilah[index]);
},
icon: const Icon(Icons.info),
),
],
),
),
);
},
),
),
],
),
);
},
);
}
}

View File

@ -0,0 +1,72 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
// import '../../../../app/app.dialogs.dart';
import '../../../../app/app.dialogs.dart';
import '../../../../app/app.locator.dart';
import '../../../../app/app.logger.dart';
import '../../../../app/core/custom_base_view_model.dart';
import '../../../../model/istilah_model.dart';
import '../../../../services/my_tts.dart';
class ListKamusKesehatanViewModel extends CustomBaseViewModel {
final log = getLogger('ListKamusKesehatanViewModel');
final myTts = locator<MyTts>();
TextEditingController searchController = TextEditingController();
List<IstilahModel> listIstilah = [];
List<IstilahModel> allListIstilah = [];
Future<void> init() async {
// await myTts.init();
// myTts.getVoices();
listIstilah = await rootBundle.loadString('assets/dataset.json').then(
(String data) {
final List<dynamic> jsonData = json.decode(data);
return jsonData.map((dynamic item) {
return IstilahModel.fromJson(item as Map<String, dynamic>);
}).toList();
},
);
allListIstilah = listIstilah;
notifyListeners();
}
cekSuara(IstilahModel listIstilah) {
myTts.stop();
// speak the listIstilah.istilah and wait 2 seconds then speak the listIstilah.arti
myTts.speak(listIstilah.istilah!);
Future.delayed(const Duration(seconds: 2), () {
myTts.speak(listIstilah.arti!);
});
}
searchIstilah() {
if (searchController.text.isEmpty) {
listIstilah = allListIstilah;
} else {
listIstilah = allListIstilah
.where((IstilahModel istilah) => istilah.istilah!
.toLowerCase()
.contains(searchController.text.toLowerCase()))
.toList();
}
notifyListeners();
}
bukaDialogAksi(IstilahModel listIstilah) async {
var res = await dialogService.showCustomDialog(
variant: DialogType.actionDialogView,
title: 'Form Aksi',
data: listIstilah,
);
if (res!.confirmed) {
log.i('confirmed');
// do something
}
}
}

View File

@ -0,0 +1,171 @@
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import '../../../../app/themes/app_colors.dart';
import '../../../../app/themes/app_text.dart';
import './profil_user_view_model.dart';
class ProfilUserView extends StatelessWidget {
const ProfilUserView({super.key});
@override
Widget build(BuildContext context) {
return ViewModelBuilder<ProfilUserViewModel>.reactive(
viewModelBuilder: () => ProfilUserViewModel(),
onViewModelReady: (ProfilUserViewModel model) async {
await model.init();
},
builder: (
BuildContext context,
ProfilUserViewModel model,
Widget? child,
) {
return Padding(
padding: const EdgeInsets.all(25),
child: Column(
children: [
// MyTextFormField(
// hintText: 'Cari istilah',
// labelText: 'Cari istilah',
// controller: model.searchController,
// suffixIcon: const Icon(Icons.search),
// onChanged: (String value) {
// model.searchIstilah();
// },
// ),
// const SizedBox(
// height: 20,
// ),
Expanded(
child: model.listIstilah == null
? const Center(
child: CircularProgressIndicator(),
)
: model.listIstilah!.isEmpty
? const Center(
child: Text('Belum ada bookmark'),
)
: ListView.builder(
itemCount: model.listIstilah!.length,
itemBuilder: (
BuildContext context,
int index,
) {
return Card(
child: ListTile(
onTap: () =>
model.cekSuara(model.listIstilah![index]),
title: Text(
model.listIstilah![index].istilah!
.toUpperCase(),
style: boldTextStyle,
),
subtitle:
Text(model.listIstilah![index].arti!),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
GestureDetector(
onTap: () {
// model.cekSuara(model.listIstilah[index]);
},
child: const Icon(Icons.phone),
),
IconButton(
onPressed: () {
// model.bukaDialogAksi(
// model.listIstilah[index]);
},
icon: const Icon(Icons.delete_forever),
),
],
),
),
);
},
),
),
],
),
);
// return const Scaffold(
// body: Padding(
// padding: EdgeInsets.all(30),
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisSize: MainAxisSize.min,
// children: [
// Center(
// child: CircleAvatar(
// radius: 65,
// backgroundColor: fontParagraphColor,
// child: Icon(
// Icons.person,
// size: 50,
// color: Colors.white,
// ),
// ),
// ),
// SizedBox(height: 20),
// _ChildWidget(
// icon: Icons.person,
// text: 'ini nama developer',
// ),
// SizedBox(height: 20),
// _ChildWidget(
// icon: Icons.list_alt,
// text: 'Kamus Medis Dan Kesehatan',
// ),
// SizedBox(height: 20),
// _ChildWidget(
// // icon multiple person
// icon: Icons.people,
// text: 'Pembimbing 1',
// ),
// SizedBox(height: 20),
// _ChildWidget(
// // icon multiple person
// icon: Icons.people,
// text: 'Pembimbing 2',
// ),
// ],
// ),
// ),
// );
},
);
}
}
// ignore: unused_element
class _ChildWidget extends StatelessWidget {
const _ChildWidget({
required this.icon,
required this.text,
});
final IconData icon;
final String text;
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(width: 30),
Icon(
icon,
size: 30,
color: mainColor,
),
const SizedBox(width: 40),
Text(
text,
style: regularTextStyle,
),
const Expanded(child: SizedBox(width: 30)),
],
);
}
}

View File

@ -0,0 +1,44 @@
import 'package:kamus_kesehatan/model/istilah_model.dart';
import '../../../../app/app.locator.dart';
import '../../../../app/app.logger.dart';
import '../../../../app/core/custom_base_view_model.dart';
import '../../../../services/my_storage.dart';
import '../../../../services/my_tts.dart';
class ProfilUserViewModel extends CustomBaseViewModel {
final log = getLogger('ProfilUserViewModel');
final myTts = locator<MyTts>();
final myStorage = locator<MyStorage>();
List<IstilahModel>? listIstilah;
List<IstilahModel>? allListIstilah;
Future<void> init() async {
List<dynamic>? listBookmark;
listBookmark = await myStorage.read('listBookmark');
listBookmark ??= [];
log.i('ini panjang listBookmark ${listBookmark.length}');
log.i('ini listBookmark $listBookmark');
listIstilah = listBookmark.map((dynamic item) {
return IstilahModel.fromJson(item as Map<String, dynamic>);
}).toList();
allListIstilah = listIstilah;
notifyListeners();
}
cekSuara(IstilahModel listIstilah) {
myTts.stop();
// speak the listIstilah.istilah and wait 2 seconds then speak the listIstilah.arti
myTts.speak(listIstilah.istilah!);
Future.delayed(const Duration(seconds: 2), () {
myTts.speak(listIstilah.arti!);
});
}
}

View File

@ -0,0 +1,94 @@
import 'package:flutter/material.dart';
import 'package:kamus_kesehatan/app/app.router.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:stylish_bottom_bar/model/bar_items.dart';
import 'package:stylish_bottom_bar/stylish_bottom_bar.dart';
import '../../../app/themes/app_colors.dart';
import '../../../app/themes/app_text.dart';
import './user_tracking_index_view_model.dart';
class UserTrackingIndexView extends StatelessWidget {
const UserTrackingIndexView({super.key});
@override
Widget build(BuildContext context) {
return ViewModelBuilder<UserTrackingIndexViewModel>.reactive(
viewModelBuilder: () => UserTrackingIndexViewModel(),
onViewModelReady: (UserTrackingIndexViewModel model) async {
await model.init();
},
builder: (
BuildContext context,
UserTrackingIndexViewModel model,
Widget? child,
) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
backgroundColor: mainColor,
title: Text(
model.header,
style: const TextStyle(
color: fontColor,
fontSize: 20,
),
),
elevation: 0,
automaticallyImplyLeading: false,
actions: [
IconButton(
onPressed: () {
model.exitApp();
},
icon: const Icon(Icons.logout, color: fontColor),
),
],
),
extendBody: false,
body: ExtendedNavigator(
router: UserTrackingIndexViewRouter(),
navigatorKey: StackedService.nestedNavigationKey(2),
initialRoute: UserTrackingIndexViewRoutes.listKamusKesehatanView,
),
bottomNavigationBar: StylishBottomBar(
items: [
for (var item in model.bottomNavBarList)
BottomBarItem(
icon: Icon(item['icon'],
color: model.currentIndex ==
model.bottomNavBarList.indexOf(item)
? mainColor
: fontColor),
title: Text(
item['name'],
style: regularTextStyle.copyWith(
color: model.currentIndex ==
model.bottomNavBarList.indexOf(item)
? mainColor
: fontColor,
),
// textAlign: TextAlign.l,
),
backgroundColor: model.currentIndex ==
model.bottomNavBarList.indexOf(item)
? fontColor
: fontColor,
),
],
currentIndex: model.currentIndex,
option: BubbleBarOptions(),
hasNotch: true,
backgroundColor: mainColor,
onTap: (value) {
model.handleNavigation(value);
},
// fabLocation: StylishBarFabLocation.center,
),
),
);
},
);
}
}

View File

@ -0,0 +1,72 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import '../../../app/app.locator.dart';
import '../../../app/app.logger.dart';
import '../../../app/app.router.dart';
import '../../../services/global_var.dart';
class UserTrackingIndexViewModel extends IndexTrackingViewModel {
final log = getLogger('UserTrackingIndexViewModel');
final globalVar = locator<GlobalVar>();
final navigationService = locator<NavigationService>();
final dialogService = locator<DialogService>();
final _bottomNavBarList = [
{
'name': 'List Kamus',
'icon': Icons.list_alt_outlined,
'header': 'List Kamus',
},
{
'name': 'Profil Developer',
'icon': Icons.person_outline_outlined,
'header': 'Profil Developer',
},
];
String header = 'List Kamus';
List<Map<String, dynamic>> get bottomNavBarList => _bottomNavBarList;
final List<String> _views = [
// UserTrackingIndexViewRoutes.tampilkanListView,
UserTrackingIndexViewRoutes.listKamusKesehatanView,
UserTrackingIndexViewRoutes.profilUserView,
];
Future<void> init() async {
// setIndex(0);
// handleNavigation(0);
}
void handleNavigation(int index) {
// log.d("handleNavigation: $index");
// log.d("currentIndex: $currentIndex");
if (currentIndex == index) return;
setIndex(index);
header = _bottomNavBarList[index]['header'] as String;
navigationService.navigateTo(
_views[index],
id: 2,
);
}
exitApp() async {
dialogService
.showConfirmationDialog(
title: 'Konfirmasi',
description: 'Apakah anda yakin ingin keluar?',
cancelTitle: 'Batal',
confirmationTitle: 'Keluar',
)
.then((value) async {
if (value!.confirmed) {
SystemNavigator.pop();
}
});
}
}

View File

@ -0,0 +1,38 @@
import 'package:flutter/material.dart';
import '../../app/themes/app_colors.dart';
class MyButton extends StatelessWidget {
const MyButton({
Key? key,
required this.text,
this.theBackgroundColor = mainColor,
this.textColor = backgroundColor,
this.onPressed,
}) : super(key: key);
final String text;
final VoidCallback? onPressed;
final Color theBackgroundColor;
final Color textColor;
@override
Widget build(BuildContext context) {
return ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: theBackgroundColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
onPressed: onPressed,
child: Text(
text,
style: TextStyle(
color: textColor,
fontSize: 18,
),
),
);
}
}

View File

@ -0,0 +1,88 @@
import 'package:flutter/material.dart';
import '../../app/themes/app_colors.dart';
class MyTextFormField extends StatelessWidget {
const MyTextFormField({
Key? key,
this.labelText,
this.hintText,
this.obscureText,
this.validator,
this.suffixIcon,
this.prefixIcon,
this.focusNode,
this.controller,
this.maxLines = 1,
this.onEditingComplete,
this.keyboardType = TextInputType.text,
this.initialValue,
this.readOnly = false,
this.maxLength,
this.onChanged,
}) : super(key: key);
final String? labelText;
final String? hintText;
final bool? obscureText;
final FormFieldValidator<String>? validator;
final Widget? suffixIcon;
final Widget? prefixIcon;
final FocusNode? focusNode;
final TextEditingController? controller;
final int maxLines;
final VoidCallback? onEditingComplete;
final TextInputType keyboardType;
final String? initialValue;
final bool readOnly;
final int? maxLength;
final void Function(String)? onChanged;
@override
Widget build(BuildContext context) {
return TextFormField(
onChanged: onChanged,
maxLength: maxLength,
readOnly: readOnly,
initialValue: initialValue,
onEditingComplete: onEditingComplete,
maxLines: maxLines,
controller: controller,
focusNode: focusNode,
obscureText: obscureText ?? false,
keyboardType: keyboardType,
decoration: InputDecoration(
prefixIcon: prefixIcon,
suffixIcon: suffixIcon,
enabledBorder: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(25)),
borderSide: BorderSide(
// color: mainColor,
),
),
focusedBorder: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(25)),
borderSide: BorderSide(
// color: mainColor,
),
),
focusedErrorBorder: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(25)),
borderSide: BorderSide(
color: dangerColor,
),
),
errorBorder: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(25)),
borderSide: BorderSide(
color: dangerColor,
),
),
labelText: labelText,
hintText: hintText,
labelStyle: const TextStyle(color: fontColor),
),
validator: validator,
);
}
}

View File

@ -0,0 +1,73 @@
import 'package:flutter/material.dart';
import '../../app/themes/app_colors.dart';
class TopContainer extends StatelessWidget {
const TopContainer({
super.key,
required this.title,
required this.value,
required this.icon,
required this.background,
});
final String title;
final String value;
final IconData icon;
final Color background;
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10),
width: double.infinity,
decoration: BoxDecoration(
color: background,
borderRadius: BorderRadius.circular(10),
),
child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 3,
child: Text(
title,
style: const TextStyle(
color: fontGrey,
fontSize: 20,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.justify,
),
),
const Expanded(
flex: 1,
child: Text(
':',
style: TextStyle(
color: fontGrey,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
Expanded(
flex: 5,
child: Text(
value,
style: const TextStyle(
color: fontGrey,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
Icon(
icon,
color: fontGrey,
),
],
),
);
}
}

1
linux/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
flutter/ephemeral

139
linux/CMakeLists.txt Normal file
View File

@ -0,0 +1,139 @@
# Project-level configuration.
cmake_minimum_required(VERSION 3.10)
project(runner LANGUAGES CXX)
# The name of the executable created for the application. Change this to change
# the on-disk name of your application.
set(BINARY_NAME "kamus_kesehatan")
# The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
set(APPLICATION_ID "com.example.kamus_kesehatan")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake.
cmake_policy(SET CMP0063 NEW)
# Load bundled libraries from the lib/ directory relative to the binary.
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
# Root filesystem for cross-building.
if(FLUTTER_TARGET_PLATFORM_SYSROOT)
set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endif()
# Define build configuration options.
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE "Debug" CACHE
STRING "Flutter build mode" FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Profile" "Release")
endif()
# Compilation settings that should be applied to most targets.
#
# Be cautious about adding new options here, as plugins use this function by
# default. In most cases, you should add new options to specific targets instead
# of modifying this function.
function(APPLY_STANDARD_SETTINGS TARGET)
target_compile_features(${TARGET} PUBLIC cxx_std_14)
target_compile_options(${TARGET} PRIVATE -Wall -Werror)
target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>")
target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>")
endfunction()
# Flutter library and tool build rules.
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
add_subdirectory(${FLUTTER_MANAGED_DIR})
# System-level dependencies.
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
# Define the application target. To change its name, change BINARY_NAME above,
# not the value here, or `flutter run` will no longer work.
#
# Any new source files that you add to the application should be added here.
add_executable(${BINARY_NAME}
"main.cc"
"my_application.cc"
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
)
# Apply the standard set of build settings. This can be removed for applications
# that need different build settings.
apply_standard_settings(${BINARY_NAME})
# Add dependency libraries. Add any application-specific dependencies here.
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
# Run the Flutter tool portions of the build. This must not be removed.
add_dependencies(${BINARY_NAME} flutter_assemble)
# Only the install-generated bundle's copy of the executable will launch
# correctly, since the resources must in the right relative locations. To avoid
# people trying to run the unbundled copy, put it in a subdirectory instead of
# the default top-level location.
set_target_properties(${BINARY_NAME}
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
)
# Generated plugin build rules, which manage building the plugins and adding
# them to the application.
include(flutter/generated_plugins.cmake)
# === Installation ===
# By default, "installing" just makes a relocatable bundle in the build
# directory.
set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
endif()
# Start with a clean build bundle directory every time.
install(CODE "
file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
" COMPONENT Runtime)
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
COMPONENT Runtime)
install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
COMPONENT Runtime)
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
install(FILES "${bundled_library}"
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endforeach(bundled_library)
# Fully re-copy the assets directory on each build to avoid having stale files
# from a previous install.
set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
install(CODE "
file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
" COMPONENT Runtime)
install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
# Install the AOT library on non-Debug builds only.
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endif()

View File

@ -0,0 +1,88 @@
# This file controls Flutter-level build steps. It should not be edited.
cmake_minimum_required(VERSION 3.10)
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
# Configuration provided via flutter tool.
include(${EPHEMERAL_DIR}/generated_config.cmake)
# TODO: Move the rest of this into files in ephemeral. See
# https://github.com/flutter/flutter/issues/57146.
# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
# which isn't available in 3.10.
function(list_prepend LIST_NAME PREFIX)
set(NEW_LIST "")
foreach(element ${${LIST_NAME}})
list(APPEND NEW_LIST "${PREFIX}${element}")
endforeach(element)
set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
endfunction()
# === Flutter Library ===
# System-level dependencies.
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
# Published to parent scope for install step.
set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
list(APPEND FLUTTER_LIBRARY_HEADERS
"fl_basic_message_channel.h"
"fl_binary_codec.h"
"fl_binary_messenger.h"
"fl_dart_project.h"
"fl_engine.h"
"fl_json_message_codec.h"
"fl_json_method_codec.h"
"fl_message_codec.h"
"fl_method_call.h"
"fl_method_channel.h"
"fl_method_codec.h"
"fl_method_response.h"
"fl_plugin_registrar.h"
"fl_plugin_registry.h"
"fl_standard_message_codec.h"
"fl_standard_method_codec.h"
"fl_string_codec.h"
"fl_value.h"
"fl_view.h"
"flutter_linux.h"
)
list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
add_library(flutter INTERFACE)
target_include_directories(flutter INTERFACE
"${EPHEMERAL_DIR}"
)
target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
target_link_libraries(flutter INTERFACE
PkgConfig::GTK
PkgConfig::GLIB
PkgConfig::GIO
)
add_dependencies(flutter flutter_assemble)
# === Flutter tool backend ===
# _phony_ is a non-existent file to force this command to run every time,
# since currently there's no way to get a full input/output list from the
# flutter tool.
add_custom_command(
OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
${CMAKE_CURRENT_BINARY_DIR}/_phony_
COMMAND ${CMAKE_COMMAND} -E env
${FLUTTER_TOOL_ENVIRONMENT}
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
VERBATIM
)
add_custom_target(flutter_assemble DEPENDS
"${FLUTTER_LIBRARY}"
${FLUTTER_LIBRARY_HEADERS}
)

View File

@ -0,0 +1,15 @@
//
// Generated file. Do not edit.
//
// clang-format off
#include "generated_plugin_registrant.h"
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
}

Some files were not shown because too many files have changed in this diff Show More