中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

潞城建設(shè)局網(wǎng)站蘋果cms永久免費(fèi)建站程序

潞城建設(shè)局網(wǎng)站,蘋果cms永久免費(fèi)建站程序,自己免費(fèi)網(wǎng)站建設(shè),政府網(wǎng)站建設(shè)辦法1 GridView網(wǎng)格布局組件 1.1 說(shuō)明 1.1.1 圖例 1.1.2 說(shuō)明 GridView網(wǎng)格布局在實(shí)際項(xiàng)目中用的也是非常多的,當(dāng)我們想讓可以滾動(dòng)的元素使用矩陣方式排列的時(shí) 候。此時(shí)我們可以用網(wǎng)格列表組件GridView實(shí)現(xiàn)布局 GridView創(chuàng)建網(wǎng)格列表主要有下面三種方式 1、可以通過(guò)Gr…

1 GridView網(wǎng)格布局組件

1.1 說(shuō)明

1.1.1 圖例

1.1.2 說(shuō)明

????????GridView網(wǎng)格布局在實(shí)際項(xiàng)目中用的也是非常多的,當(dāng)我們想讓可以滾動(dòng)的元素使用矩陣方式排列的時(shí)?候。此時(shí)我們可以用網(wǎng)格列表組件GridView實(shí)現(xiàn)布局

GridView創(chuàng)建網(wǎng)格列表主要有下面三種方式

????????1、可以通過(guò)GridView.count?實(shí)現(xiàn)網(wǎng)格布局

????????2、可以通過(guò)GridView.extent?實(shí)現(xiàn)網(wǎng)格布局

????????3、通過(guò)GridView.builder實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)格布局

1.2 常用屬性

屬性

1.3 案例

1.3.1 GridView.count?實(shí)現(xiàn)網(wǎng)格布局

????????GridView.count構(gòu)造函數(shù)內(nèi)部使用了SliverGridDelegateWithFixedCrossAxisCount,我們通過(guò)它可以
????????快速的創(chuàng)建橫軸固定數(shù)量子元素的GridView

示例

//GridView.count?實(shí)現(xiàn)網(wǎng)格布局
class?HomePage?extends?StatelessWidget?{const?HomePage({Key??key})?:?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?GridView.count(crossAxisCount:?3,childAspectRatio:?1.0,children:?const?<Widget>[Icon(Icons.home),Icon(Icons.ac_unit),Icon(Icons.search),Icon(Icons.settings),Icon(Icons.airport_shuttle),Icon(Icons.all_inclusive),Icon(Icons.beach_access),Icon(Icons.cake),Icon(Icons.circle),],);}
}

1.3.2 GridView.extent實(shí)現(xiàn)網(wǎng)格布局

????????GridView.extent構(gòu)造函數(shù)內(nèi)部使用了SliverGridDelegateWithMaxCrossAxisExtent,我們通過(guò)它可以?快速的創(chuàng)建橫軸子元素為固定最大長(zhǎng)度的的GridView

//GridView.extent實(shí)現(xiàn)網(wǎng)格布局
class HomePage2 extends StatelessWidget {const HomePage2({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return GridView.extent(maxCrossAxisExtent: 80.0,childAspectRatio: 1.0,children: const <Widget>[Icon(Icons.home),Icon(Icons.ac_unit),Icon(Icons.search),Icon(Icons.settings),Icon(Icons.airport_shuttle),Icon(Icons.all_inclusive),Icon(Icons.beach_access),Icon(Icons.cake),Icon(Icons.circle),],);}
}

1.3.3 GridView.count?和?GridView.extent屬性詳解

//GridView.count?和?GridView.extent屬性詳解
class?HomePage3?extends?StatelessWidget?{const?HomePage3({Key??key})?:?super(key:?key);List<Widget>?_getListData()?{List<Widget>?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;}@overrideWidget?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(),);}
}

1.3.4 GridView實(shí)現(xiàn)動(dòng)態(tài)列表

GridView.count實(shí)現(xiàn)動(dòng)態(tài)列表

