Flutter adalah Mobile App SDK (Software Development Kit) untuk membuat aplikasi Android dan iOS dari satu codebase dengan performa tinggi. Artinya kita hanya perlu mempelajari Flutter untuk membangun aplikasi mobile untuk beberapa platform.
The goal is to enable developers to deliver high-performance apps that feel natural on different platforms. We embrace differences in scrolling behaviors, typography, icons, and more.
Dart merupakan bahasa pemrograman yang dikembangkan oleh Google untuk banyak platform. Dart dapat digunakan untuk membuat aplikasi mobile, desktop, web, dan dapat digunakan untuk backend. Pengembangan bahasa pemrograman dart sudah dimulai sejak 2013 dengan releasenya dart 1.0, kemudian untuk versi dart 2.0 direlease pada tahun 2018. Bahkan kini Google memberikan dukungan penuh untuk Flutter, banyak fitur yang dikenalkan pada acara Google I/O 2019.
Dart memungkinkan pengembangan user interface sesuai dengan yang user inginkan, artinya dengan menggunakan dart dapat melakukan costum untuk UI sesuai dengan keinginan, serta penulisan syntax kode yang sangat mudah dipelajari.
Dengan menggunakan dart proses development menjadi lebih produktif, faktor yang paling utama adalah adanya fitur hot reload, dimana ketika kalian melakukan perubahan pada kode maka kalian sangat cepat untuk melihat perubahannya. Kelebihannya lagi dengan menggunakan dart sebagai codebase kalian dapat build untuk banyak platform, hal ini tentu mempengaruhi waktu development.
Berbeda dengan aplikasi hybrid, penggunaan dart pada Flutter membuat peforma aplikasi cepat bahkan sama dengan native. Karena Flutter memiliki engine untuk compile kode manjadi native, contohnya penggunaan dart untuk web maka kode akan di compile menjadi javascript.
Smart Display
Github
StackOverFlow
Medium
Youtube
Google telah meliris teknologi terbarunya yaitu Flutter App akhir tahun 2018 lalu. Flutter adalah Mobile UI Framework yang dibuat oleh Google untuk dapat membangun aplikasi native iOS dan Android UI lebih mudah dan cepat dengan sekali koding. Flutter framework yang disediakan free dan open source untuk para developer dan organisasi didunia.
Namun bagaimana saya memulai untuk mempejari membuat aplikasi tersebut? situs ini yang dapat membantu anda mendapatkan informasi terkait flutter apps.
Yang Ini Penting untuk diketahui, Sebelum anda memulai membuat aplikali Flutter. Anda harus menyimak video ini terlebih dahulu untuk mendapatkan gambaran dan membantu anda memahami bagaimana Flutter hadir dan kemampuan apa saja yang dapat dilakukannya.
Membaca dokumen resmi sangat bagus untuk memperdalam pengetahuan. Biasanya meliputi contoh yang dapat dipahami untuk kasus yang sederhana. Hal baiknya, pada dokumetasi resmi Flutter juga mencakup dokumentasi untuk Android, iOS, React Native dan Pengembangan web, jadi anda dapat dengan mudah menghubungkan flutter dengan pengetahuan dalam mengembangkan aplikasi yang anda miliki saat ini.
Tutorial step by step untuk membangun aplikasi Flutter yang mengagumkan? Siapa yang tidak mengingikannya? Bagi anda pemula, jangan lewatkan bagian ini.
Pilih OS yang kamu gunakan :
Silahkan Dowload Flutter SDK
atau cek SDK terbaru disini :
Jangan Install di C:\Program Files
Klik Windows run, ketik env, dan pilih
Update PATH
Flutter Doctor berfungsi untuk mengecek apakah pc kamu sudah layak untuk menjalankan Flutter.
Flutter akan jalan minimal terpenuhi :
Optional Install
jika muncul seperti ini, berarti pc kamu belum terinstall Android SDK, kamu bisa Install manual, atau lebih mudahnya Install Android Studio saja yang sudah Full Paket dengan Android SDK
klik untuk Install Android Studio
Klik untuk Install VS Code
Silahkan Pilih Editor :
Silahkan Pilih Editor :
flutter runKetikan Perintah :
Merupakan widget yang di-build hanya dengan konfigurasi yang telah diinisiasi sejak awal. Jadi Stateless Widget adalah Widget yang tidak akan pernah berubah.
Misalnya Kita membuat aplikasi berisi Text dengan angka 10. Kemudian aplikasi kita tidak punya fungsi untuk merubah angka tersebut. Maka yang digunakan di sini adalah Stateless Widget.
main.dart adalah file utama yang akan pertama kali dijalankan
import 'package:flutter/material.dart';
void main(){
runApp(
new MaterialApp(
home: new Widget1(),
)
);
}
class Widget1 extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Text("meetAp Flutter Basic"),
);
}
}Posisi Text diatas tak terlihat
import 'package:flutter/material.dart';// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/// Flutter widgets implementing Material Design.
///
/// To use, import `package:flutter/material.dart`.
///
/// {@youtube 560 315 https://www.youtube.com/watch?v=DL0Ix1lnC4w}
///
/// See also:
///
/// * [flutter.dev/widgets](https://flutter.dev/widgets/)
/// for a catalog of commonly-used Flutter widgets.
/// * [material.io/design](https://material.io/design/)
/// for an introduction to Material Design.
library material;
export 'src/material/about.dart';
export 'src/material/animated_icons.dart';
export 'src/material/app.dart';
export 'src/material/app_bar.dart';
export 'src/material/app_bar_theme.dart';
export 'src/material/arc.dart';
export 'src/material/back_button.dart';
export 'src/material/bottom_app_bar.dart';
export 'src/material/bottom_app_bar_theme.dart';
export 'src/material/bottom_navigation_bar.dart';
export 'src/material/bottom_sheet.dart';
export 'src/material/bottom_sheet_theme.dart';
export 'src/material/button.dart';
export 'src/material/button_bar.dart';
export 'src/material/button_theme.dart';
export 'src/material/card.dart';
export 'src/material/card_theme.dart';
export 'src/material/checkbox.dart';
export 'src/material/checkbox_list_tile.dart';
export 'src/material/chip.dart';
export 'src/material/chip_theme.dart';
export 'src/material/circle_avatar.dart';
export 'src/material/color_scheme.dart';
export 'src/material/colors.dart';
export 'src/material/constants.dart';
export 'src/material/data_table.dart';
export 'src/material/data_table_source.dart';
export 'src/material/date_picker.dart';
export 'src/material/debug.dart';
export 'src/material/dialog.dart';
export 'src/material/dialog_theme.dart';
export 'src/material/divider.dart';
export 'src/material/drawer.dart';
export 'src/material/drawer_header.dart';
export 'src/material/dropdown.dart';
export 'src/material/expand_icon.dart';
export 'src/material/expansion_panel.dart';
export 'src/material/expansion_tile.dart';
export 'src/material/feedback.dart';
export 'src/material/flat_button.dart';
export 'src/material/flexible_space_bar.dart';
export 'src/material/floating_action_button.dart';
export 'src/material/floating_action_button_location.dart';
export 'src/material/floating_action_button_theme.dart';
export 'src/material/flutter_logo.dart';
export 'src/material/grid_tile.dart';
export 'src/material/grid_tile_bar.dart';
export 'src/material/icon_button.dart';
export 'src/material/icons.dart';
export 'src/material/ink_decoration.dart';
export 'src/material/ink_highlight.dart';
export 'src/material/ink_ripple.dart';
export 'src/material/ink_splash.dart';
export 'src/material/ink_well.dart';
export 'src/material/input_border.dart';
export 'src/material/input_decorator.dart';
export 'src/material/list_tile.dart';
export 'src/material/material.dart';
export 'src/material/material_button.dart';
export 'src/material/material_localizations.dart';
export 'src/material/material_state.dart';
export 'src/material/mergeable_material.dart';
export 'src/material/outline_button.dart';
export 'src/material/page.dart';
export 'src/material/page_transitions_theme.dart';
export 'src/material/paginated_data_table.dart';
export 'src/material/popup_menu.dart';
export 'src/material/progress_indicator.dart';
export 'src/material/radio.dart';
export 'src/material/radio_list_tile.dart';
export 'src/material/raised_button.dart';
export 'src/material/range_slider.dart';
export 'src/material/refresh_indicator.dart';
export 'src/material/reorderable_list.dart';
export 'src/material/scaffold.dart';
export 'src/material/scrollbar.dart';
export 'src/material/search.dart';
export 'src/material/shadows.dart';
export 'src/material/slider.dart';
export 'src/material/slider_theme.dart';
export 'src/material/snack_bar.dart';
export 'src/material/snack_bar_theme.dart';
export 'src/material/stepper.dart';
export 'src/material/switch.dart';
export 'src/material/switch_list_tile.dart';
export 'src/material/tab_bar_theme.dart';
export 'src/material/tab_controller.dart';
export 'src/material/tab_indicator.dart';
export 'src/material/tabs.dart';
export 'src/material/text_field.dart';
export 'src/material/text_form_field.dart';
export 'src/material/text_selection.dart';
export 'src/material/text_theme.dart';
export 'src/material/theme.dart';
export 'src/material/theme_data.dart';
export 'src/material/time.dart';
export 'src/material/time_picker.dart';
export 'src/material/toggleable.dart';
export 'src/material/tooltip.dart';
export 'src/material/typography.dart';
export 'src/material/user_accounts_drawer_header.dart';
export 'widgets.dart';
void main(){
runApp(new MaterialApp(
home: new Welcome(),
));
}class Welcome extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Scaffold(
body:
new Center(
child: new Text("meetAp Flutter Basic"),
)
);
}
}Struktur Layout dari Material Desain
new Scaffold(
appBar: new AppBar(
title: new Text("FLutter App #1"),
),
body: new Center(
child: new Text("meetAp Flutter Basic"),
),
);Scaffold(
backgroundColor: Colors.grey,
appBar: new AppBar(
title: new Text("FLutter App #1"),
backgroundColor: Colors.red,
),
body: new Center(
child: new Text(
"meetAp Flutter Basic",
style: TextStyle(color: Colors.white),
),
),
);Scaffold(
backgroundColor: Colors.yellow[200],
appBar: new AppBar(
title: new Text("FLutter App #1"),
backgroundColor: Color(0xFFFF7043),
),
body: new Center(
child: new Text(
"meetAp Flutter Basic",
style: TextStyle(color: Colors.redAccent[400]),
),
),
);Scaffold(
backgroundColor: Colors.yellow[200],
appBar: new AppBar(
title: new Text("FLutter App #1"),
backgroundColor: Color(0xFFFF7043),
),
body: new Center(
child: new Text(
"meetAp Flutter Basic",
style: TextStyle(color: Colors.redAccent[400]),
),
),
floatingActionButton: FloatingActionButton(
onPressed: null,
tooltip: 'Camera',
child: Icon(Icons.camera),
backgroundColor: Colors.blue[400],
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
);Scaffold(
backgroundColor: Colors.yellow[200],
appBar: new AppBar(
title: new Text("FLutter App #1"),
backgroundColor: Color(0xFFFF7043),
),
body: new Center(
child: new Text(
"meetAp Flutter Basic",
style: TextStyle(color: Colors.redAccent[400]),
),
),
floatingActionButton: FloatingActionButton(
onPressed: null,
tooltip: 'Camera',
child: Icon(Icons.camera),
backgroundColor: Colors.blue[400],
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),title: Text('Home'),
),
BottomNavigationBarItem(
icon: Icon(Icons.people),title: Text('Profil'),
),
],
backgroundColor: Colors.deepOrange,
selectedItemColor: Colors.white,
unselectedItemColor: Colors.black,
),
);class hal1 extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Scaffold(
backgroundColor: Colors.grey,
appBar: new AppBar(
title: new Text('Photograph'),
backgroundColor: Colors.blue[300],
),
body: new Center(
child: new Text(
'Aplikasi Photograph',
style: TextStyle(color: Colors.white),
),
),
floatingActionButton: FloatingActionButton(
onPressed: null,
tooltip: 'Camera Shoot',
child: Icon(Icons.camera),
backgroundColor: Colors.blue,
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomNavigationBar(
items: const<BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Home')
),
BottomNavigationBarItem(
icon: Icon(Icons.people),
title: Text('Profil')
),
],
backgroundColor: Colors.blue,
selectedItemColor: Colors.white,
unselectedItemColor: Colors.black,
),
);
}
}import 'package:flutter/material.dart';import 'package:flutter_p1/hal1.dart';import 'package:flutter/material.dart';
import 'package:flutter_p1/hal1.dart';
void main(){
runApp(
new MaterialApp(
home: new hal1(),
)
);
}
import 'package:flutter/material.dart';
class hal1 extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Scaffold(
backgroundColor: Colors.grey,
appBar: new AppBar(
title: new Text('Photograph'),
backgroundColor: Colors.blue[300],
),
body: new Center(
child: new Text(
'Aplikasi Photograph',
style: TextStyle(color: Colors.white),
),
),
floatingActionButton: FloatingActionButton(
onPressed: null,
tooltip: 'Camera Shoot',
child: Icon(Icons.camera),
backgroundColor: Colors.blue,
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomNavigationBar(
items: const<BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Home')
),
BottomNavigationBarItem(
icon: Icon(Icons.people),
title: Text('Profil')
),
],
backgroundColor: Colors.blue,
selectedItemColor: Colors.white,
unselectedItemColor: Colors.black,
),
);
}
}import 'package:flutter/material.dart';
class hal_icon extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Halaman Icon'),
backgroundColor: Colors.blue[300],
),
body: new Center(
child: Container(
color: Colors.blue[900],
width: 400.0,
height: 400.0,
child: new Center(
child: new Icon(
Icons.android,
color: Colors.white,
size: 80.0,
),
),
)
),
);
}
} body: new Center(
child: new Column(
children: <Widget>[
Container(
margin: EdgeInsets.all(40.0),
width: 100.0,height: 100.0,color: Colors.orange,
child: new Center(child: new Icon(Icons.camera,color: Colors.white,size: 80.0,),),
),
Container(
margin: EdgeInsets.all(10.0),
width: 100.0,height: 100.0,color: Colors.yellowAccent,
child: new Center(child: new Icon(Icons.image,color: Colors.white,size: 80.0,),),
),
Container(
margin: EdgeInsets.all(10.0),
width: 100.0,height: 100.0,color: Colors.redAccent,
child: new Center(child: new Icon(Icons.favorite,color: Colors.white,size: 80.0,),),
)
],
),
) body: new Center(
child: new Row(
children: <Widget>[
Container(
margin: EdgeInsets.all(5.0),
width: 100.0,height: 100.0,color: Colors.orange,
child: new Center(child: new Icon(Icons.camera,color: Colors.white,size: 80.0,),),
),
Container(
margin: EdgeInsets.all(5.0),
width: 100.0,height: 100.0,color: Colors.blueAccent,
child: new Center(child: new Icon(Icons.image,color: Colors.white,size: 80.0,),),
),
Container(
margin: EdgeInsets.all(5.0),
width: 100.0,height: 100.0,color: Colors.redAccent,
child: new Center(child: new Icon(Icons.favorite,color: Colors.white,size: 80.0,),),
)
],
)
) body: new Center(
child: new Row(
children: <Widget>[
Container(
margin: EdgeInsets.all(5.0),
width: 100.0,height: 100.0,color: Colors.orange,
child: new Center(child: new Image.network("https://zulkifli15.files.wordpress.com/2017/02/java1.gif?w=247&h=247&crop=1&zoom=2"),),
),
Container(
margin: EdgeInsets.all(5.0),
width: 100.0,height: 100.0,color: Colors.blueAccent,
child: new Center(child: new Image.network("https://nethminirominaofficial.files.wordpress.com/2018/02/newsletter_promo.png"),),
),
Container(
margin: EdgeInsets.all(5.0),
width: 100.0,height: 100.0,color: Colors.redAccent,
child: new Center(child: new Image.network("https://www.didierboelens.com/images/hummingbird_logo.png"),),
)
],
)
)