在本文中我們主要對標React Native來講解Flutter的一些入門基礎知識,Android、iOS或web開發者可以省略React Native部分,直接學習Flutter部分。
如何創建Flutter項目?
以React Native為例,要創建一個React Native 項目,我們可以通過create-react-native-app
腳手架來完成:
$ create-react-native-app <projectname>
要創建一個Flutter 項目有以下兩種方式:
- 從命令行使用
flutter create
命令。確保Flutter SDK配置了環境變量。 - 使用安裝了Flutter和Dart插件的IDE。
$ flutter create <projectname>
關于創建Flutter項目的更多內容可學習《基于Flutter1.x開發攜程網App》。
如何運行Flutter 項目?
在React Native中,我們可以通過一下命令來運行項目:
$ react-native run-ios
//或
$ react-native run-android
那么在Flutter中,我們通過一下兩種方式來運行項目:
- 從項目的根目錄使用
flutter run
。 - 在帶有Flutter和Dart插件的IDE中使用“run”選項。
$ flutter run -d 'iPhone X'
-d
后面跟的是具體的設備名稱,可以是Android或iOS模擬器的名字,也可以一臺已經連接到電腦上的Android或iOS的設備。
關于運行Flutter項目的更多內容可學習《基于Flutter1.x開發攜程網App》。
如何導入Widget?
在React Native中,您需要導入每個必需的組件:
//React Native
import React from "react";
import { StyleSheet, Text, View } from "react-native";//導入系統組件
import NavigationBar from '../common/NavigationBar';//導入自己的組件
在Flutter中,要使用Material Design
庫中的小部件,則需要導入material.dart
包。要使用iOS樣式widget,請導入Cupertino
庫。要使用更基本的窗口widget集,請導widget 庫。或者,當然,也可以導入自己編寫的widget:
import 'package:flutter/material.dart';//導入系統material widget 庫
import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter/my_widgets.dart';//導入自己的widget
無論您導入哪個widget包,Dart都只會導入在您的應用中使用的widget。
想知道Flutter都有哪些Widget可以學習《認識Flutter Widget》。
如何寫一個Hello world?
在React Native中,我們通過如下代碼來實現這個需求:
// React Native
import React from "react";
import { StyleSheet, Text, View } from "react-native";
export default class App extends React.Component {
render() {
return (
<View style={styles.container}>
<Text>Hello world!</Text>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center"
}
});
在Flutter中,您可以創建一個完全相同的“Hello world!”應用程序使用核心窗口小部件庫中的Center和Text窗口小部件。Center窗口小部件成為窗口小部件樹的根,并且有一個子窗口,即“Text”窗口小部件:
// Flutter
import 'package:flutter/material.dart';
void main() {
runApp(
Center(
child: Text(
'Hello, world!',
textDirection: TextDirection.ltr,
),
),
);
}
得益于Flutter強大的封裝能力,我們不難發現實現相同的功能,Flutter要比RN少很多代碼。
如何使用Widget并將其嵌套以形成Widget樹?
在Flutter中,幾乎所有東西都是widget。
widget是用戶界面的基本構建塊,您將widget組成一個層次結構,調用widget樹。每個窗口widget都嵌套在父窗口widget中,并從其父窗口繼承屬性。甚至應用程序對象本身也是一個組件,沒有單獨的“應用程序”對象。相反,根widget擔任此角色。
Widget可以定義:
- 結構元素 - 如按鈕或菜單
- 文體元素 - 像字體或顏色主題
- 類似布局的填充或對齊的一個方向
以下示例使用Material
庫中的Widget顯示“Hello world!”應用程序。在此示例中,widget樹嵌套在MaterialApp的根widget中。
// Flutter
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Welcome to Flutter',
home: Scaffold(
appBar: AppBar(
title: Text('Welcome to Flutter'),
),
body: Center(
child: Text('Hello world'),
),
),
);
}
}
以下圖片顯示了使用Material Design小部件構建的“Hello world!”。
如何創建可重用的Widget?
在React Native中,我們可以定義一個類來創建可重用的組件,然后使用props
方法來設置或返回所選元素的屬性和值,在下面的示例中,定義了CustomCard
類,然后在父類中使用:
// React Native
class CustomCard extends React.Component {
render() {
return (
<View>
<Text > Card {this.props.index} </Text>
<Button
title="Press"
onPress={() => this.props.onPress(this.props.index)}
/>
</View>
);
}
}
// Usage
<CustomCard onPress={this.onPress} index={item.key} />
在Flutter中,同樣需要定義一個類來創建自定義widget,然后重用widget。您還可以定義和調用返回可重用小部件的函數,如以下示例中的構建函數所示。
// Flutter
class CustomCard extends StatelessWidget {
CustomCard({@required this.index, @required
this.onPress});
final index;
final Function onPress;
@override
Widget build(BuildContext context) {
return Card(
child: Column(
children: <Widget>[
Text('Card $index'),
FlatButton(
child: const Text('Press'),
onPressed: this.onPress,
),
],
)
);
}
}
...
// Usage
CustomCard(
index: index,
onPress: () {
print('Card $index');
},
)
...
在前面的例子中, CustomCard
類的構造函數使用Dart的大括號語法{}
來配置 可選參數。
如果要標識必須的字段,請從構造函數中刪除花括號,或者 將@ required添加到構造函數中。
以下屏幕截圖顯示了可重用的CustomCard
類的示例:
未完待續
- Flutter入門基礎知識
- Flutter主題和文字處理
- Flutter什么是聲明式UI
- Flutter布局與列表
- Flutter手勢檢測及觸摸事件處理
- Flutter狀態管理d
- Flutter線程和異步UI
- Flutter表單輸入與富文本
- Flutter認識視圖(Views)md
- Flutter調用硬件、第三方服務以及平臺交互、通知
- Flutter路由與導航
- Flutter項目結構、資源、依賴和本地化