// GridView.count 實(shí)現(xiàn)動(dòng)態(tài)列表class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);List<Widget> _getListData() {var tempList = listData.map((value) {return Container(decoration: BoxDecoration(border: Border.all(color: const Color.fromRGBO(233, 233, 233, 0.9), width: 1)),child: Column(children: <Widget>[Image.asset(value['imageUrl']),const SizedBox(height: 12),Text(value['title'],textAlign: TextAlign.center,style: const TextStyle(fontSize: 20),)],),);}); // ('xxx','xxx')return tempList.toList();}@overrideWidget build(BuildContext context) {return GridView.count(crossAxisSpacing: 10.0,//水平子 Widget 之間間距mainAxisSpacing: 10.0,//垂直子 Widget 之間間距padding: const EdgeInsets.all(10),crossAxisCount: 2,//一行的 Widget 數(shù)量childAspectRatio: 0.7,//寬度和高度的比例children: _getListData(),);}
}

GridView.build實(shí)現(xiàn)動(dòng)態(tài)列表

// GridView.builder實(shí)現(xiàn)動(dòng)態(tài)列表class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);Widget _getListData(context, index) {return Container(decoration: BoxDecoration(border: Border.all(color: const Color.fromRGBO(233, 233, 233, 0.9), width: 1)),child: Column(children: <Widget>[Image.asset(listData[index]['imageUrl']),const SizedBox(height: 12),Text(listData[index]['title'],textAlign: TextAlign.center,style: const TextStyle(fontSize: 20),)],),height: 400,//設(shè)置高度沒(méi)有反應(yīng));}@overrideWidget build(BuildContext context) {return GridView.builder(//注意gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisSpacing: 10.0, //水平子 Widget 之間間距mainAxisSpacing: 10.0, //垂直子 Widget 之間間距crossAxisCount: 2, //一行的 Widget 數(shù)量),itemCount: listData.length,itemBuilder: _getListData,);}
}

2 Flutter?Paddiing組件

2.1 說(shuō)明? ? ? ??

????????在html中常見(jiàn)的布局標(biāo)簽都有padding屬性,但是Flutter中很多Widget是沒(méi)有padding屬性。這個(gè)時(shí)候?我們可以用Padding組件處理容器與子元素之間的間距

2.2 屬性

????????padding:padding值,?EdgeInsetss設(shè)置填充的值

????????child:子組件

2.3 示例

import 'package:flutter/material.dart';
import '../../res/listData.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("FLutter App")),body: const HomePage(),),);}
}class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return GridView.count(padding: const EdgeInsets.all(10),crossAxisCount: 2,childAspectRatio: 1,children: [Padding(padding: const EdgeInsets.all(10),child: Image.asset('images/1.png', fit: BoxFit.cover),),Padding(padding: const EdgeInsets.all(10),child: Image.asset('images/2.png', fit: BoxFit.cover),),Padding(padding: const EdgeInsets.all(10),child: Image.asset('images/3.png', fit: BoxFit.cover),),Padding(padding: const EdgeInsets.all(10),child: Image.asset('images/4.png', fit: BoxFit.cover),),Padding(padding: const EdgeInsets.all(10),child: Image.asset('images/5.png', fit: BoxFit.cover),),Padding(padding: const EdgeInsets.all(10),child: Image.asset('images/6.png', fit: BoxFit.cover),),],);}
}

3 線性布局(Row和Column)

3.1 Row?水平布局組件

3.1.1 Row屬性

????????mainAxisAlignment?主軸的排序方式

????????crossAxisAlignment?次軸的排序方式

????????children?組件子元素

3.1.2 示例

import 'package:flutter/material.dart';
import '../../res/listData.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("FLutter App")),body: const HomePage(),),);}
}class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(height: double.infinity,width: double.infinity,color: Colors.black26,child: Row(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [IconContainer(Icons.home, color: Colors.red),IconContainer(Icons.search, color: Colors.blue),IconContainer(Icons.send, color: Colors.orange),],),);}
}class IconContainer extends StatelessWidget {Color color;double size;IconData icon;IconContainer(this.icon,{Key? key, this.color = Colors.red, this.size = 32.0}): super(key: key);@overrideWidget build(BuildContext context) {return Container(height: 100.0,width: 100.0,color: color,child: Center(child: Icon(icon, size: size, color: Colors.white)),);}
}

3.2 Column垂直布局組件

3.2.1 Column屬性

????????mainAxisAlignment?主軸的排序方式

????????crossAxisAlignment?次軸的排序方式

????????children?組件子元素

