柚子快報(bào)邀請(qǐng)碼778899分享:Flutter框架詳解
柚子快報(bào)邀請(qǐng)碼778899分享:Flutter框架詳解
文章目錄
前言1.Flutter來(lái)源2.Flutter優(yōu)勢(shì)3.跨平臺(tái)設(shè)計(jì)理念4.初學(xué)者的必看
flutter基礎(chǔ)2.1 Dart語(yǔ)言2.2 初識(shí)Flutter2.3 GridView網(wǎng)格布局組件介紹2.4 彈性布局(Flex Expanded)2.5 Stack層疊組件2.6 Wrap組件
持續(xù)更新中結(jié)尾
前言
當(dāng)你刷到這篇文章,就說(shuō)明我們有緣。
1.Flutter來(lái)源
Flutter是谷歌公司開發(fā)的一款開源、免費(fèi)的UI框架,可以讓我們快速的在Android和iOS上構(gòu)建高質(zhì)量App. 它最大的特點(diǎn)就是跨平臺(tái)、以及高性能. 目前 Flutter 已經(jīng)支持 iOS、Android、Web、Windows、macOS、Linux 的跨平臺(tái)開發(fā).
2.Flutter優(yōu)勢(shì)
Flutter是谷歌基于Dart語(yǔ)言開發(fā)的一款跨平臺(tái)的App開發(fā)框架。它針對(duì)的開發(fā)者是全部開發(fā)者。它的性 能相比RN、Ionic這樣的框架要更好一些。
3.跨平臺(tái)設(shè)計(jì)理念
端上的開發(fā)無(wú)外乎三件事,“數(shù)據(jù)獲取”,“狀態(tài)管理”,“頁(yè)面渲染”。 而在跨端領(lǐng)域的竟?fàn)?,?“虛擬機(jī)”,“渲染引擎”,“原生交互”,“開發(fā)環(huán)境” 的竟?fàn)?Flutter應(yīng)用在一個(gè)VM上運(yùn)行,使得可在保留狀態(tài)且無(wú)需重新編譯情況下,進(jìn)行熱加載。 發(fā)行時(shí),F(xiàn)lutter應(yīng)用會(huì)直接通過(guò)AOT編譯為機(jī)器碼或者是JS。大大提高了開發(fā)效率。
4.初學(xué)者的必看
這里只是博主一個(gè)人想給想學(xué)Flutter的初學(xué)者的一些小小建議:
剛開始學(xué)的時(shí)候會(huì)發(fā)現(xiàn)Flutter和很多語(yǔ)法不一樣,導(dǎo)致自己會(huì)失去學(xué)下去的信心,這時(shí)候一定不要放棄,一定要在感覺(jué)學(xué)不下去的時(shí)候放松一下。我想很多人都是學(xué)了Vue或者React等一些前端框架之后再來(lái)進(jìn)階學(xué)習(xí)Flutter框架,這里就會(huì)導(dǎo)致Flutter的語(yǔ)法與其他的語(yǔ)法有著很大的差距,因此,初學(xué)者就要花費(fèi)很多的時(shí)間和不斷的去適應(yīng)這個(gè)語(yǔ)法,才能以最快的速度去適應(yīng)。遇到問(wèn)題多看Flutter官方文檔,不要?dú)怵H。希望初學(xué)者都能學(xué)有所成,(博主學(xué)這個(gè)的時(shí)候也磨合了一段時(shí)間)
flutter基礎(chǔ)
2.1 Dart語(yǔ)言
Dart語(yǔ)言是flutter語(yǔ)言的基礎(chǔ),一定要去過(guò)一下。如果你有Java的基礎(chǔ),這里基本可以省略。
//構(gòu)造函數(shù)就是我們?cè)趯?shí)例化類的時(shí)候自動(dòng)觸發(fā)得方法
class Persion {
String name = 'aa';
int age = 1;
// 默認(rèn)構(gòu)造器函數(shù)
/*Persion(String name, int age) {
this.name = name;
this.age = age;
}*/
//默認(rèn)構(gòu)造器函數(shù)簡(jiǎn)寫
Persion(this.name, this.age);
//命名構(gòu)造函數(shù)
Persion.now(){
print('我是一個(gè)普通命名構(gòu)造函數(shù)');
var date = new DateTime.now();
print('當(dāng)前時(shí)間:{$date}');
}
void printInfo() {
print('${this.name}-----------${this.age}');
}
}
void main() {
Persion p1 = new Persion('小紅', 18);
p1.printInfo();
Persion p2 = new Persion('大紅', 19);
p2.printInfo();
Persion now = new Persion.now();
}
2.2 初識(shí)Flutter
1、MaterialApp
MaterialApp是一個(gè)方便的Widget,它封裝了應(yīng)用程序?qū)崿F(xiàn)Material Design所需要的一些Widget。一般作為頂層widget使用。
2、Scaffold
Scaffold是Material Design布局結(jié)構(gòu)的基本實(shí)現(xiàn)。此類提供了用于顯示drawer、snackbar和底部sheet 的API。
2.3 GridView網(wǎng)格布局組件介紹
GridView網(wǎng)格布局
GridView網(wǎng)格布局在實(shí)際項(xiàng)目中用的也是非常多的,當(dāng)我們想讓可以滾動(dòng)的元素使用矩陣方式排列的時(shí)候。此時(shí)我們可以用網(wǎng)格列表組件GridView實(shí)現(xiàn)布局。
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
List
List
for (var i = 0; i < 20; i++) {
list.add(Container(
alignment: Alignment.center,
color: Colors.blue,
child: Text(
'這是第$i條數(shù)據(jù)',
style: const TextStyle(color: Colors.white, fontSize: 20),
),
// height: 400, //設(shè)置高度沒(méi)有反應(yīng)
));
}
return list;
}
@override
Widget build(BuildContext context) {
return GridView.count(
crossAxisSpacing: 20.0,
//水平子 Widget 之間間距
mainAxisSpacing: 20.0,
//垂直子 Widget 之間間距
padding: const EdgeInsets.all(10),
crossAxisCount: 2,
//一行的 Widget 數(shù)量
childAspectRatio: 0.8,
//寬度和高度的比例
children: _getListData(),
);
}
}
2.4 彈性布局(Flex Expanded)
彈性布局(Flex Expanded)
Row 和 Column 都繼承自 Flex ,參數(shù)基本相同,所以能使用Flex的地方基本上都可以使用 Row 或 Column 。 Flex 本身功能是很強(qiáng)大的,它也可以和 Expanded 組件配合實(shí)現(xiàn)彈性布局 。
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
home: Scaffold(
appBar: AppBar(
title: const Text('水平彈性布局'),
),
body: const HomePage()),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Flex(
direction: Axis.horizontal,
children: [
Expanded(
flex: 2,
child: IconContainer(
Icons.home,
color: Colors.green,
)),
Expanded(
flex: 1,
child: IconContainer(
Icons.search,
color: Colors.orange,
),
)
],
);
}
}
class IconContainer extends StatelessWidget {
Color color;
double size;
IconData icon;
IconContainer(this.icon,
{super.key, this.color = Colors.red, this.size = 32});
@override
Widget build(BuildContext context) {
return Container(
height: 100,
width: 100,
color: color,
child: Center(
child: Icon(
icon,
size: size,
color: Colors.blueGrey,
),
),
);
}
}
2.5 Stack層疊組件
Stack
Stack表示堆的意思,我們可以用Stack或者Stack結(jié)合Align或者Stack結(jié)合 Positiond來(lái)實(shí)現(xiàn)頁(yè)面的定位 布局
2.6 Wrap組件
Wrap組件
Wrap可以實(shí)現(xiàn)流布局,單行的Wrap跟Row表現(xiàn)幾乎一致,單列的Wrap則跟Column表現(xiàn)幾乎一致。但 Row與Column都是單行單列的,Wrap則突破了這個(gè)限制,mainAxis上空間不足時(shí),則向crossAxis上 去擴(kuò)展顯示。
持續(xù)更新中
結(jié)尾
本文章會(huì)持續(xù)更新,多多點(diǎn)贊多多支持小猿,你們點(diǎn)贊和收藏是小猿的動(dòng)力,愛(ài)你們。
柚子快報(bào)邀請(qǐng)碼778899分享:Flutter框架詳解
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。