// 對齊 child:Text( '很是喜歡前端,而且願意爲此奮鬥一輩子。我但願能夠出1000集免費教程。', textAlign:TextAlign.left, ) /** textAlign:TextAlign.left * center: 文本以居中形式對齊,這個也算比較經常使用的了。 * left:左對齊,常用,讓文本居左進行對齊,效果和start同樣。 * right :右對齊,使用頻率也不算高。 * start:以開始位置進行對齊,相似於左對齊。 * end: 覺得本結尾處進行對齊,不經常使用。有點相似右對齊 */
設置最多顯示的行數,好比咱們如今只顯示1行
child:Text( '很是喜歡前端,而且願意爲此奮鬥一輩子。我但願能夠出1000集免費教程。', textAlign:TextAlign.left, maxLines: 1, )
overflow屬性是用來設置文本溢出時,如何處理
child:Text( '很是喜歡前端,而且願意爲此奮鬥一輩子。我但願能夠出1000集免費教程。', textAlign:TextAlign.left, overflow: clip, ) /* * clip:直接切斷,剩下的文字就沒有了 * ellipsis:在後邊顯示省略號,體驗性較好 * fade: 溢出的部分會進行一個漸變消失的效果 * * */
style屬性較多
child:Text( '很是喜歡前端,而且願意爲此奮鬥一輩子。我但願能夠出1000集免費教程。', textAlign:TextAlign.left, overflow:TextOverflow.ellipsis, maxLines: 1, style: TextStyle( fontSize:25.0, color:Color.fromARGB(255, 255, 150, 150), decoration:TextDecoration.underline, decorationStyle:TextDecorationStyle.solid, ), ) /* inherit: true, // 爲false的時候不顯示 color: Color.fromARGB(255, 150, 150, 150), // 顏色 fontSize :22.0, // 字號 fontWeight: FontWeight.w700, // 字重,加粗也用這個字段 FontWeight.w700 fontStyle: FontStyle.italic , // FontStyle.normal FontStyle.italic斜體 letterSpacing: 10.0, // 字符間距 就是單個字母或者漢字之間的間隔,能夠是負數 wordSpacing: 15.0, // 字間距 句字之間的間距 textBaseline: TextBaseline.alphabetic, // 基線,兩個值,字面意思是一個用來排字母的,一人用來排表意字的(相似中文) textBaseline: TextBaseline.ideographic height: 1.0, // 當用來Text控件上時,行高(會乘以fontSize,因此不以設置過大) decoration: TextDecoration.overline, // 添加上劃線 decoration: TextDecoration.lineThrough, // 添加刪除線 decoration: TextDecoration.underline, // 添加下劃線 decorationColor, // 劃線的顏色 decorationStyle: TextDecorationStyle.dotted, // 這個style可能控制畫實線,虛線,兩條線,點, 波浪線等 debugLabel, background: //文本背景色 String fontFamily, // 字體 String package, */
Container(容器控件)在Flutter是常用的控件,它就至關於咱們HTML裏的<div>標籤
padding的屬性就是一個內邊距
child:Container( child:new Text('Container容器組件', style: TextStyle(fontSize: 40.0) ), alignment: Alignment.topLeft, width:500.0, height:400.0, color: Colors.lightBlue, padding:const EdgeInsets.all(10.0), )
padding:const EdgeInsets.all(10.0),
設置Container的內邊距是10,左右上下所有爲10
padding:const EdgeInsets.fromLTRB(10.0,30.0,0.0,0.0)
能夠知足咱們分別設置上下左右,LTRB分別表明左、上、右、下
child:Container( child:new Text('Hello JSPang', style: TextStyle(fontSize: 40.0) ), alignment: Alignment.topLeft, width:500.0, height:400.0, color: Colors.lightBlue, padding:const EdgeInsets.fromLTRB(10.0,30.0,0.0,0.0), margin: const EdgeInsets.all(10.0), )
decoration是 container 的修飾器,主要的功能是設置背景和邊框
好比你須要給背景加入一個漸變,和邊框 這時候須要使用BoxDecoration這個類
須要注意的是若是你設置了decoration,就不要再設置color屬性了,由於這樣會衝突
child:Container( child:new Text('Hello JSPang',style: TextStyle(fontSize: 40.0),), alignment: Alignment.topLeft, width:500.0, height:400.0, padding:const EdgeInsets.fromLTRB(10.0,30.0,0.0,0.0), margin: const EdgeInsets.all(10.0), decoration:new BoxDecoration( gradient:const LinearGradient( colors:[Colors.lightBlue,Colors.greenAccent,Colors.purple] ), border:Border.all(width:2.0,color:Colors.red) ) )
1.Image.asset:加載資源圖片,就是加載項目資源目錄中的圖片,加入圖片後會增大打包的包體體積,用的是相對路徑。
2.Image.network:網絡資源圖片,意思就是你須要加入一段http://xxxx.xxx的這樣的網絡路...。
3.Image.file:加載本地圖片,就是加載本地文件中的圖片,這個是一個絕對路徑,跟包體無關。
4.Image.memory: 加載Uint8List資源圖片前端
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'Text widget', home:Scaffold( body:Center( child:Container( child:new Image.network( 'http://jspang.com/static/myimg/blogtouxiang.jpg', scale:1.0, ), width:300.0, height:200.0, color: Colors.lightBlue, ), ), ), ); } }
fit屬性能夠控制圖片的拉伸和擠壓,這些都是根據圖片的父級容器來的,咱們先來看看這些屬性(建議此部分組好看視頻理解)。vue
BoxFit.fill:全圖顯示,圖片會被拉伸,並充滿父容器。
BoxFit.contain:全圖顯示,顯示原比例,可能會有空隙。
BoxFit.cover:顯示可能拉伸,可能裁切,充滿(圖片要充滿整個容器,還不變形)。
BoxFit.fitWidth:寬度充滿(橫向充滿),顯示可能拉伸,可能裁切。
BoxFit.fitHeight :高度充滿(豎向充滿),顯示可能拉伸,可能裁切。
BoxFit.scaleDown:效果和contain差很少,可是此屬性不容許顯示超過源圖片大小,可小不可大node
child:Container( child:new Image.network( 'http://img.nodebook.top/nodebooklogo.jpg', scale:1.0, fit: BoxFit.fill ), width:300.0, height:200.0, color: Colors.lightBlue, )
child:new Image.network( 'http://jspang.com/static/myimg/blogtouxiang.jpg', color: Colors.greenAccent, colorBlendMode: BlendMode.darken, )
color:是要混合的顏色,若是你只設置color是沒有意義的
colorBlendMode:是混合模式,至關於咱們如何混合。
ImageRepeat.repeat : 橫向和縱向都進行重複,直到鋪滿整個畫布。web
ImageRepeat.repeatX: 橫向重複,縱向不重複。typescript
ImageRepeat.repeatY:縱向重複,橫向不重複數組
child:new Image.network( 'http://jspang.com/static/myimg/blogtouxiang.jpg', repeat: ImageRepeat.repeat, ),
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context){ return MaterialApp( title:'JSPang Flutter Demo', home:Scaffold( appBar:new AppBar( title:new Text('ListView Widget') ), body: new ListView( children:<Widget>[ new ListTile( leading:new Icon(Icons.access_time), title:new Text('access_time') ), new ListTile( leading:new Icon(Icons.account_balance), title:new Text('account_balance') ), ] ) ), ); } }
body: new ListView( children:<Widget>[ new ListTile( leading:new Icon(Icons.access_time), title:new Text('access_time') ), new ListTile( leading:new Icon(Icons.account_balance), title:new Text('account_balance') ), ] ), ---
body: new ListView( children:<Widget>[ new Image.network( 'http://jspang.com/static/upload/20181111/G-wj-ZQuocWlYOHM6MT2Hbh5.jpg' ), new Image.network( 'http://jspang.com/static/upload/20181109/1bHNoNGpZjyriCNcvqdKo3s6.jpg' ), new Image.network( 'http://jspang.com/static/myimg/typescript_banner.jpg' ), new Image.network( 'http://jspang.com/static/myimg/smile-vue.jpg' ) ] ),
其實仍是使用咱們的ListView組件,只是在ListView組件里加一個ScrollDirection屬性。
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'Text widget', home:Scaffold( body:Center( child:Container( height:200.0, child:new ListView( scrollDirection: Axis.horizontal, children: <Widget>[ new Container( width:180.0, color: Colors.lightBlue, ), new Container( width:180.0, color: Colors.amber, ), new Container( width:180.0, color: Colors.deepOrange, ),new Container( width:180.0, color: Colors.deepPurpleAccent, ), ], ) ), ), ), ); } }
ListView組件的scrollDirection屬性只有兩個值,一個是橫向滾動,一個是縱向滾動。默認的就是垂直滾動,因此若是是垂直滾動,咱們通常都不進行設置。網絡
Axis.horizontal:橫向滾動或者叫水平方向滾動。app
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( body:Center( child:Container( height:200.0, child:MyList() // => 組件化 ), ), ), ); } } // MyList class MyList extends StatelessWidget{ @override Widget build(BuildContext context){ return ListView( scrollDirection: Axis.horizontal, children: <Widget>[ new Container( width:180.0, color: Colors.lightBlue, ), new Container( width:180.0, color: Colors.amber, ), new Container( width:180.0, color: Colors.deepOrange, ),new Container( width:180.0, color: Colors.deepPurpleAccent, ), ], ); } }
List類型的使用
List是Dart的集合類型之一,其實你能夠把它簡單理解爲數組(反正我是這麼認爲的) , 它的聲明有幾種方式:less
var myList = List(): 非固定長度的聲明。
var myList = List(2): 固定長度的聲明。
var myList= List<String>():固定類型的聲明方式。
var myList = [1,2,3]: 對List直接賦值。jsp
void main () => runApp(MyApp( items: new List<String>.generate(1000, (i)=> "Item $i") ));
generate方法傳遞兩個參數,第一個參數是生成的個數,第二個是方法
import 'package:flutter/material.dart'; void main () => runApp(MyApp( items: new List<String>.generate(1000, (i)=> "Item $i") )); class MyApp extends StatelessWidget{ final List<String> items; MyApp({Key key, @required this.items}):super(key:key); @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( body:new ListView.builder( itemCount:items.length, itemBuilder:(context,index){ return new ListTile( title:new Text('${items[index]}'), ); } ) ), ); } }
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( body:GridView.count( padding:const EdgeInsets.all(20.0), crossAxisSpacing: 10.0, crossAxisCount: 3, children: <Widget>[ const Text('I am Jspang'), const Text('I love Web'), const Text('jspang.com'), const Text('我喜歡玩遊戲'), const Text('我喜歡看書'), const Text('我喜歡吃火鍋') ], ) ), ); } }
padding:表示內邊距,這個小夥伴們應該很熟悉。
crossAxisSpacing:網格間的空當,至關於每一個網格之間的間距。
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( body:GridView( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, mainAxisSpacing: 2.0, crossAxisSpacing: 2.0, childAspectRatio: 0.7 ), children: <Widget>[ new Image.network('http://img5.mtime.cn/mt/2018/10/22/104316.77318635_180X260X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/10/10/112514.30587089_180X260X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/11/13/093605.61422332_180X260X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/11/07/092515.55805319_180X260X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/11/21/090246.16772408_135X190X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/11/17/162028.94879602_135X190X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/11/19/165350.52237320_135X190X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/11/16/115256.24365160_180X260X4.jpg',fit: BoxFit.cover), new Image.network('http://img5.mtime.cn/mt/2018/11/20/141608.71613590_135X190X4.jpg',fit: BoxFit.cover), ], ) ), ); } }
childAspectRatio:寬高比,這個值的意思是寬是高的多少倍,若是寬是高的2倍,那咱們就寫2.0,若是高是寬的2倍,咱們就寫0.5
Flutter中的row控件就是水平控件,它可讓Row裏邊的子元素進行水平排列
Row控件能夠分爲靈活排列和非靈活排列兩種
從字面上就能夠理解到,不靈活就是根據Row子元素的大小,進行佈局。若是子元素不足,它會留有空隙,若是子元素超出,它會警告。
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('水平方向佈局'), ), body:new Row( children: <Widget>[ new RaisedButton( onPressed: (){ }, color:Colors.redAccent, child:new Text('紅色按鈕') ), new RaisedButton( onPressed: (){ }, color:Colors.orangeAccent, child: new Text('黃色按鈕'), ), new RaisedButton( onPressed: (){ }, color:Colors.pinkAccent, child:new Text('粉色按鈕') ) ], ) ), ); } }
這時候你會發現的頁面已經有了三個按鈕,但這三個按鈕並無充滿一行,而是出現了空隙。這就是不靈活橫向排列形成的。它根據子元素的大小來進行排列。若是咱們想實現充滿一行的效果,就要使用靈活水平佈局了
在按鈕的外邊加入Expanded就能夠了
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('水平方向佈局'), ), body:new Row( children: <Widget>[ Expanded(child:new RaisedButton( onPressed: (){ }, color:Colors.redAccent, child:new Text('紅色按鈕') )), Expanded(child:new RaisedButton( onPressed: (){ }, color:Colors.orangeAccent, child: new Text('黃色按鈕'), ) ), Expanded(child:new RaisedButton( onPressed: (){ }, color:Colors.pinkAccent, child:new Text('粉色按鈕') ) ) ], ) ), ); } }
中間的按鈕大,而兩邊的按鈕保持真實大小
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('水平方向佈局'), ), body:new Row( children: <Widget>[ new RaisedButton( onPressed: (){ }, color:Colors.redAccent, child:new Text('紅色按鈕') ), Expanded(child:new RaisedButton( onPressed: (){ }, color:Colors.orangeAccent, child: new Text('黃色按鈕'), ) ), new RaisedButton( onPressed: (){ }, color:Colors.pinkAccent, child:new Text('粉色按鈕') ) ], ) ), ); } }
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('垂直方向佈局'), ), body:Column( children: <Widget>[ Text('I am JSPang'), Text('my website is jspang.com'), Text('I love coding') ], crossAxisAlignment: CrossAxisAlignment.start ) ), ); } }
CrossAxisAlignment.star:居左對齊。
CrossAxisAlignment.end:居右對齊。
mainAxisAlignment 主軸的對齊方式
main軸:若是你用column組件,那垂直就是主軸,若是你用Row組件,那水平就是主軸。
cross軸:cross軸咱們稱爲幅軸,是和主軸垂直的方向。好比Row組件,那垂直就是幅軸,Column組件的幅軸就是水平方向的
mainAxisAlignment: MainAxisAlignment.center
讓文字相對於水平方向居中,咱們如何處理?其實只要加入Center組件就能夠輕鬆解決
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('垂直方向佈局'), ), body:Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Center(child:Text('I am JSPang')), Center(child:Text('my website is jspang.com')), Center(child:Text('I love coding')) ], ) ), ); } }
在學習水平佈局的時候咱們對Expanded有了深入的理解,它就是靈活佈局。好比咱們想讓中間區域變大,而頭部區域和底部根據文字所佔空間進行顯示
body:Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Center(child:Text('I am JSPang')), Expanded(child:Center(child:Text('my website is jspang.com'))), Center(child:Text('I love coding')) ], )
alignment屬性是控制層疊的位置的,建議在兩個內容進行層疊時使用。它有兩個值X軸距離和Y軸距離,值是從0到1的,都是從上層容器的左上角開始算起的
CircleAvatar這個常常用來做頭像的,組件裏邊有個radius的值能夠設置圖片的弧度
new CircleAvatar( backgroundImage: new NetworkImage('http://jspang.com/static//myimg/blogtouxiang.jpg'), radius: 100.0, )
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ var stack = new Stack( alignment: const FractionalOffset(0, 0.1), children: <Widget>[ new CircleAvatar( backgroundImage: new NetworkImage('http://jspang.com/static//myimg/blogtouxiang.jpg'), radius: 100.0, ), new Container( decoration: new BoxDecoration( color: Colors.lightBlue, ), padding: EdgeInsets.all(5.0), child: new Text('JSPang 技術胖'), ) ], ); return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('垂直方向佈局'), ), body:Center(child:stack), ), ); } }
若是是超過兩個組件的層疊該如何進行定位那?這就是咱們加今天要學的主角Positioned組件了。這個組件也叫作層疊定位組件
Positioned組件的屬性
bottom: 距離層疊組件下邊的距離
left:距離層疊組件左邊的距離
top:距離層疊組件上邊的距離
right:距離層疊組件右邊的距離
width: 層疊定位組件的寬度
height: 層疊定位組件的高度
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ var stack = new Stack( children: <Widget>[ new CircleAvatar( backgroundImage: new NetworkImage('http://jspang.com/static//myimg/blogtouxiang.jpg'), radius: 100.0, ), new Positioned( top:10.0, left:10.0, child: new Text('JSPang.com'), ), new Positioned( bottom:10.0, right:10.0, child: new Text('技術胖'), ) ], ); return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('層疊佈局'), ), body:Center(child:stack), ), ); } }
Flutter還有一種比較比較酷炫的佈局方式:卡片式佈局。這種佈局相似ViewList,可是列表會以物理卡片的形態進行展現
import 'package:flutter/material.dart'; void main () => runApp(MyApp()); class MyApp extends StatelessWidget{ @override Widget build(BuildContext context ){ var card = new Card( child: Column( children: <Widget>[ ListTile( title:new Text('吉林省吉林市昌邑區',style: TextStyle(fontWeight: FontWeight.w500),), subtitle: new Text('技術胖:1513938888'), leading: new Icon(Icons.account_box,color: Colors.lightBlue,), ), new Divider(), ListTile( title:new Text('北京市海淀區中國科技大學',style: TextStyle(fontWeight: FontWeight.w500),), subtitle: new Text('勝宏宇:1513938888'), leading: new Icon(Icons.account_box,color: Colors.lightBlue,), ), new Divider(), ListTile( title:new Text('河南省濮陽市百姓辦公樓',style: TextStyle(fontWeight: FontWeight.w500),), subtitle: new Text('JSPang:1513938888'), leading: new Icon(Icons.account_box,color: Colors.lightBlue,), ), new Divider(), ], ), ); return MaterialApp( title:'ListView widget', home:Scaffold( appBar:new AppBar( title:new Text('卡片佈局'), ), body:Center(child:card), ), ); } }
它有兩個最基本的屬性:
child:能夠放入容器,圖標,文字。讓你構建多彩的按鈕。 onPressed:點擊事件的相應,通常會調用Navigator組件
咱們在做頁面導航時,大量的使用了RaisedButton組件,這個組件的使用在實際工做中用的也比較多
1.Navigator.push:是跳轉到下一個頁面,它要接受兩個參數一個是上下文context,另外一個是要跳轉
2.Navigator.pop:是返回到上一個頁面,使用時傳遞一個context(上下文)參數,使用時要注意的是,你必須是有上級頁面的,也就是說上級頁面使用了Navigator.push。
import 'package:flutter/material.dart'; void main(){ runApp(MaterialApp( title:'導航演示1', home:new MyApp() )); } class MyApp extends StatelessWidget{ @override Widget build(BuildContext context){ return new Scaffold( appBar: AppBar(title:Text('導航頁面')), body:Center( child:RaisedButton( child:Text('查看商品詳情頁面'), onPressed: (){ Navigator.push(context,new MaterialPageRoute( builder:(context) =>new SecondScreen()) ); }, ) ) ); } } class SecondScreen extends StatelessWidget{ @override Widget build(BuildContext context){ return Scaffold( appBar:AppBar(title:Text('技術胖商品詳情頁')), body:Center( child:RaisedButton( child:Text('返回'), onPressed: (){ Navigator.pop(context); }, )) ); } }
# Center組件
import 'package:flutter/material.dart';
void main(){
runApp(new Center( //Center組件 child: Text( "文本內容", textDirection: TextDirection.ltr ) ))
}
# 自定義組件
StatelessWidget //無狀態組件
StatefulWidget //有狀態組件
class MyApp extends StatelessWidget{
@override Widget build(BuildContext context) { return Center( //Center組件 child: Text( "文本內容", textDirection: TextDirection.ltr, style: TextStyle( fontSize: 40.0, color: Color.fromRGBO(255,0,0,0.5) ) ) ) }
}
# MaterialApp 和 Scaffold > MaterialApp是一個方便的Widget,它封裝了應用程序實現 Material Desigin 所須要的一些Widget 通常做爲頂層Widget組件 ### 經常使用屬性 home(主頁) title(標題) color(顏色) theme(主題) routes(路由) ### Scaffold組件 > Scaffold 是 Material Desigin 佈局結構的基本實現 ### Scaffold組件屬性 appBar 顯示在界面頂部的一個 appBar body 當前界面所顯示的主要 內飾 Widget drawer 抽屜菜單控件
import 'package:flutter/material.dart';
void main(){
runApp(MaterialApp(
title:'導航演示1', home:new MyApp(), theme:ThemeData( primarySwatch: Colors.yellow )
));
}
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context){
return new Scaffold( appBar: AppBar(title:Text('導航頁面')), body:Center( child:RaisedButton( child:Text('查看商品詳情頁面'), onPressed: (){ Navigator.push(context,new MaterialPageRoute( builder:(context) =>new SecondScreen()) ); }, ) ) );
}
}
class SecondScreen extends StatelessWidget{
@override
Widget build(BuildContext context){
return Scaffold( appBar:AppBar(title:Text('技術胖商品詳情頁')), body:Center( child:RaisedButton( child:Text('返回'), onPressed: (){ Navigator.pop(context); }, )) );
}}