3.2.2 示例

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("Flutter App")),body: const HomePage(),),);}
}class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(height: double.infinity,width: double.infinity,color: Colors.black26,child: Column(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [IconContainer(Icons.home, color: Colors.red),IconContainer(Icons.search, color: Colors.blue),IconContainer(Icons.send, color: Colors.orange),],),);}
}class IconContainer extends StatelessWidget {Color color;double size;IconData icon;IconContainer(this.icon,{Key? key, this.color = Colors.red, this.size = 32.0}): super(key: key);@overrideWidget build(BuildContext context) {return Container(height: 100.0,width: 100.0,color: color,child: Center(child: Icon(icon, size: size, color: Colors.white)),);}
}

3.3 double.in?nity?和double.maxFinite

3.3.1 說(shuō)明

double.in?nity?和double.maxFinite可以讓當(dāng)前元素的width或者h(yuǎn)eight達(dá)到父元素的尺寸

3.3.2 底層代碼

static?const?double?nan?=?0.0?/?0.0; static?const?double?infinity?=?1.0?/?0.0; static?const?double?negativeInfinity?=?-infinity; static?const?double?minPositive?=?5e-324; static?const?double?maxFinite?=?1.7976931348623157e+308;

3.3.3 如下可以讓Container鋪滿整個(gè)屏幕

Widget?build(BuildContext?context)?{return?Container(height:?double.infinity,width:?double.infinity,color:?Colors.black26,child:?Column(crossAxisAlignment:?CrossAxisAlignment.center,mainAxisAlignment:?MainAxisAlignment.spaceEvenly,children:?[IconContainer(Icons.home,?color:?Colors.red),IconContainer(Icons.search,?color:?Colors.blue),IconContainer(Icons.send,?color:?Colors.orange),],),);}


?

3.3.4 如下可以讓Container的寬度和高度等于父元素的寬度高度

@override
Widget build(BuildContext context) {return Container(height: 400,width: 600,color: Colors.red,child: Container(height: double.maxFinite,width: double.infinity,color: Colors.black26,child: Column(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [IconContainer(Icons.home, color: Colors.red),IconContainer(Icons.search, color: Colors.blue),IconContainer(Icons.send, color: Colors.orange),],),),);
}

3.4 彈性布局(Flex?Expanded)

3.4.1 說(shuō)明

Flex組件可以沿著水平或垂直方向排列子組件,如果你知道主軸方向,使用?Row或?Column會(huì)方便一?些,??因?yàn)?Row和?Column都繼承自?Flex?,參數(shù)基本相同,所以能使用Flex的地方基本上都可以使用????Row或?Column?。?Flex本身功能是很強(qiáng)大的,它也可以和?Expanded組件配合實(shí)現(xiàn)彈性布局?。

3.4.2 水平彈性布局

示例1

import?'package:flutter/material.dart';void?main()?{runApp(const?MyApp());
}class?MyApp?extends?StatelessWidget?{const?MyApp({Key??key})?:?super(key:?key);//?This?widget?is?the?root?of?your?application.@overrideWidget?build(BuildContext?context)?{return?MaterialApp(title:?'Flutter?Demo',theme:?ThemeData(primarySwatch:?Colors.blue,),home:?Scaffold(appBar:?AppBar(title:?const?Text("Flutter?App")),body:?const?HomePage(),),);}
}class?HomePage?extends?StatelessWidget?{const?HomePage({Key??key})?:?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?Flex(direction:?Axis.horizontal,children:?[Expanded(flex:?2,?child:?IconContainer(Icons.home,?color:?Colors.red)),Expanded(flex:?1,child:?IconContainer(Icons.search,?color:?Colors.orange),)],);}
}class?IconContainer?extends?StatelessWidget?{Color?color;double?size;IconData?icon;IconContainer(this.icon,{Key??key,?this.color?=?Colors.red,?this.size?=?32.0}):?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?Container(height:?100.0,width:?100.0,color:?color,child:?Center(child:?Icon(icon,?size:?size,?color:?Colors.white)),);}
}

示例2

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("Flutter App")),body: const HomePage(),),);}
}class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Row(children: [Expanded(flex: 2, child: IconContainer(Icons.home, color: Colors.red)),Expanded(flex: 1,child: IconContainer(Icons.search, color: Colors.orange),)],);}
}class IconContainer extends StatelessWidget {Color color;double size;IconData icon;IconContainer(this.icon,{Key? key, this.color = Colors.red, this.size = 32.0}): super(key: key);@overrideWidget build(BuildContext context) {return Container(height: 100.0,width: 100.0,color: color,child: Center(child: Icon(icon, size: size, color: Colors.white)),);}
}

3.4.3 垂直彈性布局

import?'package:flutter/material.dart';void?main()?{runApp(const?MyApp());
}class?MyApp?extends?StatelessWidget?{const?MyApp({Key??key})?:?super(key:?key);//?This?widget?is?the?root?of?your?application.@overrideWidget?build(BuildContext?context)?{return?MaterialApp(title:?'Flutter?Demo',theme:?ThemeData(primarySwatch:?Colors.blue,),home:?Scaffold(appBar:?AppBar(title:?const?Text("Flutter?App")),body:?const?HomePage(),),);}
}class?HomePage?extends?StatelessWidget?{const?HomePage({Key??key})?:?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?Column(children:?[Expanded(flex:?2,?child:?IconContainer(Icons.home,?color:?Colors.red)),Expanded(flex:?1,child:?IconContainer(Icons.search,?color:?Colors.orange),)],);}
}class?IconContainer?extends?StatelessWidget?{Color?color;double?size;IconData?icon;IconContainer(this.icon,{Key??key,?this.color?=?Colors.red,?this.size?=?32.0}):?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?Container(height:?100.0,width:?100.0,color:?color,child:?Center(child:?Icon(icon,?size:?size,?color:?Colors.white)),);}
}

3.4.4 使用?Row?或?Co1umn?結(jié)合Expanded實(shí)現(xiàn)下面示例

示例圖

代碼

import?'package:flutter/material.dart';void?main()?{runApp(const?MyApp());
}class?MyApp?extends?StatelessWidget?{const?MyApp({Key??key})?:?super(key:?key);//?This?widget?is?the?root?of?your?application.@overrideWidget?build(BuildContext?context)?{return?MaterialApp(title:?'Flutter?Demo',theme:?ThemeData(primarySwatch:?Colors.blue,),home:?Scaffold(appBar:?AppBar(title:?const?Text("Flutter?App")),body:?const?HomePage(),),);}
}class?HomePage?extends?StatelessWidget?{const?HomePage({Key??key})?:?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?ListView(children:?[Container(width:?double.infinity,height:?200,color:?Colors.black,),const?SizedBox(height:?10),Row(children:?[Expanded(flex:?2,child:?SizedBox(height:?180,child:?Image.asset("images/2.png",fit:?BoxFit.cover),),),const?SizedBox(width:?10),Expanded(flex:?1,child:?SizedBox(height:?180,child:?Column(children:?[Expanded(flex:?1,child:?SizedBox(width:?double.infinity,child:?Image.asset("images/3.png",fit:?BoxFit.cover),),),const?SizedBox(height:?10),Expanded(flex:?2,child:?SizedBox(width:?double.infinity,child:?Image.asset("images/4.png",fit:?BoxFit.cover),),)],),))],)],);}
}

4 Flutter?Wrap組件

4.1 說(shuō)明

????????Wrap可以實(shí)現(xiàn)流布局,單行的Wrap跟Row表現(xiàn)幾乎一致,單列的Wrap則跟Column表現(xiàn)幾乎一致。但?Row與Column都是單行單列的,??Wrap則突破了這個(gè)限制,??mainAxis上空間不足時(shí),則向crossAxis上?去擴(kuò)展顯示。

4.2 屬性

4.2.1 direction

????????主軸的方向,默認(rèn)水平

4.2.2 alignment

????????主軸的對(duì)其方式

4.2.3 spacing

????????主軸方向上的間距

4.2.4 textDirection

????????文本方向

4.2.5 verticalDirection

????????定義了children擺放順序,默認(rèn)是down,見(jiàn)Flex相關(guān)屬性介紹。

4.2.6 runAlignment

????????run的對(duì)齊方式。??run可以理解為新的行或者列,如果是水平方向布局的話,?run可以理解為新的一行

4.2.7 runSpacing

????????run的間距

4.3 示例

import 'package:flutter/material.dart';
import '../../res/listData.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("FLutter App")),body: const LayoutDemo(),),);}
}class LayoutDemo extends StatelessWidget {const LayoutDemo({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Padding(padding: const EdgeInsets.all(3),child: Wrap(spacing: 5,runSpacing: 5,direction: Axis.vertical,alignment: WrapAlignment.start,runAlignment: WrapAlignment.center,children: <Widget>[Button("第1集", onPressed: () {}),Button("第2集", onPressed: () {}),Button("第3集", onPressed: () {}),Button("第4集", onPressed: () {}),Button("第5集", onPressed: () {}),Button("第6集", onPressed: () {}),Button("第7集", onPressed: () {}),Button("第8集", onPressed: () {}),Button("第9集", onPressed: () {}),Button("第10集", onPressed: () {}),Button("第11集", onPressed: () {}),Button("第12集", onPressed: () {}),Button("第13集", onPressed: () {}),Button("第14集", onPressed: () {}),Button("第15集", onPressed: () {}),Button("第16集", onPressed: () {}),Button("第17集", onPressed: () {}),Button("第18集", onPressed: () {}),],),);}
}class Button extends StatelessWidget {String text;void Function()? onPressed;Button(this.text, {Key? key, required this.onPressed}) : super(key: key);@overrideWidget build(BuildContext context) {return ElevatedButton(onPressed: onPressed,style: ButtonStyle(backgroundColor:MaterialStateProperty.all(const Color.fromARGB(255, 236, 233, 233)),foregroundColor: MaterialStateProperty.all(Colors.black45),),child: Text(text),);}
}

4.4 示例2

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("Flutter App")),body: const LayoutDemo(),),);}
}class LayoutDemo extends StatelessWidget {const LayoutDemo({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Padding(padding: const EdgeInsets.all(10),child: ListView(children: [Row(children: [Text("熱搜",style: Theme.of(context).textTheme.headline6,)],),const Divider(),Wrap(spacing: 10,runSpacing: 12,children: [Button("女裝", onPressed: () {}),Button("筆記本", onPressed: () {}),Button("玩具", onPressed: () {}),Button("文學(xué)", onPressed: () {}),Button("女裝", onPressed: () {}),Button("時(shí)尚", onPressed: () {}),Button("女裝", onPressed: () {}),Button("女裝", onPressed: () {}),],),const SizedBox(height: 10),Row(children: [Text("歷史記錄",style: Theme.of(context).textTheme.headline6,)],),const Divider(),Column(children: const [ListTile(title: Text("女裝"),),Divider(),ListTile(title: Text("時(shí)尚"),),Divider(),],),const SizedBox(height: 40),Padding(padding: const EdgeInsets.all(20),child: OutlinedButton.icon(onPressed: () {},style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Colors.black38)),icon: const Icon(Icons.delete),label: const Text("清空歷史記錄")),)]),);}
}class Button extends StatelessWidget {String text;void Function()? onPressed;Button(this.text, {Key? key, required this.onPressed}) : super(key: key);@overrideWidget build(BuildContext context) {return ElevatedButton(onPressed: onPressed,style: ButtonStyle(backgroundColor:MaterialStateProperty.all(const Color.fromARGB(255, 236, 233, 233)),foregroundColor: MaterialStateProperty.all(Colors.black45),),child: Text(text),);}
}

5 層疊布局(Stack、??Align、Positioned)

5.1 Flutter?Stack組件

5.1.1 說(shuō)明

????????Stack表示堆的意思,我們可以用Stack或者Stack結(jié)合Align或者Stack結(jié)合?Positiond來(lái)實(shí)現(xiàn)頁(yè)面的定位?布局

5.1.2 屬性

????????alignment:配置所有子元素的顯示位置

????????children:子組件

5.1.3 示例

import?'package:flutter/material.dart';void?main()?{runApp(const?MyApp());
}class?MyApp?extends?StatelessWidget?{const?MyApp({Key??key})?:?super(key:?key);//?This?widget?is?the?root?of?your?application.@overrideWidget?build(BuildContext?context)?{return?MaterialApp(title:?'Flutter?Demo',theme:?ThemeData(primarySwatch:?Colors.blue,),home:?Scaffold(appBar:?AppBar(title:?const?Text("Flutter?App")),body:?const?HomePage(),),);}
}class?HomePage?extends?StatelessWidget?{const?HomePage({Key??key})?:?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?Container(height:?120.0,width:?120.0,color:?Colors.blue.shade50,child:?const?Align(alignment:?Alignment.topRight,child:?FlutterLogo(size:?60,),),);}
}//Align結(jié)合Alignment?參數(shù)
class?HomePage2?extends?StatelessWidget?{const?HomePage2({Key??key})?:?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?Container(height:?120.0,width:?120.0,color:?Colors.blue.shade50,child:?const?Align(alignment:?Alignment(2,?0.0),child:?FlutterLogo(size:?60,),));}
}//Align結(jié)合Stack組件
class?HomePage3?extends?StatelessWidget?{const?HomePage3({Key??key})?:?super(key:?key);@overrideWidget?build(BuildContext?context)?{return?Center(child:?Container(height:?400,width:?300,color:?Colors.red,child:?Stack(//?alignment:?Alignment.center,children:?const?<Widget>[Align(alignment:?Alignment(1,?-0.2),child:?Icon(Icons.home,?size:?40,?color:?Colors.white),),Align(alignment:?Alignment.center,child:?Icon(Icons.search,?size:?30,?color:?Colors.white),),Align(alignment:?Alignment.bottomRight,child:?Icon(Icons.settings_applications,size:?30,?color:?Colors.white),)],),),);}
}

5.2 Flutter?Stack?Align

5.2.1 說(shuō)明

????????Align組件可以調(diào)整子組件的位置?,?Stack組件中結(jié)合Align組件也可以控制每個(gè)子元素的顯示位置

5.2.2 屬性

????????alignment:配置所有子元素的顯示位置

????????child:子組件

5.2.3 Align結(jié)合Container的使用

說(shuō)明??

????????FlutterLogo?是Flutter?SDK?提供的一個(gè)組件,內(nèi)容就是?Flutter?的?log

示例

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("Flutter App")),body: const HomePage(),),);}
}class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Center(child: Stack(alignment: Alignment.topLeft,children: [Container(height: 400,width: 300,color: Colors.red,),const Text("這是一個(gè)文本",style: TextStyle(fontSize: 40, color: Colors.amber),)],),);}
}

5.3 Flutter?Stack?Positioned

5.3.1 說(shuō)明

????????Stack組件中結(jié)合Positioned組件也可以控制每個(gè)子元素的顯示位置

5.3.2 屬性

????????top:子元素距離頂部的距離

????????bottom:子元素距離底部的距離

????????left:子元素距離左側(cè)距離

????????right:子元素距離右側(cè)距離

????????child:子組件

????????width:組件的高度???(注意:寬度和高度必須是固定值,沒(méi)法使用double.in?nity)

????????height:子組件的高度

示例

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("Flutter App")),body: const HomePage(),),);}
} //Stack組件中結(jié)合Positioned組件也可以控制每個(gè)子元素的顯示位置class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {// FlutterMediaQuery獲取屏幕寬度和高度f(wàn)inal size = MediaQuery.of(context).size;final width = size.width;final height = size.height;return Center(child: Container(height: height,width: width,color: Colors.red,child: Stack(alignment: Alignment.center,children: const <Widget>[Positioned(left: 10,child: Icon(Icons.home, size: 40, color: Colors.white),),Positioned(bottom: 0,left: 100,child: Icon(Icons.search, size: 30, color: Colors.white),),Positioned(right: 0,child: Icon(Icons.settings_applications,size: 30, color: Colors.white),)],),),);}
}// Flutter Stack Positioned固定導(dǎo)航案例
class HomePage2 extends StatelessWidget {const HomePage2({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {final size = MediaQuery.of(context).size;return Stack(children: [ListView(padding: const EdgeInsets.only(top: 45),children: const [ListTile(title: Text("這是一個(gè)標(biāo)題 "),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),ListTile(title: Text("這是一個(gè)標(biāo)題"),),],),Positioned(top: 0,left: 0,height: 40,width: size.width,child: Container(alignment: Alignment.center,color: Colors.black,child: const Text("你好FLutter",style: TextStyle(color: Colors.white),),))],);}
}

6 Flutter?AspectRatio

6.1 說(shuō)明

6.1.1?AspectRatio的作用是根據(jù)設(shè)置調(diào)整子元素child的寬高比。

6.1.2?AspectRatio首先會(huì)在布局限制條件允許的范圍內(nèi)盡可能的擴(kuò)展,??widget的高度是由寬度和比率決定?的,類似于BoxFit中的contain,按照固定比率去盡量占滿區(qū)域。

6.1.3?如果在滿足所有限制條件過(guò)后無(wú)法找到一個(gè)可行的尺寸,??AspectRatio最終將會(huì)去優(yōu)先適應(yīng)布局限制條?件,而忽略所設(shè)置的比率。

6.2 屬性

6.2.1 aspectRatio

????????寬高比,最終可能不會(huì)根據(jù)這個(gè)值去布局,具體則要看綜合因素,外層是否允許?按照這種比率進(jìn)行布局,這只是一個(gè)參考值

6.2.2 child

????????子組件

6.3 示例

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
} //Flutter AspectRatioclass MyApp extends StatelessWidget {const MyApp({Key? key}): super(key: key); // This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: const Text("Flutter App")),body: const HomePage(),),);}
}class HomePage extends StatelessWidget {const HomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {// TODO: implement buildreturn Container(width: 200,color: Colors.yellow,child: AspectRatio(aspectRatio: 2.0 / 1.0,child: Container(color: Colors.red,),child: LayoutDemo(),),);}
}class LayoutDemo extends StatelessWidget {@overrideWidget build(BuildContext context) {// TODO: implement buildreturn AspectRatio(aspectRatio: 3.0 / 1.0,child: Container(color: Colors.blue,),);}
}

http://www.risenshineclean.com/news/2336.html

相關(guān)文章:

  • 網(wǎng)站上想放個(gè)蘋果地圖怎么做短視頻seo是什么
  • 文員工作內(nèi)容手機(jī)管家一鍵優(yōu)化
  • 淘寶購(gòu)物式wordpress懷柔網(wǎng)站整站優(yōu)化公司
  • 蕪湖龍湖建設(shè)網(wǎng)站中國(guó)知名網(wǎng)站排行榜
  • 有沒(méi)有幫別人做圖片的網(wǎng)站賺錢關(guān)鍵詞調(diào)詞平臺(tái)哪個(gè)好
  • 做期貨都看那些網(wǎng)站b站推廣引流最佳方法
  • 美侖美家具的網(wǎng)站誰(shuí)做的網(wǎng)站seo優(yōu)化方法
  • p2p網(wǎng)站開(kāi)發(fā)新浪微輿情大數(shù)據(jù)平臺(tái)
  • 廣告網(wǎng)站模板下載不了接外包項(xiàng)目的網(wǎng)站
  • 深圳網(wǎng)站開(kāi)發(fā)公司西安網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣
  • 南通住房城鄉(xiāng)建設(shè)委官方網(wǎng)站微信群推廣平臺(tái)有哪些
  • 做360網(wǎng)站優(yōu)化蘇州關(guān)鍵詞優(yōu)化軟件
  • 泛解析對(duì)網(wǎng)站的影響百度問(wèn)問(wèn)首頁(yè)
  • 陽(yáng)谷網(wǎng)站建設(shè)公司網(wǎng)店運(yùn)營(yíng)教學(xué)
  • 精美企業(yè)網(wǎng)站seo數(shù)據(jù)優(yōu)化教程
  • H5網(wǎng)站建設(shè)報(bào)價(jià)多少網(wǎng)站優(yōu)化排名公司
  • 數(shù)據(jù)庫(kù)檢索網(wǎng)站建設(shè)快速優(yōu)化seo軟件
  • 米客優(yōu)品的網(wǎng)站是哪做的中視頻自媒體平臺(tái)注冊(cè)官網(wǎng)
  • 上海集團(tuán)網(wǎng)站制作杭州seo公司哪家好
  • 商業(yè)網(wǎng)站的建設(shè)與制作世界500強(qiáng)企業(yè)名單
  • b2b電子商務(wù)網(wǎng)站交易流程百度信息流投放在哪些平臺(tái)
  • 韓語(yǔ)淘寶代購(gòu)網(wǎng)站建設(shè)東莞關(guān)鍵詞自動(dòng)排名
  • 建設(shè)網(wǎng)站時(shí)以什么為導(dǎo)向性價(jià)比高seo排名
  • 電商網(wǎng)站的付款功能域名ip查詢
  • 天將建設(shè)集團(tuán)有限公司網(wǎng)站什么文案容易上熱門
  • 一品威客做任務(wù)要給網(wǎng)站錢嗎江門網(wǎng)站建設(shè)模板
  • 德國(guó)網(wǎng)站域名后綴外鏈怎么做
  • 哈爾濱做網(wǎng)站哪好小紅書推廣引流
  • 咸陽(yáng)市城鄉(xiāng)建設(shè)規(guī)劃局網(wǎng)站企業(yè)網(wǎng)絡(luò)營(yíng)銷成功案例
  • 大型網(wǎng)購(gòu)網(wǎng)站開(kāi)發(fā)框架谷歌應(yīng)用商店下載