first commit
|
@ -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
|
|
@ -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'
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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 {}
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.example.kamus_kesehatan
|
||||||
|
|
||||||
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
|
||||||
|
class MainActivity: FlutterActivity() {
|
||||||
|
}
|
|
@ -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>
|
|
@ -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>
|
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 20 KiB |
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
org.gradle.jvmargs=-Xmx1536M
|
||||||
|
android.useAndroidX=true
|
||||||
|
android.enableJetifier=true
|
|
@ -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
|
|
@ -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"
|
|
@ -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"
|
||||||
|
}
|
||||||
|
]
|
After Width: | Height: | Size: 20 KiB |
|
@ -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
|
|
@ -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>
|
|
@ -0,0 +1,2 @@
|
||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||||
|
#include "Generated.xcconfig"
|
|
@ -0,0 +1,2 @@
|
||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||||
|
#include "Generated.xcconfig"
|
|
@ -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
|
|
@ -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 */;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "group:Runner.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 295 B |
After Width: | Height: | Size: 406 B |
After Width: | Height: | Size: 450 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 462 B |
After Width: | Height: | Size: 704 B |
After Width: | Height: | Size: 406 B |
After Width: | Height: | Size: 586 B |
After Width: | Height: | Size: 862 B |
After Width: | Height: | Size: 862 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 762 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 68 B |
After Width: | Height: | Size: 68 B |
After Width: | Height: | Size: 68 B |
|
@ -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.
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1 @@
|
||||||
|
#import "GeneratedPluginRegistrant.h"
|
|
@ -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.
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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 {}
|
|
@ -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);
|
||||||
|
}
|
|
@ -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());
|
||||||
|
}
|
|
@ -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(),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
|
@ -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,
|
||||||
|
);
|
|
@ -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),
|
||||||
|
);
|
|
@ -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();
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
class GlobalVar {
|
||||||
|
String backPressed = 'backNormal';
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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!);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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!);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
flutter/ephemeral
|
|
@ -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()
|
|
@ -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}
|
||||||
|
)
|
|
@ -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);
|
||||||
|
}
|