Initial commit

parents
Pipeline #386 failed with stages
# 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/
# Web related
lib/generated_plugin_registrant.dart
# 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
# 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.
version:
revision: 85684f9300908116a78138ea4c6036c35c9a1236
channel: stable
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: android
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: ios
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
# 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'
# multi_cloudv3
Multi Cloud Solution
## 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.
# 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
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
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
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 "eksad.com.multi_cloudv3"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion
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 {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eksad.com.multi_cloudv3">
<!-- 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>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eksad.com.multi_cloudv3">
<application
android:label="multi_cloudv3"
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>
package eksad.com.multi_cloudv3
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
<?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>
<?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>
<?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>
<?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>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eksad.com.multi_cloudv3">
<!-- 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>
buildscript {
ext.kotlin_version = '1.6.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
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')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
include ':app'
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
**/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
<?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>9.0</string>
</dict>
</plist>
#include "Generated.xcconfig"
#include "Generated.xcconfig"
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
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 */; };
/* End PBXBuildFile 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>"; };
/* 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>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
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 */
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 = {
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
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 */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
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;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
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;
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 */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase 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 = 9.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 = eksad.com.multiCloudv3;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
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 = 9.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 = 9.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 = eksad.com.multiCloudv3;
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 = eksad.com.multiCloudv3;
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 */
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 */;
}
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
<?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>
<?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>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
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>
</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>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
<?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>
<?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>
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)
}
}
{
"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"
}
}
{
"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"
}
}
# 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.
\ No newline at end of file
<?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>
<?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>
<?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>Multi Cloudv3</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>multi_cloudv3</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/>
</dict>
</plist>
#import "GeneratedPluginRegistrant.h"
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:show_up_animation/show_up_animation.dart';
class Animasi_Kanan_Kiri extends StatelessWidget {
const Animasi_Kanan_Kiri({Key? key, required this.judul}) : super(key: key);
final String judul;
@override
Widget build(BuildContext context) {
return ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.decelerate,
direction: Direction.horizontal,
child: Text(
judul,
style: GoogleFonts.robotoCondensed(
color: const Color(0xff1e5ea8),
fontSize: 20,
fontWeight: FontWeight.bold),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:show_up_animation/show_up_animation.dart';
class Animasi_Kiri_Kanan extends StatelessWidget {
const Animasi_Kiri_Kanan({
Key? key,
required this.screenSize,
required this.widget,
}) : super(key: key);
final Size screenSize;
final Widget widget;
@override
Widget build(BuildContext context) {
return ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.decelerate,
direction: Direction.horizontal,
offset: -0.3,
child: widget);
}
}
import 'dart:convert';
import 'package:file_picker/file_picker.dart';
import 'package:http/http.dart' as http;
Future<void> uploadFile() async {
FilePickerResult? result;
print('Picker file');
result = await FilePicker.platform
.pickFiles(allowMultiple: true, withReadStream: true, withData: false);
if (result != null) {
print(result.files.first.name);
//create
var req = http.MultipartRequest(
"POST", Uri.parse("http://10.107.72.92:8081/file"));
List<PlatformFile>? files = result.files;
if (files != null) {
print('Add file select with picker');
for (PlatformFile file in files) {
//add select with req
req.files.add(http.MultipartFile("file", file.readStream!, file.size,
filename: file.name));
}
}
// send request
var resp = await req.send();
//read response
String res = await resp.stream.bytesToString();
//your response
print(res);
}
}
Future<List<dynamic>> getFile(nm) async {
var response = await http.get(Uri.parse('http://10.107.72.92:8081/file/$nm'));
return jsonDecode(response.body)['data'];
}
Future<bool> delFile(id) async {
final response = await http
.delete(Uri.parse('http://10.107.72.92:8081/file/$id'), headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
// import 'package:http/http.dart' as http;
//
// class LoginApi{
// Future<bool> postLogin(mail, pwd) async {
// final response = await http.post(Uri.parse('http://10.107.250.246'),)
// }
// }
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<bool> createNews(title, news, image) async {
final response = await http.post(
Uri.parse('http://10.3.4.231:8081/post/savePost'),
body: jsonEncode({"title": title, "post": news, "image": image}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<bool> updateNews(id, title, news) async {
final response = await http.post(
Uri.parse('http://10.3.4.231:8081/post/savePost'),
body: jsonEncode({"idpost": id, "title": title, "post": news}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<List<dynamic>> getNews() async {
var response = await http
.get(Uri.parse('http://10.3.4.231:8082/post/getAllPostByIdRole'));
return jsonDecode(response.body)['data'];
}
Future<bool> deleteNews(id) async {
final response = await http.delete(
Uri.parse('http://10.3.4.231:8081/post/deletePost/$id'),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<List<dynamic>> getPage() async {
var response = await http
.get(Uri.parse('http://10.107.217.11:8082/page/getAllPageByIdRole'));
return jsonDecode(response.body)['data'];
}
Future<bool> createPage(name, page) async {
final response = await http.post(
Uri.parse('http://10.107.217.11:8081/page/savePage'),
body: jsonEncode({"title": name, "page": page}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<bool> updatePage(id, name, page) async {
final response = await http.post(
Uri.parse('http://10.107.217.11:8081/page/savePage'),
body: jsonEncode({"idpage": id, "title": name, "page": page}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<bool> deletePage(id) async {
final response = await http.delete(
Uri.parse('http://10.107.217.11:8081/page/deletePage/$id'),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<bool> createPartner(image, name) async {
final response = await http.post(
Uri.parse('http://10.107.122.152:8081/partner/savePartner'),
body: jsonEncode({"filename": name, "filepath": image}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<bool> updatePartner(id, name, image) async {
final response = await http.put(
Uri.parse('http://10.107.122.152:8081/partner/savePartner'),
body:
jsonEncode({"idpartner": id, "file_name": name, "file_path": image}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<List<dynamic>> getPartner() async {
var response = await http.get(
Uri.parse('http://10.107.122.152:8082/partner/getAllPartnerByActive'));
return jsonDecode(response.body)['data'];
}
Future<bool> deletePartner(id) async {
final response = await http.delete(
Uri.parse('http://10.107.122.152:8081/partner/deletePartner/$id'),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<bool> createSetting(im, tt, tl, em, no) async {
final response = await http.post(
Uri.parse('http://10.107.133.115:8081/setting/saveSetting'),
body: jsonEncode(
{"image": im, "title": tt, "tagline": tl, "email": em, "no": no}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<bool> updateSetting(id, image, name, title, tagline, email, no) async {
final response = await http
.put(Uri.parse('http://10.107.133.115:8081/setting/updateSetting'),
body: jsonEncode({
"idsetting": id,
"image": image,
"name": name,
"title": title,
"tagline": tagline,
"email": email,
"no": no,
"idrole": "R001"
}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<List<dynamic>> getSetting() async {
var response = await http.get(
Uri.parse('http://10.107.133.115:8082/setting/getAllSettingByIdRole'));
return jsonDecode(response.body)['data'];
}
import 'package:flutter/material.dart';
const kPrimaryColor = Color.fromARGB(255, 0, 17, 255);
const kTextColor = Color.fromARGB(255, 26, 32, 107);
const kSecondColor = Color.fromARGB(255, 255, 67, 20);
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/screen/home.dart';
AppBar BarAtas(BuildContext context) {
return AppBar(
//backgroundColor: Color.fromARGB(200, 9, 47, 171),
backgroundColor: Colors.white,
leading: Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/logo/multicloudsolution.jpg'),
fit: BoxFit.fill),
),
),
leadingWidth: 200,
actions: [
Row(
children: [
//AlertForm(),
TextButton.icon(
onPressed: () {
Navigator.pushNamed(context, '/');
},
icon: const Icon(
Icons.remove_red_eye,
),
label: const Text(
'Site Online',
),
),
TextButton.icon(
onPressed: () {
Navigator.pushNamed(context, '/');
},
icon: const Icon(
Icons.output,
),
label: const Text(
'Logout',
style: TextStyle(),
),
),
IconButton(
onPressed: () {},
icon: const Icon(
Icons.person_pin,
color: Colors.blue,
),
iconSize: 40,
)
],
),
],
);
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/dashboard/side_menu.dart';
import 'package:multi_cloudv3/dashboard/appbar_dashboard.dart';
class Dashboard extends StatelessWidget {
const Dashboard({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: BarAtas(context),
body: const SideMenu(),
);
}
}
import 'package:flutter/material.dart';
class MainDashboard extends StatelessWidget {
const MainDashboard({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: const Text('Welcome to Dashboard Multi Cloud Solution'),
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/dashboard/dashboard.dart';
import 'package:multi_cloudv3/api/news_api.dart';
class NewsDashboard extends StatefulWidget {
const NewsDashboard({Key? key}) : super(key: key);
@override
State<NewsDashboard> createState() => _NewsDashboardState();
}
class _NewsDashboardState extends State<NewsDashboard> {
bool value = false;
bool value1 = false;
bool value2 = false;
bool value3 = false;
bool value4 = false;
final formKey = GlobalKey<FormState>();
String title = '';
String news = '';
String images = '';
int id = 0;
String selecttitle = '';
String selectnews = '';
int selectedIndex = 0;
TextEditingController _controllerTitle = TextEditingController();
TextEditingController _controllerNews = TextEditingController();
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
width: screenSize.width,
padding: const EdgeInsets.only(left: 100, right: 100),
color: const Color.fromRGBO(238, 224, 224, 1),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 100,
child: Row(
children: [
Container(
child: const Text("Post ",
style: TextStyle(
fontSize: 20,
)),
),
ElevatedButton(
onPressed: () {
showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
title: const Center(child: Text('Add News')),
content: Form(
key: formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
verticalDirection: VerticalDirection.down,
children: [
const SizedBox(
height: 20,
),
//IconButton(onPressed: (){}, icon: Icon(Icons.add_photo_alternate_outlined,size: 30,)),
Container(
width: 230,
child: TextFormField(
textAlign: TextAlign.start,
decoration: InputDecoration(
labelText: "Masukkan Code Image",
hintStyle: const TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(5.0)),
),
onChanged: (value) => images = value,
),
),
const SizedBox(
height: 30,
),
Container(
width: 230,
child: TextFormField(
textAlign: TextAlign.start,
decoration: InputDecoration(
labelText: "Masukkan Title",
hintStyle: const TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(5.0)),
),
onChanged: (value) => title = value,
),
),
const SizedBox(
height: 30,
),
Container(
width: 230,
child: TextFormField(
textAlign: TextAlign.start,
maxLines: 7,
decoration: InputDecoration(
labelText: "Masukkan Keterangan News",
hintStyle: const TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(5.0)),
),
onChanged: (value) => news = value,
),
),
],
),
),
actions: <Widget>[
TextButton(
onPressed: () {
if (title.trim().isEmpty &&
news == null &&
images == null) {
print('Title News Kosong');
} else if (news.trim().isEmpty &&
title == null &&
images == null) {
print('Isi News kosong');
} else if (images.trim().isEmpty &&
title == null &&
news == null) {
print('Images Kosong');
}
createNews(title, news, images);
print('Data Tersimpan');
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const Dashboard(),
),
);
},
child: const Text('Save'),
),
],
),
);
},
child: const Text('Add News')),
const SizedBox(
width: 20,
),
],
),
),
SizedBox(
height: 50,
child: Row(
children: [
TextButton(
style: TextButton.styleFrom(
primary: Colors.black,
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {},
child: const Text("3 Items"),
),
const Spacer(
flex: 2,
),
SizedBox(
height: 40,
width: 200,
child: TextFormField(
decoration: InputDecoration(
labelText: "Search",
prefixIcon: const Icon(Icons.search),
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(width: 1, color: Colors.blue),
borderRadius: BorderRadius.circular(5),
),
focusedBorder: OutlineInputBorder(
borderSide:
const BorderSide(width: 1, color: Colors.blue),
borderRadius: BorderRadius.circular(5),
),
),
),
),
const SizedBox(
width: 50,
),
ClipRRect(
borderRadius: BorderRadius.circular(3),
child: Stack(
children: <Widget>[
Positioned.fill(
child: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: <Color>[
Color(0xFF42A5F5),
Color(0xFF42A5F5),
],
),
),
),
),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.white,
backgroundColor: Colors.blue,
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {},
child: const Text("Search News"),
),
],
),
),
],
)),
const SizedBox(
height: 20,
),
Container(
height: screenSize.height * 0.65,
child: ListView(
children: [
FutureBuilder<List<dynamic>>(
future: getNews(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError ||
snapshot.data == null ||
snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator();
}
return DataTable(
decoration: const BoxDecoration(color: Colors.white),
columnSpacing: 80,
columns: const [
DataColumn(label: Text('Id')),
DataColumn(label: Text('Title')),
DataColumn(label: Text('News')),
DataColumn(label: Text('Images')),
DataColumn(label: Text('Status')),
DataColumn(label: Text('Action')),
],
rows: List.generate(
snapshot.data.length,
(index) {
var pgm = snapshot.data[index];
return DataRow(cells: [
DataCell(
Text(pgm['idpost'].toString()),
),
DataCell(
Text(pgm['title']),
),
DataCell(
Text(pgm['post']),
),
DataCell(
Text(pgm['image']),
),
DataCell(
Text(pgm['status']),
),
DataCell(
Row(
children: [
ElevatedButton(
// style: TextButton.styleFrom(
// padding: const EdgeInsets.all(16.0),
// primary: Colors.black,
// backgroundColor:
// Color.fromARGB(255, 22, 197, 197),
// textStyle: const TextStyle(fontSize: 15),
// ),
onPressed: () {
var pgm = snapshot.data[index];
selectedIndex = index;
id = pgm['idpost'];
selecttitle = pgm['title'];
selectnews = pgm['post'];
print(selectedIndex);
print(pgm['idpost']);
print(selecttitle);
_controllerNews.clear();
// _controllerId.clear();
_controllerTitle.clear();
showDialog<String>(
context: context,
builder: (BuildContext context) =>
AlertDialog(
title: const Center(
child: Text('Update News')),
content: Form(
key: formKey,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
verticalDirection:
VerticalDirection.down,
children: [
// Container(
// width: 200,
// child: TextFormField(
// controller: _controllerId,
// textAlign: TextAlign.start,
// decoration: InputDecoration(
// labelText: "Masukkan ID News",
// hintStyle: TextStyle(),
// border: OutlineInputBorder(
// borderRadius:
// BorderRadius
// .circular(5.0)),
// ),
//
// onChanged: (value) =>
// id = int.parse(value),
// ),
// ),
const SizedBox(
height: 10,
),
const Text(
'Data Harus di Edit*',
style: TextStyle(
fontSize: 13,
color: Colors.red),
),
const SizedBox(
height: 15,
),
Center(
child: Container(
width: 200,
child: TextFormField(
//controller: _controllerTitle,
textAlign:
TextAlign.start,
initialValue: selecttitle,
decoration:
InputDecoration(
labelText:
'Masukkan Title News Baru',
//labelStyle: TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius
.circular(
5.0)),
),
onChanged: (value) =>
title = value,
),
),
),
const SizedBox(
height: 40,
),
Center(
child: Container(
width: 200,
child: TextFormField(
//controller: _controllerNews,
textAlign:
TextAlign.start,
initialValue: selectnews,
maxLines: 7,
decoration:
InputDecoration(
labelText:
"Masukkan Keterangan Baru",
hintStyle:
const TextStyle(),
border:
OutlineInputBorder(
borderRadius:
BorderRadius
.circular(
5.0),
),
),
onChanged: (value) =>
news = value,
),
),
),
],
),
),
actions: <Widget>[
TextButton(
style: TextButton.styleFrom(
padding:
const EdgeInsets.all(16.0),
primary: Colors.black,
backgroundColor:
const Color.fromARGB(
255, 16, 199, 71),
textStyle: const TextStyle(
fontSize: 15),
),
onPressed: () {
Navigator.pop(context);
if (title.isEmpty &&
news.isEmpty) {
ScaffoldMessenger.of(context)
.showSnackBar(
const SnackBar(
content: Text(
'Data Must Be Edited')),
);
} else if (news.isEmpty) {
ScaffoldMessenger.of(context)
.showSnackBar(
const SnackBar(
content: Text(
'Content Must Be Edited')),
);
} else if (title.isEmpty) {
ScaffoldMessenger.of(context)
.showSnackBar(
const SnackBar(
content: Text(
'Name Must Be Edited')),
);
} else {
updateNews(id, title, news)
.then(
(isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(
this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Data success"),
),
);
} else {
Scaffold.of(
this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Data failed!!!"),
),
);
}
},
);
}
},
child: const Text('Update'),
),
],
),
);
},
child: const Text('Edit News'),
),
const SizedBox(
width: 10,
),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.white,
backgroundColor: const Color.fromARGB(
255, 245, 27, 27),
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text("Warning"),
content: Text(
"Are you sure want to delete data news ${pgm['title']}?"),
actions: <Widget>[
TextButton(
child: const Text("Yes"),
onPressed: () {
Navigator.pop(context);
deleteNews(pgm['idpost'])
.then((isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Delete data success")));
} else {
Scaffold.of(this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Delete data failed")));
}
});
},
),
TextButton(
child: const Text("No"),
onPressed: () {
Navigator.pop(context);
},
),
],
);
},
);
},
child: const Text("Delete"),
),
],
),
),
]);
},
).toList(),
);
},
),
],
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/api/partner_api.dart';
import 'package:multi_cloudv3/dashboard/dashboard.dart';
class OurpartnerDashboard extends StatefulWidget {
const OurpartnerDashboard({Key? key}) : super(key: key);
@override
State<OurpartnerDashboard> createState() => _OurpartnerDashboardState();
}
class _OurpartnerDashboardState extends State<OurpartnerDashboard> {
final formKey = GlobalKey<FormState>();
String nm = '';
String pt = '';
int selectedIndex = 0;
int id = 0;
String selectname = '';
String selectpath = '';
TextEditingController _controllerName = TextEditingController();
TextEditingController _controllerPath = TextEditingController();
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
height: 2000,
width: screenSize.width,
padding: const EdgeInsets.only(left: 100, right: 100),
color: const Color.fromRGBO(238, 224, 224, 1),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 100,
child: Row(
children: [
Container(
child: const Text(
'Our Partner ',
style: TextStyle(
fontSize: 20,
),
),
),
ElevatedButton(
onPressed: () {
showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
title: const Center(child: Text('ADD NEW PARTNER')),
content: Form(
key: formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
verticalDirection: VerticalDirection.down,
children: [
Container(
width: 200,
child: TextFormField(
textAlign: TextAlign.start,
decoration: InputDecoration(
labelText: "Masukkan Nama",
hintStyle: const TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(5.0)),
),
onChanged: (value) => pt = value,
),
),
const SizedBox(
height: 40,
),
Container(
width: 200,
child: TextFormField(
textAlign: TextAlign.start,
maxLines: 7,
decoration: InputDecoration(
labelText: "Masukkan Keterangan",
hintStyle: const TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(5.0)),
),
onChanged: (value) => nm = value,
),
),
],
),
),
actions: <Widget>[
TextButton(
// onPressed: () {
// if (nm.trim().isEmpty && nm == null) {
// print('Nama Page Kosong');
// } else if (pt.trim().isEmpty && pt == null) {
// print('Isi page kosong');
// }
// print(nm + '\n' + pt);
// PartnerApi().createPartner(nm, pt);
// print('Data Tersimpan');
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const Dashboard(),
// ),
// );
onPressed: () {
Navigator.pop(context);
if (nm.isEmpty && pt.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Data Can\'t Be Empty')),
);
} else if (pt.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content:
Text('Content Can\'t Be Empty')),
);
} else if (nm.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Name Can\'t Be Empty')),
);
} else {
createPartner(nm, pt).then(
(isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(this.context).showSnackBar(
const SnackBar(
content: Text("Data success")));
} else {
Scaffold.of(this.context).showSnackBar(
const SnackBar(
content:
Text("Data failed!!!")));
}
},
);
}
},
child: const Text('save'),
),
],
),
);
},
child: const Text('Add New Partner'))
],
),
),
SizedBox(
height: 50,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
TextButton(
style: TextButton.styleFrom(
primary: Colors.black,
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {},
child: const Text("All (3)"),
),
const Spacer(
flex: 3,
),
// const Text('All(4)',
// style: TextStyle(color: Color.fromARGB(255, 0, 0, 139))),
SizedBox(
height: 40,
width: 200,
child: TextFormField(
decoration: InputDecoration(
labelText: "Search",
prefixIcon: const Icon(Icons.search),
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(width: 1, color: Colors.blue),
borderRadius: BorderRadius.circular(5),
),
focusedBorder: OutlineInputBorder(
borderSide:
const BorderSide(width: 1, color: Colors.blue),
borderRadius: BorderRadius.circular(5),
),
),
),
),
const SizedBox(
width: 50,
),
// Spacer(
// flex: 1,
// ),
ClipRRect(
borderRadius: BorderRadius.circular(3),
child: Stack(
children: <Widget>[
Positioned.fill(
child: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: <Color>[
Color(0xFF42A5F5),
],
),
),
),
),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.white,
backgroundColor: Colors.blue,
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {},
child: const Text("Search Partner"),
),
],
),
),
],
),
),
Row(
children: const [
Spacer(
flex: 6,
),
Text("3 items"),
],
),
const SizedBox(
height: 10,
),
Container(
child: FutureBuilder<List<dynamic>>(
future: getPartner(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError ||
snapshot.data == null ||
snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator();
}
return DataTable(
decoration: const BoxDecoration(color: Colors.white),
columnSpacing: 120,
columns: const [
DataColumn(label: Text('Id')),
DataColumn(label: Text('Name')),
DataColumn(label: Text('Path')),
DataColumn(label: Text('Status')),
DataColumn(label: Text('Action')),
],
rows: List.generate(
snapshot.data.length,
(index) {
var pgm = snapshot.data[index];
return DataRow(cells: [
DataCell(
Text(pgm['partnerId'].toString()),
),
DataCell(
Text(pgm['filename']),
),
DataCell(
Text(pgm['filepath']),
),
DataCell(
Text(pgm['status']),
),
// DataCell(
// TextButton(
// style: TextButton.styleFrom(
// padding: const EdgeInsets.all(16.0),
// primary: Colors.black,
// backgroundColor: Color.fromARGB(255, 245, 27, 27),
// textStyle: const TextStyle(fontSize: 15),
// ),
// onPressed: () {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text("Warning"),
// content: Text(
// "Are you sure want to delete data partner ${pgm['filename']}?"),
// actions: <Widget>[
// TextButton(
// child: Text("Yes"),
// onPressed: () {
// Navigator.pop(context);
// PartnerApi()
// .deletePartner(pgm['partnerId'])
// .then((isSuccess) {
// if (isSuccess) {
// setState(() {});
// Scaffold.of(this.context)
// .showSnackBar(SnackBar(
// content: Text(
// "Delete data success")));
// } else {
// Scaffold.of(this.context)
// .showSnackBar(SnackBar(
// content: Text(
// "Delete data failed")));
// }
// });
// },
// ),
// TextButton(
// child: Text("No"),
// onPressed: () {
// Navigator.pop(context);
// },
// ),
// ],
// );
// },
// );
// },
// child: const Text("Delete"),
// ),
// ),
DataCell(
Row(
children: [
ElevatedButton(
// style: TextButton.styleFrom(
// padding: const EdgeInsets.all(16.0),
// primary: Colors.black,
// backgroundColor:
// Color.fromARGB(255, 22, 197, 197),
// textStyle: const TextStyle(fontSize: 15),
// ),
onPressed: () {
var pgm = snapshot.data[index];
selectedIndex = index;
id = pgm['partnerId'];
selectname = pgm['filename'];
selectpath = pgm['filepath'];
print(selectedIndex);
print(pgm['partnerId']);
print(selectname);
_controllerPath.clear();
// _controllerId.clear();
_controllerName.clear();
showDialog<String>(
context: context,
builder: (BuildContext context) =>
AlertDialog(
title: const Center(
child: Text('Update Partner')),
content: Form(
key: formKey,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
verticalDirection:
VerticalDirection.down,
children: [
// Container(
// width: 200,
// child: TextFormField(
// controller: _controllerId,
// textAlign: TextAlign.start,
// decoration: InputDecoration(
// labelText: "Masukkan ID News",
// hintStyle: TextStyle(),
// border: OutlineInputBorder(
// borderRadius:
// BorderRadius
// .circular(5.0)),
// ),
//
// onChanged: (value) =>
// id = int.parse(value),
// ),
// ),
const SizedBox(
height: 10,
),
const Text(
'Data Harus di Edit*',
style: TextStyle(
fontSize: 13,
color: Colors.red),
),
const SizedBox(
height: 15,
),
Center(
child: Container(
width: 200,
child: TextFormField(
//controller: _controllerTitle,
textAlign: TextAlign.start,
initialValue: selectname,
decoration: InputDecoration(
labelText:
'Masukkan Name Partner Baru',
//labelStyle: TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius
.circular(5.0)),
),
onChanged: (value) =>
nm = value,
),
),
),
const SizedBox(
height: 40,
),
Center(
child: Container(
width: 200,
child: TextFormField(
//controller: _controllerPartner,
textAlign: TextAlign.start,
initialValue: selectpath,
maxLines: 7,
decoration: InputDecoration(
labelText:
"Masukkan Keterangan Baru",
hintStyle:
const TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(
5.0),
),
),
onChanged: (value) =>
pt = value,
),
),
),
],
),
),
actions: <Widget>[
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.black,
backgroundColor:
const Color.fromARGB(
255, 16, 199, 71),
textStyle:
const TextStyle(fontSize: 15),
),
onPressed: () {
Navigator.pop(context);
if (nm.isEmpty && pt.isEmpty) {
ScaffoldMessenger.of(context)
.showSnackBar(
const SnackBar(
content: Text(
'Data Must Be Edited')),
);
} else if (pt.isEmpty) {
ScaffoldMessenger.of(context)
.showSnackBar(
const SnackBar(
content: Text(
'Content Must Be Edited')),
);
} else if (nm.isEmpty) {
ScaffoldMessenger.of(context)
.showSnackBar(
const SnackBar(
content: Text(
'Name Must Be Edited')),
);
} else {
updatePartner(id, nm, pt).then(
(isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Data success"),
),
);
} else {
Scaffold.of(this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Data failed!!!"),
),
);
}
},
);
}
},
child: const Text('Update'),
),
],
),
);
},
child: const Text('Edit Partner'),
),
const SizedBox(
width: 10,
),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.white,
backgroundColor:
const Color.fromARGB(255, 245, 27, 27),
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text("Warning"),
content: Text(
"Are you sure want to delete data partner ${pgm['title']}?"),
actions: <Widget>[
TextButton(
child: const Text("Yes"),
onPressed: () {
Navigator.pop(context);
deletePartner(pgm['partnerId'])
.then((isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(this.context)
.showSnackBar(const SnackBar(
content: Text(
"Delete data success")));
} else {
Scaffold.of(this.context)
.showSnackBar(const SnackBar(
content: Text(
"Delete data failed")));
}
});
},
),
TextButton(
child: const Text("No"),
onPressed: () {
Navigator.pop(context);
},
),
],
);
},
);
},
child: const Text("Delete"),
),
],
),
),
]);
},
).toList(),
);
},
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/api/page_api.dart';
import 'package:multi_cloudv3/dashboard/dashboard.dart';
import 'package:multi_cloudv3/model/page.dart';
class PagesDashboard extends StatefulWidget {
const PagesDashboard({Key? key}) : super(key: key);
@override
State<PagesDashboard> createState() => _PagesDashboardState();
}
class _PagesDashboardState extends State<PagesDashboard> {
final formKey = GlobalKey<FormState>();
int id = 0;
String nm = '';
String pg = '';
String selectname = '';
String selectpage = '';
int selectedIndex = 0;
TextEditingController _controllerName = TextEditingController();
TextEditingController _controllerPage = TextEditingController();
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
height: 2000,
width: screenSize.width,
padding: const EdgeInsets.only(left: 100, right: 100),
color: const Color.fromRGBO(238, 224, 224, 1),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 100,
child: Row(
children: [
Container(
child: const Text(
'Pages ',
style: TextStyle(
fontSize: 20,
),
),
),
ElevatedButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.white,
backgroundColor: Colors.blue,
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {
showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
title: const Center(child: Text('ADD NEW PAGES')),
content: Form(
key: formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
verticalDirection: VerticalDirection.down,
children: [
Container(
width: 200,
child: TextFormField(
textAlign: TextAlign.start,
decoration: InputDecoration(
labelText: "Masukkan Nama",
hintStyle: const TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(5.0)),
),
onChanged: (value) => nm = value,
),
),
const SizedBox(
height: 40,
),
Container(
width: 200,
child: TextFormField(
textAlign: TextAlign.start,
maxLines: 7,
decoration: InputDecoration(
labelText: "Masukkan Keterangan",
hintStyle: const TextStyle(),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0),
),
),
onChanged: (value) => pg = value,
),
),
],
),
),
actions: <Widget>[
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.black,
backgroundColor: const Color.fromARGB(255, 16, 199, 71),
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {
Navigator.pop(context);
if (nm.isEmpty && pg.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Data Can\'t Be Empty')),
);
} else if (pg.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Content Can\'t Be Empty')),
);
} else if (nm.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Name Can\'t Be Empty')),
);
} else {
createPage(nm, pg).then(
(isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(this.context).showSnackBar(
const SnackBar(
content: Text("Data success")));
} else {
Scaffold.of(this.context).showSnackBar(
const SnackBar(
content: Text("Data failed!!!")));
}
},
);
}
},
child: const Text('save'),
),
],
),
);
},
child: const Text('Add New Pages'),
),
],
),
),
SizedBox(
height: 20,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
TextButton(
style: TextButton.styleFrom(
primary: Colors.black,
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {},
child: const Text("All (3)"),
),
],
),
),
const SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.6,
child: ListView(
controller: ScrollController(),
children: [
FutureBuilder<List<dynamic>>(
future: getPage(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError ||
snapshot.data == null ||
snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator();
}
return DataTable(
decoration: const BoxDecoration(color: Colors.white),
columnSpacing: 130,
columns: const [
DataColumn(label: Text('Id')),
DataColumn(label: Text('Title')),
DataColumn(label: Text('Page')),
DataColumn(label: Text('Status')),
DataColumn(label: Text('Action')),
],
rows: List.generate(
snapshot.data.length,
(index) {
var pgm = snapshot.data[index];
return DataRow(
cells: [
DataCell(
Text(pgm['idpage'].toString()),
),
DataCell(
Text(pgm['title']),
),
DataCell(
Text(pgm['page']),
),
DataCell(
Text(pgm['status']),
),
DataCell(
Row(
children: [
ElevatedButton(
// style: TextButton.styleFrom(
// padding: const EdgeInsets.all(16.0),
// primary: Colors.black,
// backgroundColor:
// Color.fromARGB(255, 22, 197, 197),
// textStyle: const TextStyle(fontSize: 15),
// ),
onPressed: () {
var pgm = snapshot.data[index];
selectedIndex = index;
id = pgm['idpage'];
selectname = pgm['title'];
selectpage = pgm['page'];
print(selectedIndex);
print(pgm['idpage']);
print(selectname);
_controllerName.clear();
// _controllerId.clear();
_controllerPage.clear();
showDialog<String>(
context: context,
builder: (BuildContext context) =>
AlertDialog(
title: const Center(
child:
Text('Update Pages')),
content: Form(
key: formKey,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
verticalDirection:
VerticalDirection.down,
children: [
const SizedBox(
height: 10,
),
const Text(
'Data Harus di Edit*',
style: TextStyle(
fontSize: 13,
color: Colors.red),
),
const SizedBox(
height: 15,
),
Center(
child: Container(
width: 200,
child: TextFormField(
//controller: _controllerName,
textAlign:
TextAlign.start,
initialValue:
selectname,
decoration:
InputDecoration(
labelText:
'Masukkan Nama Pages Baru',
//labelStyle: TextStyle(),
border: OutlineInputBorder(
borderRadius:
BorderRadius
.circular(
5.0)),
),
onChanged: (value) =>
nm = value,
),
),
),
const SizedBox(
height: 40,
),
Center(
child: Container(
width: 200,
child: TextFormField(
//controller: _controllerPage,
textAlign:
TextAlign.start,
initialValue:
selectpage,
maxLines: 7,
decoration:
InputDecoration(
labelText:
"Masukkan Keterangan",
hintStyle:
const TextStyle(),
border:
OutlineInputBorder(
borderRadius:
BorderRadius
.circular(
5.0),
),
),
onChanged: (value) =>
pg = value,
),
),
),
],
),
),
actions: <Widget>[
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(
16.0),
primary: Colors.black,
backgroundColor:
const Color.fromARGB(
255, 16, 199, 71),
textStyle: const TextStyle(
fontSize: 15),
),
onPressed: () {
Navigator.pop(context);
if (nm.isEmpty &&
pg.isEmpty) {
ScaffoldMessenger.of(
context)
.showSnackBar(
const SnackBar(
content: Text(
'Data Can\'t Be Empty')),
);
} else if (pg.isEmpty) {
ScaffoldMessenger.of(
context)
.showSnackBar(
const SnackBar(
content: Text(
'Content Can\'t Be Empty')),
);
} else if (nm.isEmpty) {
ScaffoldMessenger.of(
context)
.showSnackBar(
const SnackBar(
content: Text(
'Name Can\'t Be Empty')),
);
} else {
updatePage(id, nm, pg).then(
(isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(
this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Data success"),
),
);
} else {
Scaffold.of(
this.context)
.showSnackBar(
const SnackBar(
content: Text(
"Data failed!!!"),
),
);
}
},
);
}
},
child: const Text('Update'),
),
],
),
);
},
child: const Text('Edit Page'),
),
const SizedBox(width: 10),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.white,
backgroundColor:
const Color.fromARGB(255, 245, 27, 27),
textStyle:
const TextStyle(fontSize: 15),
),
onPressed: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text("Warning"),
content: Text(
"Are you sure want to delete data page ${pgm['title']}?"),
actions: <Widget>[
TextButton(
child: const Text("Yes"),
onPressed: () {
Navigator.pop(context);
deletePage(pgm['idpage'])
.then((isSuccess) {
if (isSuccess) {
setState(() {});
Scaffold.of(
this.context)
.showSnackBar(const SnackBar(
content: Text(
"Delete data success")));
} else {
Scaffold.of(
this.context)
.showSnackBar(const SnackBar(
content: Text(
"Delete data failed")));
}
});
},
),
TextButton(
child: const Text("No"),
onPressed: () {
Navigator.pop(context);
},
),
],
);
},
);
},
child: const Text("Delete"),
),
],
),
),
],
);
},
).toList(),
);
},
),
],
),
),
],
),
);
}
}
import 'dart:convert';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/api/setting_api.dart';
import 'package:http/http.dart' as http;
class SettingDashboard extends StatefulWidget {
const SettingDashboard({super.key});
@override
State<SettingDashboard> createState() => _SettingDashboardState();
}
class _SettingDashboardState extends State<SettingDashboard> {
String img = 'assets/file/empty.jpg';
@override
Future<void> uploadFile() async {
// TODO: implement upload File
FilePickerResult? result;
print('Picker file');
result = await FilePicker.platform
.pickFiles(allowMultiple: true, withReadStream: true, withData: false);
if (result != null) {
print(result.files.first.name);
//create
var req = http.MultipartRequest(
"POST", Uri.parse("http://10.107.72.92:8081/file"));
var response = http.get(Uri.parse("http://10.107.72.92:8081/file"));
List<PlatformFile>? files = result.files;
if (files != null) {
print('Add file select with picker');
for (PlatformFile file in files) {
//add select with req
req.files.add(http.MultipartFile("file", file.readStream!, file.size,
filename: file.name));
setState(() {
img = "assets/file/" + file.name;
});
}
}
// send request
var resp = await req.send();
//read response
String res = await resp.stream.bytesToString();
//your response
print(res);
}
}
var btnText = 'Save Setting';
var enb = true;
final formKey = GlobalKey<FormState>();
String id = '';
String im = '';
String tt = '';
String tl = '';
String em = '';
String no = '';
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
var screenSize1 = screenSize.width * 0.6;
return Container(
color: const Color.fromRGBO(238, 224, 224, 1),
height: 650,
padding: const EdgeInsets.only(left: 80),
width: screenSize.width,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"General Setting",
textAlign: TextAlign.start,
style: TextStyle(
color: Colors.black, fontSize: 40, fontWeight: FontWeight.bold),
),
Container(
color: Colors.white,
height: 480,
width: 900,
padding: const EdgeInsets.only(left: 30,top: 15,right: 20,bottom: 15),
child: Form(
key: formKey,
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("Site Profile",
style: TextStyle(
color: Colors.black,
fontSize: 20,
fontWeight: FontWeight.normal)),
// SizedBox(
// height: 0,
// width: 820,
// ),
ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
),
primary: const Color.fromARGB(255, 0, 36, 192),
),
onPressed: () {
switch (btnText) {
case 'Save Setting':
createSetting(im.toString(), tt.toString(),
tl.toString(), em.toString(), no.toString());
setState(() {
btnText = 'Update Setting';
enb = false;
});
break;
case 'Update Setting':
setState(() {
enb = true;
btnText = 'Save Update';
});
break;
case 'Save Update':
break;
default:
}
},
child: Text(
btnText,
style: const TextStyle(
fontSize: 16, fontWeight: FontWeight.bold),
),
),
],
),
const Divider(
height: 20,
thickness: 1,
// indent: 20,
// endIndent: 0,
color: Colors.grey,
),
const Spacer(
flex: 1,
),
Row(
children: [
Container(
height: 230,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(
width: 20,
),
const Text(
"Site icon",
style: TextStyle(
color: Colors.black,
fontSize: 20,
fontWeight: FontWeight.bold),
),
const SizedBox(
height: 20,
),
Container(
height: 50,
width: 150,
child: Image.asset('$img'),
),
const SizedBox(
height: 20,
),
Container(
height: 30,
width: 100,
child: ElevatedButton(
onPressed: uploadFile,
// () async {
// final imagePicker = await ImagePickerPlugin()
// .pickImage(source: ImageSource.gallery,imageQuality: 20);
//
// if(imagePicker != null){
// final file = File(imagePicker.path);
// final result = await FileApi.upload(file);
//
// final String imgPath = result['filePath'];
//
// setState(() {
// img = imgPath;
// });
// }
// },
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
),
primary: Colors.white,
// shape: MaterialStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0))),
),
child: const Text(
"Change",
style: TextStyle(color: Colors.black),
))),
const SizedBox(
height: 10,
),
Container(
height: 30,
width: 100,
child: ElevatedButton(
onPressed: () {},
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
),
primary: Colors.white,
// shape: MaterialStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0))),
),
child: const Text(
"Remove",
style: TextStyle(color: Colors.red),
)))
],
),
),
SizedBox(
width: screenSize.width * 0.05,
),
Container(
height: 230,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"Site title",
style: TextStyle(
color: Colors.black,
fontSize: 17,
fontWeight: FontWeight.bold),
),
const SizedBox(
height: 10,
),
Container(
height: 40,
width: screenSize1 * 0.5,
child: TextFormField(
decoration: const InputDecoration(
labelText: "Multi Cloud Solution",
hintStyle: TextStyle(),
border: OutlineInputBorder(
borderSide: BorderSide(
width: 1, color: Colors.grey))),
onChanged: (value) => tt = value,
enabled: enb,
),
),
const SizedBox(
height: 20,
),
const Text(
"Site tagline",
style: TextStyle(
color: Colors.black,
fontSize: 17,
fontWeight: FontWeight.bold),
),
const SizedBox(
height: 7,
),
Container(
height: 40,
width: screenSize1 * 0.5,
child: TextFormField(
decoration: const InputDecoration(
labelText: "Cloud Partner with Eksad",
hintStyle: TextStyle(),
border: OutlineInputBorder(
borderSide: BorderSide(
width: 1, color: Colors.grey))),
onChanged: (value) => tl = value,
enabled: enb,
),
),
const SizedBox(
height: 10,
),
const Text(
"In a few words, explain what this site is about.",
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.grey,
fontSize: 16,
fontWeight: FontWeight.normal)),
],
),
),
],
),
Row(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Text(
"Email address",
style: TextStyle(
color: Colors.black,
fontSize: 17,
fontWeight: FontWeight.bold),
),
const SizedBox(
height: 10,
),
Container(
height: 40,
width: screenSize1 * 0.5,
child: TextFormField(
decoration: InputDecoration(
fillColor: Colors.grey[200],
labelText: "xxxxxx@eksad.com",
hintStyle: const TextStyle(),
border: const OutlineInputBorder(
borderSide: BorderSide(
width: 1, color: Colors.grey))),
onChanged: (value) => em = value,
enabled: enb,
),
),
const SizedBox(
height: 10,
),
const Text(
"No Office",
style: TextStyle(
color: Colors.black,
fontSize: 17,
fontWeight: FontWeight.bold),
),
const SizedBox(
height: 10,
),
Container(
height: 40,
width: screenSize1 * 0.5,
child: TextFormField(
decoration: const InputDecoration(
labelText: "02x-xxxx-xxxx",
hintStyle: TextStyle(),
border: OutlineInputBorder(
borderSide: BorderSide(
width: 1, color: Colors.grey))),
onChanged: (value) => no = value,
enabled: enb,
),
),
],
),
// const SizedBox(
// width: 30,
// ),
],
),
// const Spacer(
// flex: 20,
// ),
],
),
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/dashboard/main_dashboard.dart';
import 'package:multi_cloudv3/dashboard/news_dashboard.dart';
import 'package:multi_cloudv3/dashboard/ourpartner_dashboard.dart';
import 'package:multi_cloudv3/dashboard/pages_dashboard.dart';
import 'package:multi_cloudv3/dashboard/setting_dashboard.dart';
import 'package:side_navigation/side_navigation.dart';
class SideMenu extends StatefulWidget {
const SideMenu({Key? key}) : super(key: key);
@override
State<SideMenu> createState() => _SideMenuState();
}
List<Widget> views = [
const MainDashboard(),
const SettingDashboard(),
const PagesDashboard(),
const NewsDashboard(),
const OurpartnerDashboard()
];
int selectedIndex = 0;
class _SideMenuState extends State<SideMenu> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Row(
children: [
SideNavigationBar(
header: SideNavigationBarHeader(
image: const CircleAvatar(
child: Icon(
Icons.person_pin,
size: 20,
),
radius: 20,
),
title: Container(
padding: const EdgeInsets.only(left: 10),
child: const Text(
'Fahrur Huzain',
style: TextStyle(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.bold),
),
),
subtitle: Container(),
// subtitle: Text(
// 'Admin Eksad',
// style: TextStyle(color: Colors.white),
// ),
),
selectedIndex: selectedIndex,
items: const [
SideNavigationBarItem(
icon: Icons.home,
label: 'Dashboard',
),
SideNavigationBarItem(
icon: Icons.settings,
label: 'Settings',
),
SideNavigationBarItem(
icon: Icons.insert_page_break,
label: 'Pages',
),
SideNavigationBarItem(
icon: Icons.post_add,
label: 'News',
),
SideNavigationBarItem(
icon: Icons.group,
label: 'Our Partner',
),
],
onTap: (index) {
setState(() {
selectedIndex = index;
});
},
// Change the background color and disabled header/footer dividers
// Make use of standard() constructor for other themes
theme: SideNavigationBarTheme(
backgroundColor:
//Color.fromARGB(200, 9, 47, 171),
const Color.fromARGB(255, 18, 108, 178),
togglerTheme: const SideNavigationBarTogglerTheme(
shrinkIconColor: Colors.white, expandIconColor: Colors.white),
itemTheme: const SideNavigationBarItemTheme(
selectedItemColor: Colors.white,
unselectedItemColor: Colors.white60),
dividerTheme: SideNavigationBarDividerTheme.standard(),
),
),
Expanded(
child: views.elementAt(selectedIndex),
)
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/dashboard/dashboard.dart';
import 'package:multi_cloudv3/screen/home.dart';
class login extends StatefulWidget {
const login({Key? key}) : super(key: key);
@override
State<login> createState() => _loginState();
}
class _loginState extends State<login> {
bool _isObscure = true;
final formKey = GlobalKey<FormState>();
String _usmail = '';
String _uspswd = '';
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Scaffold(
body: Container(
decoration: new BoxDecoration(
image: new DecorationImage(
image: new AssetImage("assets/images/cloud.jpg"),
fit: BoxFit.fill,
)),
height: screenSize.height,
width: screenSize.width,
padding: EdgeInsets.only(
left: screenSize.width * 0.15,
top: screenSize.height * 0.13,
bottom: screenSize.height * 0.13),
child: Stack(
children: [
Container(
decoration: BoxDecoration(
color: Color.fromARGB(255, 10, 116, 255),
borderRadius: BorderRadius.circular(20),
),
width: screenSize.width * 0.36,
height: screenSize.height * 0.9,
child: Image.asset(
"assets/logo/eksad1.jpg",
),
),
Padding(
padding: EdgeInsets.only(
left: screenSize.width * 0.33, top: screenSize.height * 0.07),
child: Container(
width: screenSize.width * 0.3,
height: screenSize.height * 0.6,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
border: Border.all(
width: 5,
color: Color.fromARGB(255, 10, 116, 255),
),
boxShadow: [
BoxShadow(
color: Color.fromARGB(255, 10, 116, 255).withAlpha(60),
blurRadius: 15.0,
spreadRadius: 20.0,
offset: Offset(
0.0,
3.0,
),
),
]),
child: Form(
key: formKey,
child: Container(
padding: EdgeInsets.only(
left: screenSize.width * 0.045,
top: screenSize.height * 0.05),
width: screenSize.width * 0.36,
height: screenSize.height * 0.9,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding:
EdgeInsets.only(left: screenSize.width * 0.055),
height: screenSize.height * 0.08,
child: Image.asset(
"assets/logo/multicloudsolution.jpg",
height: 15,
),
),
Spacer(
flex: 3,
),
Row(
children: [
Icon(
Icons.email_outlined,
color: Colors.grey[500],
size: screenSize.width * 0.01,
),
SizedBox(
width: 10,
),
Text("Email"),
],
),
Spacer(
flex: 1,
),
Container(
height: 40,
width: screenSize.width * 0.2,
child: TextFormField(
textAlign: TextAlign.start,
decoration: InputDecoration(
labelText: "Enter Your Email",
hintStyle: TextStyle(),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0),
),
),
validator: (value) {
if (value == null || value.trim().isEmpty) {
return "please enter your email address";
} else if (!RegExp(r'\S+@\S+\.\S+')
.hasMatch(value)) {
return 'Please enter a valid email address';
} else {
return null;
}
},
onChanged: (value) => _usmail = value,
),
),
Spacer(
flex: 2,
),
Row(
children: [
Icon(
Icons.vpn_key_outlined,
color: Colors.grey[500],
size: screenSize.width * 0.01,
),
SizedBox(
width: 10,
),
Text("Password"),
],
),
Spacer(
flex: 1,
),
Container(
height: 40,
width: screenSize.width * 0.2,
child: TextFormField(
textAlign: TextAlign.start,
obscureText: _isObscure,
decoration: InputDecoration(
labelText: "Password",
suffixIcon: IconButton(
icon: Icon(_isObscure
? Icons.visibility
: Icons.visibility_off),
onPressed: () {
setState(
() {
_isObscure = !_isObscure;
},
);
},
),
hintStyle: TextStyle(),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0)),
),
validator: (value) {
if (value == null || value.trim().isEmpty) {
return 'This field is required';
} else if (value.trim().length < 8) {
return 'Password must be at least 8 characters in length';
}
return null;
},
onChanged: (value) => _uspswd = value,
),
),
Spacer(
flex: 3,
),
Row(
children: [
Container(
height: 30,
width: screenSize.width * 0.08,
child: ElevatedButton(
onPressed: () {
if (_usmail == 'admin@admin.com' &&
_uspswd != 'administrator') {
showDialog<String>(
context: context,
builder: (BuildContext context) =>
AlertDialog(
title: const Text('Gagal login'),
content: const Text(
'Password anda salah!!!'),
actions: <Widget>[
TextButton(
onPressed: () =>
Navigator.pop(context, 'OK'),
child: const Text('OK'),
),
],
),
);
} else if (_usmail == 'admin@admin.com' &&
_uspswd == 'administrator') {
Navigator.push(
context,
MaterialPageRoute(
builder: (Context) {
return Dashboard();
},
),
);
} else {
showDialog<String>(
context: context,
builder: (BuildContext context) =>
AlertDialog(
title: const Text('Gagal login'),
content: const Text(
'Akun Belum terdaftar, Silahkan Registrasi'),
actions: <Widget>[
TextButton(
onPressed: () =>
Navigator.pop(context, 'OK'),
child: const Text('OK'),
),
],
),
);
}
},
child: Text("LOGIN"),
),
),
SizedBox(
width: screenSize.width * 0.04,
),
// Container(
// height: 30,
// width: screenSize.width * 0.08,
// child: ElevatedButton(
// onPressed: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => Register(),
// ),
// );
// },
// child: Text("REGISTER"),
// ),
// ),
],
),
Spacer(
flex: 7,
),
],
),
),
),
),
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/dashboard/dashboard.dart';
import 'package:multi_cloudv3/login.dart';
import 'package:multi_cloudv3/screen/home.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
configureApp();
runApp(const MyApp());
}
void configureApp() {
setUrlStrategy(PathUrlStrategy());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: "Multi Cloud Solution By EKSAD",
initialRoute: '/',
routes: {
'/': (context) => const HomePage(),
// When navigating to the "/second" route, build the SecondScreen widget.
'/admin': (context) => const Dashboard(),
},
// home: HomePage(),
);
}
}
import 'dart:convert';
class Pages {
int id;
String name;
String page;
Pages({this.id = 0, required this.name, required this.page});
factory Pages.fromJson(Map<String, dynamic> map) {
return Pages(id: map["id"], name: map["name"], page: map["page"]);
}
Map<String, dynamic> toJson() {
return {"id": id, "name": name, "page": page};
}
@override
String toString() {
return 'Pages{id: $id, name: $name, page: $page}';
}
}
List<Pages> pageFromJson(String jsonData) {
final data = json.decode(jsonData);
return List<Pages>.from(data.map((item) => Pages.fromJson(item)));
}
String pageToJson(Pages data) {
final jsonData = data.toJson();
return json.encode(jsonData);
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:multi_cloudv3/main.dart';
import 'package:multi_cloudv3/widget/dropdown.dart';
import '../const/conts.dart';
PreferredSize AppbarSmallSize(Size screenSize) {
return PreferredSize(
preferredSize: Size(screenSize.width, 80),
child: Container(
decoration: const BoxDecoration(
border: Border(
bottom: BorderSide(
color: kPrimaryColor, width: 1, style: BorderStyle.solid),
),
),
child: Row(
children: [
const Spacer(
flex: 1,
),
Container(
padding: const EdgeInsets.only(left: 30, top: 20, bottom: 20),
child: Image.asset("assets/logo/multicloudsolution.jpg"),
),
const Spacer(
flex: 1,
),
const SizedBox(
height: 50,
width: 150,
child: En(),
),
const Spacer(
flex: 1,
),
],
),
),
);
}
PageController controller = PageController();
PreferredSize AppbarFullSize(Size screenSize, BuildContext context) {
return PreferredSize(
preferredSize: Size(screenSize.width, 135),
child: Container(
decoration: const BoxDecoration(
border: Border(
bottom: BorderSide(
color: kPrimaryColor, width: 1, style: BorderStyle.solid),
),
),
child: Row(
children: [
SizedBox(
width: screenSize.width * 0.1,
),
Container(
padding: const EdgeInsets.only(left: 30, top: 20, bottom: 20),
child: Image.asset("assets/logo/multicloudsolution.jpg"),
),
SizedBox(
width: screenSize.width * 0.2,
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const MyApp(),
),
);
},
child: Text(
"Home",
style: GoogleFonts.poppins(
fontSize: 17, fontWeight: FontWeight.bold, color: kTextColor),
),
),
SizedBox(
width: screenSize.width * 0.03,
),
Text(
"About us",
style: GoogleFonts.poppins(
fontSize: 17, fontWeight: FontWeight.bold, color: kTextColor),
),
SizedBox(
width: screenSize.width * 0.03,
),
Text(
"Solution",
style: GoogleFonts.poppins(
fontSize: 17, fontWeight: FontWeight.bold, color: kTextColor),
),
SizedBox(
width: screenSize.width * 0.03,
),
Text(
"Contact Us",
style: GoogleFonts.poppins(
fontSize: 17, fontWeight: FontWeight.bold, color: kTextColor),
),
SizedBox(
width: screenSize.width * 0.03,
),
SizedBox(
height: 50,
width: 250,
child: TextFormField(
decoration: InputDecoration(
labelText: "Search",
prefixIcon: const Icon(Icons.search),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(15),
borderSide: const BorderSide(width: 1, color: Colors.blue),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(15),
borderSide: const BorderSide(width: 1, color: Colors.blue),
),
),
),
),
],
),
),
);
void _scrollToIndex(int index) {
controller.animateToPage(index + 1,
duration: const Duration(seconds: 2),
curve: Curves.fastLinearToSlowEaseIn);
}
}
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:url_launcher/url_launcher.dart';
class Footer extends StatelessWidget {
const Footer({Key? key, required this.content1, required this.content2})
: super(key: key);
final Widget content1;
final Widget content2;
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
width: screenSize.width,
height: screenSize.height * 0.76,
color: Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
height: screenSize.height * 0.07,
),
Container(
width: screenSize.width,
height: screenSize.height * 0.53,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: const EdgeInsets.only(left: 5),
width: screenSize.width * 0.2,
height: screenSize.height * 0.35,
child: Column(
children: [
Container(
width: screenSize.width * 0.12,
height: screenSize.height * 0.08,
decoration: const BoxDecoration(
//color: Colors.lightBlueAccent,
image: DecorationImage(
image: AssetImage(
'assets/logo/logo-eksad.png'),
fit: BoxFit.fill)),
),
const Spacer(),
Container(
width: screenSize.width * 0.17,
height: screenSize.height * 0.04,
//color: Colors.blue,
child: Center(
child: Text(
' Your one stop IT Solution.',
textAlign: TextAlign.left,
style: GoogleFonts.poppins(
color: Colors.black87,
fontWeight: FontWeight.w500,
letterSpacing: 1.3,
fontSize: 14),
),
),
),
const Spacer(
flex: 2,
),
Container(
width: screenSize.width * 0.14,
height: screenSize.height * 0.03,
//color: Colors.blue,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconButton(
onPressed: () {
_launchLinkedIn();
},
icon: const Icon(
FontAwesomeIcons.linkedinIn,
size: 25,
),
iconSize: 25,
color: Colors.black),
IconButton(
onPressed: () {
_launchTwitter();
},
icon: const Icon(
FontAwesomeIcons.twitter,
size: 25,
),
iconSize: 25,
color: Colors.black,
),
IconButton(
onPressed: () {
_launchInstagram();
},
icon: const Icon(
FontAwesomeIcons.instagram,
size: 25,
),
iconSize: 25,
color: Colors.black),
IconButton(
onPressed: () {
_launchYoutube();
},
icon: const Icon(
FontAwesomeIcons.youtube,
size: 25,
),
iconSize: 25,
color: Colors.black)
],
),
),
const Spacer(
flex: 8,
)
],
)),
Container(
width: screenSize.width * 0.15,
height: screenSize.height * 0.4,
child: content1),
Container(
width: screenSize.width * 0.2,
height: screenSize.height * 0.4,
child: content2),
Container(
width: screenSize.width * 0.25,
height: screenSize.height * 0.49,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
width: screenSize.width * 0.25,
height: screenSize.height * 0.04,
child: FooterHead('Contact'),
),
const Spacer(),
Container(
width: screenSize.width * 0.19,
child: ListTile(
leading: const Icon(
Icons.phone,
size: 23,
color: Colors.black,
),
title: TextButton(
onPressed: () {
launch('tel:02157958040');
},
child: Text(
'(021) 5795 - 8040',
style: GoogleFonts.poppins(
fontSize: 16,
color: Colors.black87,
),
)),
),
),
Container(
width: screenSize.width * 0.2,
child: ListTile(
leading: const Icon(
Icons.mail,
size: 23,
color: Colors.black,
),
title: TextButton(
onPressed: () {
launch(
'mailto:Info@eksad.com?subject=Info MCS');
},
child: Text(
'info@eksad.com',
style: GoogleFonts.poppins(
fontSize: 16, color: Colors.black87,letterSpacing: 1.1),
),
),
),
),
Container(
width: screenSize.width * 0.26,
height: screenSize.height * 0.27,
child: ListTile(
leading: const Icon(
Icons.location_on,
size: 28,
color: Colors.black,
),
title: Container(
padding: const EdgeInsets.only(left: 10),
width: screenSize.width * 0.26,
height: screenSize.height * 0.26,
child: Text(
'PT. Tiga Daya Digital Indonesia \nThe East '
'Tower 19th Floor \nJl. Dr. Ide Anak Agung '
'\nGde Agung Blok E3.2 '
'\nMega Kuningan, \nJakarta Selatan 12950',
style: GoogleFonts.poppins(
fontSize: 15,
height: 1.45,
letterSpacing: 1.1
),
textAlign: TextAlign.left,
),
)),
),
],
)),
const SizedBox()
],
),
),
const Divider(
height: 3,
thickness: 3,
),
SizedBox(
width: screenSize.width,
height: screenSize.height * 0.13,
child: Center(
child: Text(
'PT. Tiga Daya Digital Indonesia © 2018, All Rights Reserved.',
style: GoogleFonts.poppins(
letterSpacing: 1.3, height: 1.4, fontSize: 16),
)),
)
],
));
}
Text FooterHead(String title) => Text(
title,
style: GoogleFonts.poppins(
fontSize: 22, fontWeight: FontWeight.bold, letterSpacing: 2),
);
}
class FooterBody extends StatelessWidget {
FooterBody({Key? key, required this.teks}) : super(key: key);
final String teks;
@override
Widget build(BuildContext context) {
return Text(
teks,
style: GoogleFonts.poppins(
color: const Color.fromARGB(255, 5, 22, 93),
fontSize: 16,
letterSpacing: 1.2),
);
}
}
void _launchLinkedIn() async {
String url() {
return "https://www.linkedin.com/company/pt-tiga-daya-digital-indonesia-triputra-group-eksad-technology";
}
if (await canLaunch(url())) {
await launch(url());
} else {
throw 'Could not launch ${url()}';
}
}
void _launchTwitter() async {
String url() {
return "https://twitter.com/eksad_technology/";
}
if (await canLaunch(url())) {
await launch(url());
} else {
throw 'Could not launch ${url()}';
}
}
void _launchInstagram() async {
String url() {
return "https://www.instagram.com/eksad_technology/";
}
if (await canLaunch(url())) {
await launch(url());
} else {
throw 'Could not launch ${url()}';
}
}
void _launchYoutube() async {
String url() {
return "https://youtube.com/eksad_technology";
}
if (await canLaunch(url())) {
await launch(url());
} else {
throw 'Could not launch ${url()}';
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:multi_cloudv3/screen/footer.dart';
import 'package:multi_cloudv3/screen/home1.dart';
import 'package:multi_cloudv3/screen/home8.dart';
import 'package:multi_cloudv3/screen/home3_edit.dart';
import 'package:multi_cloudv3/screen/home4_edit.dart';
import 'package:multi_cloudv3/screen/home6_advantage.dart';
import 'package:multi_cloudv3/screen/home7_news.dart';
import 'package:multi_cloudv3/screen/home2.dart';
import 'package:multi_cloudv3/widget/whatsapp.dart';
import '../widget/responsive.dart';
import 'appbar.dart';
import 'home5.dart';
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
// Untuk pake PAGE per index
PageController controller = PageController();
void _scrollToIndex2(int index) {
controller.animateToPage(index,
duration: const Duration(seconds: 2),
curve: Curves.fastLinearToSlowEaseIn);
}
// Untuk pake LIST per height container
ScrollController controller2 = ScrollController();
void _scrollToIndex(double index) {
controller2.animateTo(index,
duration: const Duration(seconds: 1),
curve: Curves.fastLinearToSlowEaseIn);
}
int selectedIndex = 0;
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Scaffold(
appBar: ResponsiveWidget.isSmallScreen(context)
? AppbarSmallSize(screenSize)
: AppbarLarge(screenSize),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
floatingActionButton: WAChat(),
body: ListView(
scrollDirection: Axis.vertical,
controller: controller2,
children: [
Home(
wijet: Button_scroll(),
),
const Home2(),
const Home3_partner(),
Home4_solution(screenSize: screenSize),
const Home5_industry(),
const Home6_advantages(),
const Home7_news(),
Home8_contact_us(),
Footer(
content1: konten1(screenSize),
content2: konten2(screenSize),
),
],
),
);
}
ElevatedButton Button_scroll() {
return ElevatedButton(
onPressed: () {
_scrollToIndex(3845);
},
style: ElevatedButton.styleFrom(
primary: const Color(0xff1e5ea8),
),
child: Text(
'CONTACT US',
style: GoogleFonts.poppins(fontSize: 17, letterSpacing: 2,fontWeight: FontWeight.w500),
),
);
}
PreferredSize AppbarLarge(Size screenSize) {
return PreferredSize(
preferredSize: Size(screenSize.width, 80),
child: Container(
decoration: const BoxDecoration(
border: Border(
bottom: BorderSide(
color: Colors.grey, width: 0.5, style: BorderStyle.solid),
),
),
child: Row(
children: [
SizedBox(
width: screenSize.width * 0.1,
),
Container(
padding: const EdgeInsets.only(left: 15, top: 8, bottom: 8),
child: Image.asset(
"assets/logo/multicloudsolution.jpg",
width: 190,
height: 290,
),
),
SizedBox(
width: screenSize.width * 0.1,
),
Row(
children: [
TextButton(
onPressed: () {
_scrollToIndex(0);
},
style: Color_button_appbar(),
child: Text(
"Home",
style: GoogleFonts.poppins(
fontSize: 18,
fontWeight: FontWeight.w500,
),
),
),
SizedBox(
width: screenSize.width * 0.03,
),
TextButton(
onPressed: () {
_scrollToIndex(440); //// POSISI ABOUT US
},
style: Color_button_appbar(),
child: Text(
"About us",
style: GoogleFonts.poppins(
fontSize: 18,
fontWeight: FontWeight.w500,
),
),
),
SizedBox(
width: screenSize.width * 0.03,
),
TextButton(
onPressed: () {
_scrollToIndex(770); //// POSISI SOLUTION
},
style: Color_button_appbar(),
child: Text(
"Solution",
style: GoogleFonts.poppins(
fontSize: 18,
fontWeight: FontWeight.w500,
),
),
),
SizedBox(
width: screenSize.width * 0.03,
),
TextButton(
onPressed: () {
_scrollToIndex(3845); //// POSISI CONTACT US
},
style: Color_button_appbar(),
child: Text(
"Contact Us",
style: GoogleFonts.poppins(
fontSize: 18,
fontWeight: FontWeight.w500,
),
),
),
],
),
SizedBox(
width: screenSize.width * 0.05,
),
SizedBox(
height: 50,
width: 200,
child: TextFormField(
decoration: InputDecoration(
labelText: "Search",
suffixIcon: const Icon(Icons.search),
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(width: 1, color: Colors.grey),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(15),
borderSide: const BorderSide(width: 1, color: Colors.grey),
),
),
),
),
const Spacer(),
],
),
),
);
}
ButtonStyle Color_button_appbar() {
return ButtonStyle(
foregroundColor:
MaterialStateProperty.resolveWith<Color>((Set<MaterialState> states) {
if (states.contains(MaterialState.hovered))
// ignore: curly_braces_in_flow_control_structures
return Colors.blue;
return Colors.black; // null throus error in flutter 2.2+.
}),
);
}
Text FooterHead(String title) => Text(
title,
style: GoogleFonts.poppins(
fontSize: 22, fontWeight: FontWeight.bold, letterSpacing: 2),
);
Column konten1(Size screenSize) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: screenSize.width * 0.1,
height: screenSize.height * 0.05,
child: FooterHead('Sitemap'),
),
const Spacer(
flex: 3,
),
TextButton(
onPressed: () {
_scrollToIndex(0);
},
child: FooterBody(
teks: 'Home',
)),
const Spacer(),
TextButton(
onPressed: () {
_scrollToIndex(440);
},
child: FooterBody(
teks: 'About Us',
)),
const Spacer(),
TextButton(
onPressed: () {
_scrollToIndex(770);
},
child: FooterBody(
teks: 'Solution',
)),
const Spacer(),
TextButton(
onPressed: () {
_scrollToIndex(3845);
},
child: FooterBody(
teks: 'Contact Us',
)),
const Spacer(
flex: 6,
),
],
);
}
Column konten2(Size screenSize) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: screenSize.width * 0.13,
height: screenSize.height * 0.05,
child: FooterHead('Solution')),
const Spacer(
flex: 3,
),
TextButton(
onPressed: () {
_scrollToIndex(1240);
},
child: FooterBody(
teks: 'Cloud Migration',
)),
const Spacer(),
TextButton(
onPressed: () {
_scrollToIndex(1240);
},
child: FooterBody(
teks: 'Consultation',
)),
const Spacer(),
TextButton(
onPressed: () {
_scrollToIndex(1240);
},
child: FooterBody(
teks: 'Local Support',
)),
const Spacer(),
TextButton(
onPressed: () {
_scrollToIndex(1240);
},
child: FooterBody(
teks: 'Cloud Implementation',
)),
const Spacer(
flex: 6,
),
],
);
}
}
import 'package:flutter/material.dart';
import 'package:show_up_animation/show_up_animation.dart';
import 'package:google_fonts/google_fonts.dart';
import '../widget/responsive.dart';
//
class Home extends StatelessWidget {
Home({Key? key, required this.wijet}) : super(key: key);
final Widget wijet;
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Stack(
children: [
Container(
width: screenSize.width,
height: screenSize.height * 0.7,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
"assets/images/depan.png",
),
fit: BoxFit.cover)),
),
Container(
width: screenSize.width * 0.5,
height: screenSize.height * 0.65,
padding: EdgeInsets.only(
left: screenSize.width * 0.1, top: screenSize.height * 0.02),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
'Cloud Consulting Services.',
style: GoogleFonts.poppins(
fontSize: 37,
fontWeight: FontWeight.bold,
color: Colors.white),
overflow: TextOverflow.ellipsis,
),
),
),
Container(
padding: EdgeInsets.only(top: 5),
width: screenSize.width * 0.5,
height: screenSize.height * 0.19,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.bounceIn,
direction: Direction.horizontal,
offset: -0.2,
child: Text(
'We help organizations in transforming their IT environments through the use of cost-effective Cloud services. Our expert team provides cutting-edge Cloud computing consulting services that help companies boost productivity to new heights.',
style: GoogleFonts.poppins(
fontSize: 14,
letterSpacing: 1.3,
height: 1.5,
fontWeight: FontWeight.w400,
color: Colors.white)),
),
),
Container(
width: screenSize.width * 0.5,
height: screenSize.height * 0.26,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
'Our Cloud managed services make it possible for organizations '
'to reduce their overheads and better productivity, in addition to lowering '
'costs and reducing time-to-market. We assist customers with our on-demand '
'enterprise Cloud solutions, tools, and applications such as servers, storage,'
' databases, networking, software, and apps, among others.',
style: GoogleFonts.poppins(
fontSize: 14,
letterSpacing: 1.3,
height: 1.5,
fontWeight: FontWeight.w400,
color: Colors.white)),
),
),
Container(
width: screenSize.width * 0.135,
height: screenSize.height * 0.07,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.bounceIn,
direction: Direction.horizontal,
offset: -0.2,
child: wijet),
)
],
),
),
],
);
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:multi_cloudv3/const/conts.dart';
class Home2 extends StatelessWidget {
const Home2({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
width: screenSize.width * 0.5,
height: 340,
padding: EdgeInsets.only(
left: screenSize.width * 0.10,
right: screenSize.width * 0.10,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
padding: const EdgeInsets.only(top: 20),
width: screenSize.width,
height: 80,
child: Text('How do we help?',
style: GoogleFonts.poppins(
fontSize: 27,
color: const Color.fromARGB(255, 12, 66, 101),
fontWeight: FontWeight.bold)),
),
Container(
width: screenSize.width,
height: 100,
child: Text(
'We are a one-stop Cloud service provider for world-class '
'Cloud services with diverse options which range from Cloud consulting '
'services to data center migration services. Besides, we can also seamlessly '
'scale and migrate your chosen application workloads.',
textAlign: TextAlign.justify,
style: GoogleFonts.poppins(
fontSize: 17, letterSpacing: 1.1, height: 1.4)),
),
Container(
width: screenSize.width,
height: 150,
child: Text(
'Instead of operating within the constraints of a single cloud vendor,'
' a multi-cloud strategy allows you to access the cloud services from '
'multiple cloud providers simultaneously. These cloud providers include Alibaba Cloud, '
'AWS, Azure, Google Cloud or Huawei Cloud. Using the wide range of leading-edge services '
'available from these providers on a single data set, attached to all clouds simultaneously, can boost'
' innovation and grow your business faster than if your data was locked into a single cloud.',
textAlign: TextAlign.justify,
style: GoogleFonts.poppins(
fontSize: 17, letterSpacing: 1.1, height: 1.4)),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class Home3_partner extends StatelessWidget {
const Home3_partner({super.key});
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return SizedBox(
height: screenSize.height * 0.8,
width: screenSize.width,
//color: Color.fromARGB(255, 0, 36, 192),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: screenSize.width,
height: screenSize.height * 0.2,
color: const Color.fromARGB(255, 12, 94, 149),
child: Center(
child: Column(
children: [
const Spacer(
flex: 1,
),
Text(
overflow: TextOverflow.ellipsis,
"Strategic Partnerships",
style: GoogleFonts.robotoCondensed(
color: Colors.white,
fontSize: 40,
fontWeight: FontWeight.bold),
),
const Spacer(
flex: 1,
),
Text(
overflow: TextOverflow.ellipsis,
"Our expertise and experience in dealing with the leading public cloud platforms make us a perfect choice for your business:",
style: GoogleFonts.robotoCondensed(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.w400,
letterSpacing: 1.1),
),
const Spacer(
flex: 1,
),
],
),
),
),
SizedBox(
height: screenSize.height * 0.3,
width: screenSize.width,
child: Row(
children: [
const Spacer(
flex: 1,
),
SizedBox(
width: screenSize.width * 0.3,
child: const Image(
image: AssetImage('assets/logo/alibaba.png'),
height: 42,
width: 148,
),
),
const Spacer(
flex: 1,
),
// BARIS 2
SizedBox(
width: screenSize.width * 0.3,
child: const Image(
image: AssetImage('assets/logo/googlecloud.png')),
),
const Spacer(
flex: 1,
),
],
),
),
// KOLOM 2
SizedBox(
height: screenSize.height * 0.3,
width: screenSize.width,
child: Row(
children: [
const Spacer(
flex: 1,
),
SizedBox(
width: screenSize.width * 0.3,
child: const Image(
image: AssetImage(
'assets/logo/huawei.png',
),
),
),
const Spacer(
flex: 1,
),
SizedBox(
width: screenSize.width * 0.3,
child: const Image(
image: AssetImage(
'assets/logo/aws.png',
),
height: 125,
width: 185,
),
),
const Spacer(
flex: 1,
),
],
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:multi_cloudv3/animation/animasi_kiri_kanan.dart';
import 'package:multi_cloudv3/animation/animasi_kanan_kiri.dart';
import 'package:show_up_animation/show_up_animation.dart';
class Home4_solution extends StatelessWidget {
const Home4_solution({
Key? key,
required this.screenSize,
}) : super(key: key);
final Size screenSize;
@override
Widget build(BuildContext context) {
return Container(
height: screenSize.height * 0.55,
width: screenSize.width,
color: Colors.grey[200],
child: Column(
children: [
const SizedBox(
height: 25,
),
Center(
child: Text("Why Choose Us?",
style: GoogleFonts.poppins(
fontSize: 29,
color: const Color(0xff1e5ea8),
fontWeight: FontWeight.bold)),
),
const SizedBox(
height: 20,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: screenSize.width * 0.2,
child: Column(
children: [
Container(
padding: EdgeInsets.only(top: screenSize.height * 0.01),
width: screenSize.width * 0.5,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.bounceIn,
direction: Direction.horizontal,
offset: -0.2,
child: Image.asset(
"assets/icons/icon1.png",
height: screenSize.height * 0.1,
),
),
),
const SizedBox(
height: 10,
),
Container(
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"MIGRATION",
style: GoogleFonts.poppins(
color: const Color(0xff1e5ea8),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
const SizedBox(
height: 10,
),
Container(
width: 200,
height: 100,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"We Experience in Data Migration Multi Cloud, Migration from Premise Environment.",
textAlign: TextAlign.center,
style: GoogleFonts.poppins(
color: const Color(0xff111111),
fontSize: 16,
),
),
),
)
],
),
),
Container(
width: screenSize.width * 0.2,
child: Column(
children: [
Container(
padding: EdgeInsets.only(top: screenSize.height * 0.01),
width: screenSize.width * 0.5,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.bounceIn,
direction: Direction.horizontal,
offset: -0.2,
child: Image.asset(
"assets/icons/icon2.png",
height: screenSize.height * 0.1,
),
),
),
const SizedBox(
height: 10,
),
Container(
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"CONSULTING",
style: GoogleFonts.poppins(
color: const Color(0xff1e5ea8),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
const SizedBox(
height: 10,
),
Container(
width: 200,
height: 100,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"Our experienced Cloud Consultants can help you determine the efficacy of and implement these popular cloud solutions.",
textAlign: TextAlign.center,
style: GoogleFonts.poppins(
color: const Color(0xff111111),
fontSize: 16,
),
),
),
)
],
),
),
Container(
width: screenSize.width * 0.2,
child: Column(
children: [
Container(
padding: EdgeInsets.only(top: screenSize.height * 0.01),
width: screenSize.width * 0.5,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.bounceIn,
direction: Direction.horizontal,
offset: -0.2,
child: Image.asset(
"assets/icons/icon3.png",
height: screenSize.height * 0.1,
),
),
),
const SizedBox(
height: 10,
),
Container(
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"LOCAL SUPPORT",
style: GoogleFonts.poppins(
color: const Color(0xff1e5ea8),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
const SizedBox(
height: 10,
),
Container(
width: 200,
height: 100,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"Our local support team works with our clients every step of the way to ensure that their cloud is running smoothly.",
textAlign: TextAlign.center,
style: GoogleFonts.poppins(
color: const Color(0xff111111),
fontSize: 16,
),
),
),
)
],
),
),
Container(
width: screenSize.width * 0.2,
child: Column(
children: [
Container(
padding: EdgeInsets.only(top: screenSize.height * 0.01),
width: screenSize.width * 0.5,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
curve: Curves.bounceIn,
direction: Direction.horizontal,
offset: -0.2,
child: Image.asset(
"assets/icons/icon4.png",
height: screenSize.height * 0.1,
),
),
),
const SizedBox(
height: 10,
),
Container(
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"IMPLEMENTATION",
style: GoogleFonts.poppins(
color: const Color(0xff1e5ea8),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
const SizedBox(
height: 10,
),
Container(
width: 200,
height: 100,
child: ShowUpAnimation(
delayStart: const Duration(seconds: 1),
direction: Direction.horizontal,
child: Text(
"We do all cloud services such as Infrastructure (IAAS), Platform (PAAS), and Software (SAAS).",
textAlign: TextAlign.center,
style: GoogleFonts.poppins(
color: const Color(0xff111111),
fontSize: 16,
),
),
),
)
],
),
),
],
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/const/conts.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:multi_cloudv3/widget/expansion.dart';
// final List<String> items = [
// '- Retail',
// '- Consumer packaged goods',
// ];
// String? selectedValue;
class Home5_industry extends StatefulWidget {
const Home5_industry({Key? key}) : super(key: key);
@override
State<Home5_industry> createState() => _Home5_industryState();
}
class _Home5_industryState extends State<Home5_industry> {
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
String dropdownValue = 'Non Financial Services';
return Container(
height: 899,
width: screenSize.width,
child: Column(
children: [
const SizedBox(
height: 20,
),
Center(
child: (Text(
"VARIOUS INDUSTRY AND SECTORS",
style: GoogleFonts.poppins(
fontSize: 36,
color: const Color(0xff1e5ea8),
fontWeight: FontWeight.bold,
),
)),
),
Container(
padding: EdgeInsets.symmetric(
horizontal: screenSize.width * 0.15, vertical: 20),
child: Text(
'Each industry has a unique request. We are ready to assist and provide specific requirements based on the client\'s needs, from the first discussion to providing expert consultants.',
style: GoogleFonts.poppins(fontSize: 17),
textAlign: TextAlign.center,
),
),
Container(
width: screenSize.width * 0.6,
child: Expansionpanel(),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:multi_cloudv3/const/conts.dart';
class Home6_advantages extends StatelessWidget {
const Home6_advantages({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
color: const Color.fromARGB(255, 227, 235, 253),
height: 660,
padding: const EdgeInsets.all(10),
width: screenSize.width,
child: Column(
children: [
const SizedBox(
height: 15,
width: 10,
),
Center(
child: Text("Why Multi Cloud Solutions",
style: GoogleFonts.poppins(
fontSize: 33,
color: const Color.fromARGB(255, 12, 66, 101),
fontWeight: FontWeight.bold)),
),
const SizedBox(
height: 25,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
decoration: BoxDecoration(
color: const Color.fromARGB(100, 255, 236, 236),
borderRadius: BorderRadius.circular(10)),
padding: const EdgeInsets.all(20),
height: 255,
width: screenSize.width * 0.40,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Efficiency Improvement",
style: GoogleFonts.poppins(
fontSize: 20, fontWeight: FontWeight.bold),
),
const SizedBox(
height: 10,
),
Container(
width: screenSize.width,
height: 175,
child: Text(
"Cloud technology eliminates all these hassles. Cloud storage providers have the necessary infrastructure to store your data. These providers also handle the security and maintenance for you! This means you can focus more on your core business instead of buying and maintaining storage devices. Simply use the space you want and pay only for what you use.",
textAlign: TextAlign.justify,
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 16,
letterSpacing: 1,
height: 1.4),
),
),
],
),
),
const SizedBox(
height: 10,
width: 10,
),
Container(
padding: const EdgeInsets.all(20),
decoration: const BoxDecoration(
// borderRadius: BorderRadius.circular(10),
color: Colors.white),
height: 255,
width: screenSize.width * 0.40,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Better Scalability",
style: GoogleFonts.poppins(
fontSize: 20, fontWeight: FontWeight.bold),
),
const SizedBox(
height: 10,
),
Container(
width: screenSize.width,
height: 175,
child: Text(
"The virtually limitless storage and compute resources available in the cloud give organizations the flexibility to scale up or down to address changing business situations. This flexibility enables a company to quickly grow to handle increased customer demand and save money by scaling down resource use when appropriate.",
textAlign: TextAlign.justify,
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 16,
letterSpacing: 1,
height: 1.4),
),
),
],
),
),
const SizedBox(
height: 10,
width: 10,
),
],
),
const SizedBox(
height: 10,
width: 10,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
padding: const EdgeInsets.all(20),
decoration: const BoxDecoration(
// borderRadius: BorderRadius.circular(10),
color: Colors.white),
height: 255,
width: screenSize.width * 0.40,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Agility & Adaptability",
style: GoogleFonts.poppins(
fontSize: 20, fontWeight: FontWeight.bold),
),
const SizedBox(
height: 10,
),
Container(
width: screenSize.width,
height: 175,
child: Text(
"Cloud services allow you to focus on important aspects of your business without having to worry about IT solutions. Relying on an external cloud computing company to manage your cloud infrastructure and host your data and applications will enable you to fully commit to achieving your business objectives.",
textAlign: TextAlign.justify,
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 16,
letterSpacing: 1,
height: 1.4),
),
),
],
),
),
const SizedBox(
height: 10,
width: 10,
),
Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: const Color.fromARGB(255, 0, 70, 150)),
height: 255,
width: screenSize.width * 0.40,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Faster Development Cycles",
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
const SizedBox(
height: 10,
),
Container(
width: screenSize.width,
height: 175,
child: Text(
"The collaboration and efficiency possible with cloud platforms will often result in faster development cycles. This enables companies to take advantage of emerging trends and more efficiently address customer demands and expectations. In today’s competitive market, the ability to bring products to market promptly can be the difference between success and failure.",
textAlign: TextAlign.justify,
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 16,
letterSpacing: 1,
height: 1.4),
),
),
],
),
),
const SizedBox(
height: 10,
width: 10,
),
],
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../text/text_body.dart';
import 'package:url_launcher/url_launcher.dart';
class Home7_news extends StatefulWidget {
const Home7_news({Key? key}) : super(key: key);
@override
State<Home7_news> createState() => _Home7_newsState();
}
class _Home7_newsState extends State<Home7_news> {
void launchNews({
required String WebsiteUrl,
}) async {
String url() {
return WebsiteUrl;
}
if (await canLaunch(url())) {
await launch(url());
} else {
throw 'Could not launch ${url()}';
}
}
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
padding: const EdgeInsets.symmetric(vertical: 30, horizontal: 50),
height: 680,
color: Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 29, 59, 189),
borderRadius: BorderRadius.circular(30),
),
width: screenSize.width * 0.25,
height: 500,
child: Column(
children: [
Container(
height: 250,
decoration: BoxDecoration(
image: const DecorationImage(
image: AssetImage('assets/images/eksad.jpg'),
fit: BoxFit.cover),
borderRadius: BorderRadius.circular(30),
),
),
Container(
height: 90,
width: screenSize.width * 0.24,
padding:
const EdgeInsets.only(top: 20, right: 20, left: 20),
child: Text('Top Performing Partner of the year',
style: GoogleFonts.poppins(
color: Colors.white, fontSize: 24),
textAlign: TextAlign.center),
),
Container(
height: 100,
padding: const EdgeInsets.symmetric(
vertical: 20, horizontal: 20),
child: Text(row1,
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 17,
height: 1.2,
letterSpacing: 1.2),
textAlign: TextAlign.center),
),
TextButton(
onPressed: () {
launchNews(
WebsiteUrl:
'https://www.linkedin.com/feed/update/urn:li:share:6938149543133802497?utm_source=linkedin_share&utm_medium=member_desktop_share&utm_content=post');
},
child: const Text(
'READ MORE',
style: TextStyle(
fontSize: 18,
decoration: TextDecoration.underline,
color: Colors.white),
))
],
),
),
Container(
decoration: BoxDecoration(
color: Colors.grey,
borderRadius: BorderRadius.circular(30),
),
width: screenSize.width * 0.25,
height: 500,
child: Column(
children: [
Container(
height: 250,
decoration: BoxDecoration(
image: const DecorationImage(
image: AssetImage('assets/images/news2.jpg'),
fit: BoxFit.fill),
borderRadius: BorderRadius.circular(30),
),
),
Container(
height: 90,
width: screenSize.width * 0.24,
padding:
const EdgeInsets.only(top: 20, right: 20, left: 20),
child: Text(
'Cloud Demand in \n Indonesia is Predicted to Continue to Increase',
style: GoogleFonts.poppins(
color: Colors.black, fontSize: 24),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
),
),
Container(
height: 100,
padding: const EdgeInsets.symmetric(
vertical: 20, horizontal: 20),
child: Text(row2,
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 17,
height: 1.2,
letterSpacing: 1.2),
textAlign: TextAlign.center),
),
TextButton(
onPressed: () {
launchNews(
WebsiteUrl:
"https://inet.detik.com/business/d-6219553/kebutuhan-cloud-di-indonesia-diprediksi-terus-melesat");
},
child: const Text(
'READ MORE',
style: TextStyle(
fontSize: 18,
decoration: TextDecoration.underline,
color: Colors.black),
))
],
),
),
Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 29, 59, 189),
borderRadius: BorderRadius.circular(30),
),
width: screenSize.width * 0.25,
height: 500,
child: Column(
children: [
Container(
height: 250,
decoration: BoxDecoration(
image: const DecorationImage(
image: AssetImage('assets/images/news3.jpg'),
fit: BoxFit.fill),
borderRadius: BorderRadius.circular(30),
),
),
Container(
height: 90,
width: screenSize.width * 0.24,
padding:
const EdgeInsets.only(top: 20, right: 20, left: 20),
child: Text('Advancing Indonesia’s clouds',
style: GoogleFonts.poppins(
color: Colors.white, fontSize: 24),
textAlign: TextAlign.center),
),
Container(
height: 100,
padding: const EdgeInsets.symmetric(
vertical: 20, horizontal: 20),
child: Text(row3,
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 17,
height: 1.2,
letterSpacing: 1.2),
textAlign: TextAlign.center),
),
TextButton(
onPressed: () {
launchNews(
WebsiteUrl:
'https://www.thejakartapost.com/front-row/2022/05/23/advancing-indonesias-cloud-and-data-center-services.html');
},
child: const Text(
'READ MORE',
style: TextStyle(
fontSize: 18,
decoration: TextDecoration.underline,
color: Colors.white),
))
],
),
),
],
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
// import 'package:multi_cloud/widget/botton.dart';
// import 'package:multi_cloud/const/conts.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:multi_cloudv3/widget/button_color.dart';
class Home8_contact_us extends StatelessWidget {
Home8_contact_us({Key? key}) : super(key: key);
final _formKey = GlobalKey<FormState>();
final nameController = TextEditingController();
final phoneController = TextEditingController();
final emailController = TextEditingController();
final messageController = TextEditingController();
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
height: 445,
width: screenSize.width,
// color: Colors.blue,
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: <Color>[
Color(0xff137fc2),
Color(0xff3958d5),
Color(0xff184b80),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
)),
child: Row(
children: [
const Spacer(
flex: 3,
),
Container(
height: screenSize.height * 0.7,
width: screenSize.width * 0.35,
child: Container(
padding: const EdgeInsets.all(10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Spacer(
flex: 1,
),
Text("Leave your contact info and",
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 25,
fontWeight: FontWeight.bold)),
const Spacer(
flex: 1,
),
Text("Let's Discuss Business",
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 40,
// fontWeight: FontWeight.bold,
letterSpacing: 1.1)),
const Spacer(
flex: 1,
),
Text(
"We’ll contact you immediately to discuss potential business",
style: GoogleFonts.poppins(
color: Colors.white, fontSize: 23)),
const Spacer(
flex: 2,
),
],
),
),
),
const Spacer(),
Container(
padding: const EdgeInsets.all(20),
height: screenSize.height * 0.75,
width: screenSize.width * 0.45,
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
child: Text(
"Name",
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.w400),
),
),
Container(
width: 450,
child: TextFormField(
controller: nameController,
decoration: const InputDecoration(
hintText: "Enter your Name",
fillColor: Colors.white,
filled: true,
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide: BorderSide(width: 1, color: Colors.white),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide: BorderSide(width: 1, color: Colors.white),
),
),
),
),
const SizedBox(
height: 20,
),
Row(
children: [
Container(
child: Text(
"Phone Number",
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.w400),
),
),
const SizedBox(
width: 92,
),
Container(
child: Text(
"Email",
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.w400),
),
),
],
),
Row(
children: [
Container(
width: 220,
child: TextFormField(
controller: phoneController,
decoration: const InputDecoration(
hintText: "Enter a valid phone number",
fillColor: Colors.white,
filled: true,
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide:
BorderSide(width: 1, color: Colors.white),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide:
BorderSide(width: 1, color: Colors.white),
),
),
),
),
const SizedBox(
width: 7,
),
Container(
width: 220,
child: TextFormField(
controller: emailController,
decoration: const InputDecoration(
hintText: "Enter a valid email address",
fillColor: Colors.white,
filled: true,
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide:
BorderSide(width: 1, color: Colors.white),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide:
BorderSide(width: 1, color: Colors.white),
),
),
),
),
const SizedBox(
height: 20,
),
],
),
const SizedBox(
height: 20,
),
Text(
"Message",
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.w400),
),
Container(
width: 450,
child: TextFormField(
controller: messageController,
decoration: const InputDecoration(
hintText: "Enter your message",
fillColor: Colors.white,
filled: true,
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide: BorderSide(width: 1, color: Colors.white),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide: BorderSide(width: 1, color: Colors.white),
),
),
maxLines: 5,
validator: (value) {
if (value == null || value.isEmpty) {
return '*Required';
}
return null;
},
),
),
const SizedBox(
height: 10,
),
SizedBox(
height: 45,
width: 100,
child: TextButton(
style: Btn_Submit(),
// shape: MaterialStateProperty.resolveWith(
// (ShapeBorder) => RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(15))),
// overlayColor: MaterialStateProperty.resolveWith<Color?>(
// (Set<MaterialState> states) {
// if (states.contains(MaterialState.hovered))
// return Colors.red;
// return Colors.white;
// },
// ),
// primary: Colors.white,
// backgroundColor:
// const Color.fromARGB(255, 12, 66, 101),
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(15),
// ),
onPressed: () async {
if (_formKey.currentState!.validate()) {
final response = await SendEmail(
nameController.value.text,
phoneController.value.text,
emailController.value.text,
messageController.value.text);
ScaffoldMessenger.of(context).showSnackBar(
response == 200
? const SnackBar(
content: Text('Message Sent!'),
backgroundColor: Colors.green)
: const SnackBar(
content: Text('Failed to send message!'),
backgroundColor: Colors.red),
);
nameController.clear();
phoneController.clear();
emailController.clear();
messageController.clear();
}
},
child: Text(
'Submit',
style: GoogleFonts.poppins(
fontSize: 16, color: Colors.white),
),
),
),
],
),
),
),
const Spacer(
flex: 3,
),
],
),
);
}
Future SendEmail(
String name, String phone, String email, String message) async {
final url = Uri.parse('https://api.emailjs.com/api/v1.0/email/send');
const serviceId = 'service_zfjchwr';
const templateId = 'template_1wbd3w9';
const userId = 'DP7R9Yu0J2SBQu2DC';
final response = await http.post(url,
headers: {
'Content-Type': 'application/json'
}, //This line makes sure it works for all platforms.
body: json.encode({
'service_id': serviceId,
'template_id': templateId,
'user_id': userId,
'template_params': {
'from_name': name,
'from_phone': phone,
'to_email': email,
'message': message
}
}));
return response.statusCode;
}
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/dashboard/dashboard.dart';
import 'package:multi_cloudv3/screen/footer.dart';
import 'package:multi_cloudv3/widget/responsive.dart';
import 'package:multi_cloudv3/screen/appbar.dart';
import 'package:multi_cloudv3/text/text_post.dart';
import 'package:multi_cloudv3/main.dart';
class PostBody extends StatelessWidget {
final String Imagez;
final String HeadText;
final String Tanggal;
final String Bodyfull;
final String Urutan;
const PostBody({
Key? key,
required this.Imagez,
required this.HeadText,
required this.Tanggal,
required this.Bodyfull,
required this.Urutan,
}) : super(key: key);
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Scaffold(
appBar: ResponsiveWidget.isSmallScreen(context)
? AppbarSmallSize(screenSize)
: PreferredSize(
preferredSize: Size(screenSize.width, 110),
child: Row(
children: [
SizedBox(
width: screenSize.width * 0.02,
),
Container(
padding:
const EdgeInsets.only(left: 30, top: 20, bottom: 20),
child: Image.asset("assets/logo/multicloudsolution.jpg"),
),
const Spacer(
flex: 7,
),
IconButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const Dashboard(),
),
);
},
icon: const Icon(
Icons.brightness_low_sharp,
color: Colors.white,
))
],
),
),
body: ListView(
children: [
SingleChildScrollView(
padding: const EdgeInsets.only(left: 70, right: 70),
controller: ScrollController(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: const EdgeInsets.only(top: 3),
height: 90,
child: Row(
children: [
SizedBox(
height: 20,
child: TextButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const MyApp(),
),
);
},
child: const Text(
'Home',
style:
TextStyle(color: Colors.red, fontSize: 17),
))),
Container(
padding: const EdgeInsets.only(top: 1),
height: 20,
child: const Text(
' > ',
style: TextStyle(color: Colors.red, fontSize: 17),
),
),
Container(
height: 20,
child: TextButton(
onPressed: () {
Navigator.pushNamed(context, '/news');
},
child: const Text(
'News',
style: TextStyle(color: Colors.red, fontSize: 17),
),
),
),
Container(
padding: const EdgeInsets.only(top: 1),
height: 20,
child: const Text(
' > ',
style: TextStyle(color: Colors.red, fontSize: 17),
),
),
Container(
height: 20,
child: Text(
Urutan,
style:
const TextStyle(color: Colors.red, fontSize: 17),
),
)
],
),
),
Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(Imagez), fit: BoxFit.cover),
),
height: 450,
),
Container(
padding: const EdgeInsets.symmetric(vertical: 19),
child: Text(
HeadText,
style: const TextStyle(
fontSize: 40,
fontWeight: FontWeight.bold,
color: Color.fromARGB(200, 4, 4, 52),
),
),
),
Container(
child: Text(
Tanggal,
style: const TextStyle(fontSize: 18),
),
),
Container(
padding: const EdgeInsets.symmetric(vertical: 19),
child: Text(
Bodyfull,
style: const TextStyle(fontSize: 20, height: 1.5),
),
),
],
),
),
Footer(
content1: Container(),
content2: Container(),
),
],
),
);
}
}
String whiteline =
'The mission is to be an establish excellent end to end IT Services '
'to enable clients to grow their business rapidly '
'thru high competence and professional resources.';
String redline = 'Our comprehensive cloud migration framework brings '
'industrialized capabilities together with '
'exclusive pre-configured industry-specific tools, methods, and automation '
'across all cloud models and multiple delivery methods (IaaS, PaaS, and SaaS).';
String row1 =
"Thank you Alibaba Cloud, Indonet our Distributor and all beloved customer for your strong support to Eksad..";
String row2 =
'Although invisible, cloud computing is in the daily life of most people.';
// 'EKSAD provides tailored services focusing on clients’ '
// 'specific demands in international and domestic markets.'
// 'It’s time to bridge the gap and communicate with your '
// 'business across channels.';
String row3 =
'The world\'s data center and cloud services industry players are focusing on developing their businesses in.';
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
String headgrid1 = 'Our Company';
String headgrid2 = 'Carries';
String headgrid3 = 'Logistics';
String headgrid4 = 'EKSAD Partner';
String headgrid5 = 'Why EKSAD Cloud Service';
String headgrid6 = 'About EKSAD IT';
String headgrid7 = 'Alibaba Cloud Award';
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
String bodygrid1 = 'Eksad providing services high quality based '
'on strong experience ... ';
// 'in the industry and technology. '
// 'Building the right IT Service Solution to enable it '
// 'Partners in speeding up business development';
String bodygrid2 = 'EKSAD provides tailored services focusing on clients’ '
'specific demands ... ';
// 'in international and domestic markets.'
// 'It’s time to bridge the gap and communicate with your '
// 'business across channels.';
String bodygrid3 = 'Generally the detailed organization and implementation '
'of a complex operation. In a general business sense, logistics is ... ';
// 'the point of consumption to meet the requirements of customers or corporations.';
String bodygrid4 = 'EKSAD partner in technology: '
'\n'
'1. Alibaba Cloud '
'2. Google Cloud '
'3. Huawei Cloud ...'
'\n ';
String bodygrid5 = 'Flexibility to choose cloud service ... ';
String bodygrid6 =
'EKSAD provides solutions and professional IT resource partners, which provides competent IT experts ...';
// 'which provides IT experts who are competent in working on company projects '
// 'and have proven technical knowledge. '
// 'EKSAD IT resources also help you improve service performance '
// 'and offer increased flexibility in workforce management.';
String bodygrid7 = 'Thanks to the reliability and extensive ability '
'to deploy solutions from Alibaba Cloud ...'
'\n';
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
String bodyfull1 = 'EKSAD providing services high quality based '
'on strong experience in the industry and technology. '
'Building the right IT service solution to enable it '
'partners in speeding up business development.'
'\n'
'\n'
'EKSAD provides solutions and professional IT resource partners, '
'which provides IT experts who are competent in working on company projects '
'and have proven technical knowledge. '
'\n'
'\n'
'EKSAD IT resources also help you improve service performance '
'and offer increased flexibility in workforce management. '
'Build enterprise-grade containerized applications faster with '
'best-in-class managed kubernetes and serverless platform on cloud '
'and on-premises environments. You can build a fast, scalable software '
'delivery pipeline no matter where you run by seamlessly implementing DevOps '
'and SRE practices with cloud-native tooling and expert guidance.'
'\n';
String bodyfull2 = 'EKSAD provides tailored services focusing on clients’ '
'specific demands in international and domestic markets. '
'It’s time to bridge the gap and communicate with your '
'business across channels. '
'\n'
'\n'
'Multicloud - the use of cloud services from two or '
'more vendors - gives organizations more flexibility to optimize performance, '
'control costs, and leverage the best cloud technologies available.'
'\n';
String bodyfull3 = 'Generally the detailed organization and implementation '
'of a complex operation. In a general business sense, logistics is '
'the point of consumption to meet the requirements of customers or corporations. '
'\n'
'\n'
'Multicloud is the use of cloud services from more than one cloud vendor. '
'It can be as simple as using software-as-a-service (SaaS) from different cloud vendors – '
'e.g., salesforce and workday. But in the enterprise, multicloud typically refers to '
'running enterprise applications on platform-as-a-service (PaaS) or infrastructure-as-a-service '
'(IaaS) from multiple cloud service providers, such as Amazon Web Services (AWS), '
'Google Cloud Platform, IBM Cloud and Microsoft Azure.'
'\n';
String bodyfull4 = 'EKSAD Partner in technology: '
'\n'
'1. Alibaba Cloud'
'\n'
'2. Google Cloud'
'\n'
'3. Huawei Cloud'
'\n'
'4. AWS Cloud '
'\n ';
String bodyfull5 =
'Flexibility to select cloud services from different cloud providers '
'based on the combination of pricing, performance, security, '
'and compliance requirements, geographic location that best suited to business.'
'\n';
String bodyfull6 =
'EKSAD provides solutions and professional IT resource partners, '
'which provide IT experts who are competent in working on company projects '
'and have proven technical knowledge. '
'EKSAD IT resources also help you improve service performance '
'and offer increased flexibility in workforce management. '
'\n'
'\n'
'Our Advantages:'
'\n'
'1. Speed'
'\n'
'Fulfillment of resources a maximum of 3 months from PO'
'\n'
'\n'
'2. Integrity & Commitment'
'\n'
'Resources with high integrity and commitment in completing tasks'
'\n'
'\n'
'3. Competent'
'\n'
'Trained and certified resources'
'\n'
'\n'
'4. Flexibility'
'\n'
'Flexibility for clients who will recruit resources to become permanent employees'
'\n'
'\n'
'5. Focus Business'
'\n'
'Helping clients to focus on their main business activities'
'\n'
'\n'
'6. Competitive Cost'
'\n'
'Competitive price evaluated every 2 years'
'\n';
String bodyfull7 = 'Thanks to the reliability and extensive ability '
'to deploy solutions from Alibaba Cloud '
'to dozens of client companies. '
'EKSAD received an award from Alibaba as the top performer of the year. '
'\n';
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
String tanggal = '22 July 2022';
String tanggal2 = '21 July 2022';
String tanggal3 = '20 July 2022';
String tanggal4 = '19 July 2022';
String tanggal5 = '18 July 2022';
String tanggal6 = '17 July 2022';
String tanggal7 = '1 August 2022';
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
String urutan1 = headgrid1;
String urutan2 = headgrid2;
String urutan3 = headgrid3;
String urutan4 = headgrid4;
String urutan5 = headgrid5;
String urutan6 = headgrid6;
String urutan7 = headgrid7;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import 'package:flutter/material.dart';
import '../const/conts.dart';
class Botton_tombol2 extends StatelessWidget {
Botton_tombol2({
Key? key,
required this.title,
}) : super(key: key);
final String title;
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
child: ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
),
primary: const Color.fromARGB(255, 255, 47, 0)),
onPressed: () {},
child: Container(
padding: const EdgeInsets.all(20),
child: Text(
title,
style: const TextStyle(
fontSize: 15, fontWeight: FontWeight.bold, color: Colors.white),
),
),
),
);
}
}
class Botton_tombol extends StatelessWidget {
Botton_tombol({
Key? key,
required this.title,
}) : super(key: key);
final String title;
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Container(
child: ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
),
primary: kPrimaryColor),
onPressed: () {},
child: Container(
padding: const EdgeInsets.all(20),
child: Text(
title,
style: const TextStyle(
fontSize: 15, fontWeight: FontWeight.bold, color: Colors.white),
),
),
),
);
}
}
import 'package:flutter/material.dart';
ButtonStyle DefaultColors() {
return ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
return const Color(0xff1e5ea8); // Defer to the widget's default.
},
),
overlayColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.hovered))
return Colors.red; //<-- SEE HERE
return null; // Defer to the widget's default.
},
),
);
}
ButtonStyle Btn_Submit() {
return ButtonStyle(
shape: MaterialStateProperty.resolveWith((ShapeBorder) =>
RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))),
backgroundColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
return const Color(0xff1e5ea8); // Defer to the widget's default.
},
),
overlayColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.hovered))
return Colors.red; //<-- SEE HERE
return null; // Defer to the widget's default.
},
),
);
}
import 'package:flutter/material.dart';
import 'package:multi_cloudv3/text/text_post.dart';
class GridContainer extends StatelessWidget {
const GridContainer(
{Key? key,
required this.HeadGrid,
required this.ImageGrid,
required this.BodyGrid,
required this.arah})
: super(key: key);
final String HeadGrid;
final String ImageGrid;
final String BodyGrid;
final Widget arah;
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(8),
//color: Colors.teal[100],
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => arah,
),
);
},
child: Text(HeadGrid,
style: const TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: Colors.black))),
const SizedBox(
height: 2,
),
TextButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => arah,
),
);
},
child: Container(
width: 350,
height: 220,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(ImageGrid), fit: BoxFit.fitHeight),
),
),
),
Container(
width: 350,
height: 65,
padding: const EdgeInsets.only(top: 10, left: 10, right: 10),
child: Text(BodyGrid),
),
TextButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => arah,
),
);
},
child: const Text(
'READ MORE',
style: TextStyle(
decoration: TextDecoration.underline, color: Colors.black),
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import '../const/conts.dart';
class En extends StatefulWidget {
const En({Key? key}) : super(key: key);
@override
_EnState createState() => _EnState();
}
class _EnState extends State<En> {
String dropdownvalue = 'Home';
var items = [
'Home',
'About Us',
'Solution',
'Contact Us',
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
DropdownButton(
underline: Container(color: Colors.transparent),
value: dropdownvalue,
icon: const Icon(Icons.keyboard_arrow_down),
items: items.map((String items) {
return DropdownMenuItem(
value: items,
child: Container(
child: Text(
items,
style: const TextStyle(
fontSize: 17,
fontWeight: FontWeight.bold,
color: kTextColor),
),
),
);
}).toList(),
onChanged: (String? newValue) {
setState(() {
dropdownvalue = newValue!;
});
},
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class Expansionpanel extends StatefulWidget {
Expansionpaneltate createState() => Expansionpaneltate();
}
class Expansionpaneltate extends State<Expansionpanel> {
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ExpansionPanelList.radio(
initialOpenPanelValue: 'Financial Services',
expansionCallback: (int index, bool isExpanded) {
setState(() {
items[index].isExpanded = isExpanded;
});
},
children: items.map((ExpansionpanelItem item) {
return ExpansionPanelRadio(
backgroundColor: Colors.grey[200],
canTapOnHeader: true,
value: item.title,
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
leading: item.leading,
title: Text(
item.title,
textAlign: TextAlign.left,
style: GoogleFonts.poppins(
fontSize: 16.0,
fontWeight: FontWeight.w600,
),
));
},
//isExpanded: item.isExpanded,
body: item.content,
);
}).toList(),
),
),
);
}
}
List<ExpansionpanelItem> items = <ExpansionpanelItem>[
ExpansionpanelItem(
isExpanded: false,
title: 'Non Financial Services',
content: Padding(
padding: const EdgeInsets.only(left: 20),
child: Column(children: <Widget>[
_posisi('Ritel'),
_posisi('Consumer packaged goods'),
_posisi('Manufacturing'),
_posisi('Automotive'),
_posisi('Supply chain and logistics'),
_posisi('Energy'),
_posisi('Healthcare and life sciences'),
_posisi('Media and entertainment'),
_posisi('Gaming'),
_posisi('Telecomunications'),
])),
leading: const Icon(Icons.computer)),
ExpansionpanelItem(
isExpanded: false,
title: 'Financial Services',
content: Padding(
padding: const EdgeInsets.only(left: 20),
child: Column(children: <Widget>[
_posisi('Banking'),
_posisi('Multifinance'),
_posisi('Fintech'),
_posisi('Financial Lending'),
])),
leading: const Icon(Icons.manage_accounts)),
ExpansionpanelItem(
isExpanded: false,
title: 'Goverment and public sector',
content: Padding(
padding: const EdgeInsets.only(left: 20),
child: Column(children: <Widget>[
_posisi('Goverment'),
_posisi('State and local goverment'),
_posisi('Education'),
_posisi('Education technology'),
])),
leading: const Icon(Icons.comment_outlined)),
];
Container _judulposisi() {
return Container(
width: 1400,
child: Text(
'Position: ',
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: 16.0,
fontWeight: FontWeight.w400,
),
),
);
}
ListTile _posisi(String namaposisi) {
return ListTile(
leading: Container(
padding: const EdgeInsets.only(top: 7),
child: const Icon(
Icons.circle,
size: 10,
color: Colors.black,
)),
title: Text(
namaposisi,
style: GoogleFonts.poppins(
fontWeight: FontWeight.w500, fontSize: 16, letterSpacing: 1.2),
),
);
}
class ExpansionpanelItem {
ExpansionpanelItem(
{required this.isExpanded,
required this.title,
required this.content,
required this.leading});
bool isExpanded;
final String title;
final Widget content;
final Icon leading;
}
import 'package:flutter/material.dart';
class FilterButton extends StatefulWidget {
const FilterButton({Key? key}) : super(key: key);
@override
State<FilterButton> createState() => _FilterState();
}
class _FilterState extends State<FilterButton> {
@override
Widget build(BuildContext context) {
return ClipRRect(
borderRadius: BorderRadius.circular(4),
child: Stack(
children: <Widget>[
Positioned.fill(
child: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: <Color>[
Color(0xFF42A5F5),
Color(0xFF145A91),
],
),
),
),
),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
primary: Colors.black,
backgroundColor: Colors.blue,
textStyle: const TextStyle(fontSize: 15),
),
onPressed: () {},
child: const Text("Filter"),
),
],
),
);
}
}
import 'package:flutter/material.dart';
class ResponsiveWidget extends StatelessWidget {
final Widget largeScreen;
final Widget smallScreen;
const ResponsiveWidget({
Key? key,
required this.largeScreen,
required this.smallScreen,
}) : super(key: key);
static bool isSmallScreen(BuildContext context) {
return MediaQuery.of(context).size.width <= 1200;
}
static bool isLargeScreen(BuildContext context) {
return MediaQuery.of(context).size.width > 1200;
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 1200) {
return largeScreen;
} else {
return smallScreen;
}
},
);
}
}
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:spring/spring.dart';
class WAChat extends StatelessWidget {
WAChat({Key? key}) : super(key: key);
void launchWhatsApp({
required final int phone,
required String message,
}) async {
String url() {
return "https://api.whatsapp.com/send?phone=$phone&text=${Uri.parse(message)}";
}
if (await canLaunch(url())) {
await launch(url());
} else {
throw 'Could not launch ${url()}';
}
}
final SpringController springController =
SpringController(initialAnim: Motion.play);
@override
Widget build(BuildContext context) {
return FloatingActionButton(
onPressed: () {
launchWhatsApp(
phone: 6281807890777,
message:
'Hallo, saya tertarik dengan produk EKSAD dan saya ingin tahu lebih lanjut tentang program Multi Cloud Solution');
},
backgroundColor: Colors.green,
child: GestureDetector(
onTap: () {
springController.play(
motion: Motion.reverse,
animDuration: const Duration(milliseconds: 1000),
curve: Curves.easeInBack,
delay: const Duration(milliseconds: 100));
launchWhatsApp(
phone: 6281807890777,
message:
'Hallo, saya tertarik dengan produk EKSAD dan saya ingin tahu lebih lanjut tentang program Multi Cloud Solution');
},
child: Spring.rotate(
endAngle: 360 * 10,
animDuration: const Duration(seconds: 3 * 10),
springController: springController,
alignment: Alignment.center,
animStatus: (AnimStatus status) {},
child: const Icon(Icons.whatsapp, size: 30),
),
),
);
}
}
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.8.2"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.16.0"
cross_file:
dependency: transitive
description:
name: cross_file
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.3+1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.2"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
dio:
dependency: "direct main"
description:
name: dio
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.6"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.4"
file_picker:
dependency: "direct main"
description:
name: file_picker
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.1"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_lints:
dependency: "direct dev"
description:
name: flutter_lints
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.7"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
fly_animation:
dependency: "direct main"
description:
name: fly_animation
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.2"
font_awesome_flutter:
dependency: "direct main"
description:
name: font_awesome_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "10.1.0"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
http:
dependency: "direct main"
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.5"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.1"
image_picker:
dependency: "direct main"
description:
name: image_picker
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.5+3"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.5+2"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.8"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.5+6"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.6.1"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
lints:
dependency: transitive
description:
name: lints
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.11"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.4"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
path_provider:
dependency: transitive
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.19"
path_provider_ios:
dependency: transitive
description:
name: path_provider_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.7"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.6"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.4"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.11.1"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
url: "https://pub.dartlang.org"
source: hosted
version: "10.0.0"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
url: "https://pub.dartlang.org"
source: hosted
version: "10.0.0"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
url: "https://pub.dartlang.org"
source: hosted
version: "9.0.4"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "3.7.0"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.4"
show_up_animation:
dependency: "direct main"
description:
name: show_up_animation
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
side_navigation:
dependency: "direct main"
description:
name: side_navigation
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
simple_animations:
dependency: transitive
description:
name: simple_animations
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.1"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.2"
spring:
dependency: "direct main"
description:
name: spring
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
supercharged:
dependency: transitive
description:
name: supercharged
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
supercharged_dart:
dependency: transitive
description:
name: supercharged_dart
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.9"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
universal_platform:
dependency: transitive
description:
name: universal_platform
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0+1"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.5"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.17"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.17"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.7.0"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+1"
sdks:
dart: ">=2.17.5 <3.0.0"
flutter: ">=3.0.0"
name: multi_cloudv3
description: Multi Cloud Solution
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.17.5 <3.0.0"
# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
# consider running `flutter pub upgrade --major-versions`. Alternatively,
# dependencies can be manually updated by changing the version numbers below to
# the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`.
dependencies:
flutter:
sdk: flutter
flutter_web_plugins:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
show_up_animation: ^2.0.0
url_launcher: ^6.1.5
side_navigation: ^1.0.2
cupertino_icons: ^1.0.2
fly_animation: ^0.0.2
google_fonts: ^3.0.1
font_awesome_flutter: ^10.1.0
http: ^0.13.4
dio: ^4.0.6
permission_handler: ^10.0.0
image_picker: ^0.8.5+3
file_picker: ^5.0.1
spring: ^2.0.2
dev_dependencies:
flutter_test:
sdk: flutter
# The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^2.0.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter packages.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
assets:
- assets/file/
- assets/images/
- assets/icons/
- assets/logo/
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility in the flutter_test package. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:multi_cloudv3/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(const MyApp());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
<!DOCTYPE html>
<html>
<head>
<!--
If you are serving your web app in a path other than the root, change the
href value below to reflect the base path you are serving from.
The path provided below has to start and end with a slash "/" in order for
it to work correctly.
For more details:
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
This is a placeholder for base href that will be replaced by the value of
the `--base-href` argument provided to `flutter build`.
-->
<base href="$FLUTTER_BASE_HREF">
<meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="A new Flutter project.">
<!-- iOS meta tags & icons -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="mcs_flutter">
<link rel="apple-touch-icon" href="icons/Icon-192.png">
<!-- Favicon -->
<link rel="icon" type="image/png" href="favicon.png"/>
<title>mcs_flutter</title>
<link rel="manifest" href="manifest.json">
<script>
// The value below is injected by flutter build, do not touch.
var serviceWorkerVersion = null;
</script>
<!-- This script adds the flutter initialization JS code -->
<script src="flutter.js" defer></script>
</head>
<body>
<script>
window.addEventListener('load', function(ev) {
// Download main.dart.js
_flutter.loader.loadEntrypoint({
serviceWorker: {
serviceWorkerVersion: serviceWorkerVersion,
}
}).then(function(engineInitializer) {
return engineInitializer.initializeEngine();
}).then(function(appRunner) {
return appRunner.runApp();
});
});
</script>
</body>
</html>
{
"name": "mcs_flutter",
"short_name": "mcs_flutter",
"start_url": ".",
"display": "standalone",
"background_color": "#0175C2",
"theme_color": "#0175C2",
"description": "A new Flutter project.",
"orientation": "portrait-primary",
"prefer_related_applications": false,
"icons": [
{
"src": "icons/Icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icons/Icon-512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "icons/Icon-maskable-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "icons/Icon-maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment