Untuk orang yang sudah mengenal Android:
UI - Android membutuhkan integrasi XML sedangkan semuanya adalah widget dalam flutter dan dapat dibuat dalam satu file
Pendengar No Lain Pendengar untuk Klicks, Panggil Metode, Ubah Negara dan Nikmati Pandangan
FindView - No More FindViewById () - Lakukan saja semuanya di dalam widget () {} dan tinggalkan temuan ke Android
Gradle - No More Gradle Issues - tambahkan dependensi di file pubspec.yaml dan refresh aplikasi untuk menggunakan perpustakaan baru
Aset - harus dikelola secara terpisah dalam flutter, Anda harus menyatakan semua yang Anda gunakan - misalnya: gambar, font. Di Android, Anda cukup menambahkannya di bagian file dan menggunakannya.
Animasi jauh lebih mudah dan didukung dengan baik dalam Flutter - Penggunaan Dasar - misalnya: aktivitas percikan, tab geser, hasil, halaman analitik, navigasi
Menjalankan aplikasi - Hot Reloading in Flutter - cukup tekan 'R' untuk memuat ulang dan 'R' untuk restart aplikasi. Android Studio dapat memakan waktu hingga 20-30 detik untuk setiap muat ulang, dan bahkan lebih jika ada masalah lulusan, popup mana sesekali
API - Android API dapat dilakukan dengan perpustakaan yang berbeda seperti retrofit menggunakan GSON sedangkan pengambilan dalam flutter dapat dilakukan tanpa rasa sakit. Fungsi pengambilan umum dapat digunakan dalam flutter dan memiliki metode async menunggu untuk memanggil API.
Tampilan Recycler/Daftar - Tampilan Recycler digunakan di Android untuk membuat daftar yang berbeda di layar. Kami membutuhkan adaptor untuk apa yang memiliki antarmuka dan kami perlu mengetahui segala macam fungsi yang berbeda untuk sepenuhnya mengimplementasikannya. Flutter hanya memiliki widget untuk ListView di mana kami dapat mendefinisikan listtiles yang berbeda atau hanya menambahkan barang secara dinamis. Jauh lebih mudah, terlihat lebih sederhana.
Kurva Pembelajaran - Bekerja di Flutter lebih mudah setelah Anda tahu DART, yang mirip dengan JavaScript, dan memahami konsep dasar tentang widget. Android memungkinkan Anda untuk membuat tata letak dengan bantuan perancang, yang dapat digunakan untuk membuat tata letak kendala. Membuat aplikasi dasar jelas lebih mudah untuk dipelajari di Android tetapi saat kami masuk lebih dalam dalam fragmen dan hal -hal lain, itu mulai menjadi rumit
Fragmen vs komponen (widget) - kita dapat dengan mudah menggunakan komponen widget di mana pun kita inginkan tidak seperti fragmen yang kita buat di Android, yang memerlukan beberapa pengetahuan sebelumnya tentang cara menggunakan bundel, adaptor, tata letak XML, dan metode yang berbeda seperti OnCreateView dan LayoutInflator
SQL Database - Ini sangat mirip di kedua teknologi. Satu -satunya perbedaan adalah bahwa manajemen negara dapat mulai berlaku jika Anda mencoba menambahkan sesuatu secara berurutan, Anda harus menyimpan kunci di negara bagian dan mengubahnya menggunakan setState () {_ key+= 1} -> Hanya kasus penggunaan. Perpustakaan Kamar di Android cukup luas digunakan dan mudah diimplementasikan juga
Pola Arsitektur - Semuanya bermuara pada MVP/ MVVM/ MVC di Android, sedangkan kami memiliki blok dan penyedia di Flutter, yang melakukan sesuatu yang mirip dengan MVC, memisahkan logika bisnis dengan membuat wastafel dan aliran
Editor Kode - VScode/Android Studio - Flutter dan Android Studio untuk Android
Panduan Memulai - Cukup Straighforward untuk Android, Unduh Studio dan Mulailah, sedangkan Anda harus melakukan banyak hal untuk Flutter - bisa menjengkelkan
Firebase - Sumber Daya untuk Firebase Flutter: -
https://firebase.google.com/docs/flutter/setup
https://flutter.dev/docs/development/data-and-backend/firebase
https://www.youtube.com/watch?v=8m-fa239hy4
https://www.youtube.com/channel/ucftm1fgjzskospdzgtbp7ha/search?query=firebase
https://codelabs.developers.google.com/codelabs/flutter-firebase/#0
Firebase Connection - Pasti lebih mudah diimplementasikan untuk Flutter, Anda dapat melakukannya dalam 20 baris kode tergantung pada tampilan daftar yang Anda buat. Dasar -dasarnya sama, Anda memerlukan file .json dan harus menambahkannya ke konsol firebase. Coding in Flutter membantu Anda memahaminya dengan cara yang jauh lebih baik. Secara keseluruhan itu serupa.
Daftar + Firebase - Android memiliki pandangan pendaur ulang gila yang membuat semuanya begitu sulit, dan mengintegrasikan tampilan Firebase + Recycler memiliki sekitar 200 artikel, dan Anda tidak bisa menguasainya. Tidak mungkin saya bisa menerapkan sesuatu di Android tanpa tutorial, tetapi di Flutter, Anda selalu dapat mencoba
Mengambil, mendorong data - mendorong data juga lebih mudah dalam firebase flutter, secara harfiah ada metode ONTAP () yang memungkinkan Anda mengirim snapshot dari data
Pembelajaran Mesin - Mengintegrasikan Pembelajaran Mesin
UI - Flutter dan RN memiliki sistem satu file, di mana Anda menentukan aturan dan UI. Saya pribadi menyukai antarmuka untuk aplikasi flutter karena jauh lebih jelas. Ini juga dikelola oleh Google yang memiliki Android dan dapat memiliki integrasi yang jauh lebih baik dengan Google.
Kelas - Flutter menggunakan widget untuk semuanya secara harfiah, dari TextViews ke Tabviews - mereka disebut 'widget'. Flutter menggunakan DART, sedangkan React Native menggunakan TypeScript atau JavaScript.
Komponen - RN memiliki komponen dan kami harus mengimpornya dari 'React -asli' untuk menggunakannya. Flutter memiliki widget yang dapat digunakan di ruang yang sama. Keduanya serupa kecuali gaya dan bagian rendering.
Styling Flutter - Inside Widgets - Jadi jika Anda ingin padding => Anda membungkus widget dalam widget padding () dengan beberapa padding, bereaksi asli: Anda mendefinisikan gaya const: stylesheet dan tambahkan gaya Anda di sana - mirip dengan gaya web di mana Anda memiliki CSS. Jadi bereaksi asli memiliki gaya CSS sedangkan flutter memiliki gaya 'widget'
Animasi - Flutter jauh lebih mudah untuk GRASB, sedangkan React Native memiliki aspek yang lebih luas untuk itu
Kurva Pembelajaran - Mirip dalam React Native dan Flutter.
Perpustakaan - NPM membantu dalam reaksi asli sedangkan untuk flutter kami hanya menambahkannya ke file pubspec.yaml
API - Keduanya memiliki visi yang jelas tentang penggunaan API. Artikel yang bagus untuk RN-https://medium.com/better-pogramming/handling-api-like-a-boss-in-react-native-364abd92dc3d
Editor Kode - VS Code populer untuk keduanya
Memulai - Secara pribadi, sangat sulit untuk bekerja dengan React Native di Windows. Jauh lebih baik jika Anda menggunakan Mac, tetapi secara keseluruhan bahwa layar merah mengganggu Anda. Flutter tidak memiliki panduan memulai yang termudah, tetapi ada dukungan di luar sana untuk membantu Anda.
Secara keseluruhan - keduanya dapat membuat aplikasi Cross Native dan saya akan memilih Flutter Anyday - Hackathon/ Proyek Cepat/ Belajar Android juga, dan bereaksi asli - web/ belajar react.js/ -> Jika Anda ingin stres sendiri: p



fetch () async {
var url = "API-HERE" ;
var res = await http. get (url);
var body = jsonDecode (res.body);
// body is your API body
}content description ke tombol, TextView dll di Android untuk Voice Overs https://steemit.com/utopian-oo/@tensor/advanced-flanutter-project---best-practices---generic-bloc-providers---part- three
class App extends StatelessWidget {
@override
Widget build ( BuildContext context) {
// TODO: implement build
return MaterialApp (
home : Home (),
theme : ThemeData (primaryColor : PrimaryColor ), //add-your-color here || or remove this
debugShowCheckedModeBanner : false ,
);
}
}
class Home extends StatefulWidget {
@override
State < StatefulWidget > createState () {
// TODO: implement createState
return new _HomeState ();
}
}
class _HomeState extends State < Home >{
@override
Widget build ( BuildContext context) {
return Scaffold (
body : Column ()
);
}child : users.length <= 0
? Center (
child : EmptyState (
title : 'Oops' ,
message : 'Add form by tapping add button below' ,
),
)
: ListView . builder (
addAutomaticKeepAlives : true ,
itemCount : users.length,
itemBuilder : (_, i) => users[i],
),
) fetch () async {
var url = "API-HERE" ;
var res = await http. get (url);
var body = jsonDecode (res.body);
// body is your API body
} for ( int i = 0 ;i < body[ 0 ][ 'staggered_tiles' ].length;i ++ ){
_staggeredTiles. add ( new StaggeredTile . count (
body[ 0 ][ 'staggered_tiles' ][i][ 'cross_axis' ], // body is what we get from the API
body[ 0 ][ 'staggered_tiles' ][i][ 'main_axis' ] // body is what we get from the API
));
}
if (body[i][ 0 ][ 'type' ] == 'donut' ) {
List < LabelPieSales > _d = [];
for ( int j = 0 ; j < body[i][ 0 ][ 'data' ].length; j ++ ) {
_d. add ( new LabelPieSales (
body[i][ 0 ][ 'data' ][j][ 'year' ], body[i][ 0 ][ 'data' ][j][ 'sales' ])); // body is what we get from the API
}
_wid_top. add ( new Container (
height : 200 ,
width : 200 ,
child : DonutChartWidget . withSampleData (_d),
));
}
else if (body[i][ 0 ][ 'type' ] == 'label-pie' ) {
List < LabelPieSales > _d = [];
for ( int j = 0 ; j < body[i][ 0 ][ 'data' ].length; j ++ ) {
_d. add ( new LabelPieSales (
body[i][ 0 ][ 'data' ][j][ 'year' ], body[i][ 0 ][ 'data' ][j][ 'sales' ])); // body is what we get from the API
}
_wid_top. add ( new Container (
height : 200 ,
width : 200 ,
child : SimpleBarChart . withSampleData (_d),
));
} return Container (
padding : const EdgeInsets . all ( 4.0 ),
child : appState.isFetching
? CircularProgressIndicator ()
: appState. getResponseJson () != null
? ListView . builder (
primary : false ,
shrinkWrap : true ,
itemCount : appState. getResponseJson ().length,
itemBuilder : (context, index) {
return Container (
height : 100 ,
width : 100 ,
child : graph (appState. getResponseJson ()),
);
},
)
: Text ( "Press Button above to fetch data" ),
); initDB () async {
return await openDatabase (
join ( await getDatabasesPath (), 'graphs_database.db' ),
onCreate : (db, version) {
return db. execute (
"CREATE TABLE graphs(id INTEGER PRIMARY KEY, type TEXT)" ,
);
},
version : 1 ,
);
}floatingActionButton : FloatingActionButton (
child : Icon ( Icons .add),
onPressed : () async {
Dog dog = new Dog (id : _id, name : "name" ,age : 22 );
await insertDog (dog);
setState (() {
_id += 1 ;
});
},
), List < Graph > graphs_sql = await graphs ();
List < String > graphs_sql_types = [];
for ( int i = 0 ;i < graphs_sql.length;i ++ ){
graphs_sql_types. add (graphs_sql[i].type);
}
if (graphs_sql.length != _types.length) {
for ( int i = 0 ; i < _types.length; i ++ ) {
if ( ! graphs_sql_types. contains (_types[i])){ // add only if a new type
await insertGraph ( new Graph (id : i, type : _types[i]));
}
}
} launchUrl () {
setState (() {
urlString = controller.text;
flutterWebviewPlugin. reloadUrl (urlString);
});
} class News {
String dateAdded;
String title;
String body;
String level;
String category;
News ( this .dateAdded, this .title, this .body, this .level, this .category);
}
class Record {
final String name;
final int votes;
final DocumentReference reference;
Record . fromMap ( Map < String , dynamic > map, { this .reference})
: assert (map[ 'name' ] != null ),
assert (map[ 'votes' ] != null ),
name = map[ 'name' ],
votes = map[ 'votes' ];
Record . fromSnapshot ( DocumentSnapshot snapshot)
: this . fromMap (snapshot.data, reference : snapshot.reference);
@override
String toString () => "Record<$ name :$ votes >" ;
} double _height = MediaQuery . of (context).size.height;
double _width = MediaQuery . of (context).size.width; @override
void initState () {
// TODO: implement initState
super . initState ();
_image = {url};
localList1 = globalList1;
localList1 = globalList2;
} export const sendToTopic = functions.firestore
.document( 'recipes/{recipyId}' )
.onCreate(async snapshot => {
// const recipe = snapshot.data();
const payload : admin.messaging.MessagingPayload = {
notification: {
title: 'new recipe added, check it out' ,
body: 'Make it and eat it'
}
};
return fcm. sendToTopic ( 'recipes' , payload);
}); @override
Widget build ( BuildContext context) {
return Scaffold (
appBar : AppBar (title : Text ( 'Recipes for you' )),
body : _buildBody (context),
);
}
Widget _buildBody ( BuildContext context) {
return StreamBuilder < QuerySnapshot >(
stream : Firestore .instance. collection ( 'recipes' ). snapshots (),
builder : (context, snapshot) {
if ( ! snapshot.hasData) return LinearProgressIndicator ();
return _buildList (context, snapshot.data.documents);
},
);
} List<Recipe> recipe_list = [];
// snapshot.map((data) => recipeList(context, data).toList());
for(int i=0;i<snapshot.length;i++){
Recipe recipe = Recipe.fromSnapshot(snapshot[i]);
recipe_list.add(recipe);
}
return AsymmetricView(products: recipe_list,);