万物皆组件(Widget)
页(界)面,也是组件。
需求:首页List列表,点击item进入详情界面。
关键代码:
//命名路由:
class App extends StatelessWidget {
@override
Widget build(BuildContext c) {
return MaterialApp(
routes: {//定义命名路由
'/homeNewsDetail':(c)=>HomeNewsDetialPage(),
},
home:MyTab()
);
}
}
//使用
onTap: () {
//普通路由
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => HomeNewsDetialPage(index)));
// 命名路由
Navigator.pushNamed(context, '/homeNewsDetail');
},
------------------------------------------------------------------------------
onPressed:(){
Navigator.pop(context);//返回上一级页面
},
详情界面 HomeNewsDetialPage.dart
import 'package:flutter/material.dart';
class HomeNewsDetialPage extends StatefulWidget{
String index;
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return HomeNewsDetialState(index);
}
HomeNewsDetialPage({this.index='5'});
}
class HomeNewsDetialState extends State<HomeNewsDetialPage> {
String index="5";
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("中央新闻$index"),
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed:(){
Navigator.pop(context);//返回上一级页面
},
),),
body: Text("新闻内容。。。"),
),
);
}
HomeNewsDetialState(this.index);
}
首页List列表 HomePage.dart
import 'package:flutter/material.dart';
import 'package:flutter_app/HomeNewsDetial.dart';//引入要跳转到的组件(界面)
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("home"),
leading: Icon(Icons.home),
),
body: ListView(
children: <Widget>[
_buildChild(context, "1"),
Divider(),
_buildChild(context, "2"),
Divider(),
_buildChild(context, "3"),
Divider(),
_buildChild(context, "4"),
Divider(),
_buildChild(context, "5"),
Divider(),
_buildChild(context, "6"),
Divider(),
_buildChild(context, "7"),
Divider(),
_buildChild(context, "1"),
Divider(),
_buildChild(context, "2"),
Divider(),
_buildChild(context, "3"),
Divider(),
_buildChild(context, "4"),
],
),
),
);
}
Widget _buildChild(BuildContext context, String index) {
return ListTile(
title: Text("中央新闻" + index),
subtitle: Text("xasfcdcdcvvvvvvvvvvvvvvvvvvvvvvvv"),
leading:
Image.network("https://www.itying.com/images/flutter/$index.png"),
onTap: () {
// Navigator.of(context).push(
// MaterialPageRoute(builder: (context) => HomeNewsDetialPage(index:index)));
Navigator.pushNamed(context, '/homeNewsDetail');
},
);
}
}
命名路由传值
import 'package:flutter/material.dart';
import 'package:flutter_app/HomeNewsDetial.dart';
import 'MyTab.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
//定义路由:
final routes={
// '/homeNewsDetail':(c)=>HomeNewsDetialPage(),
'/homeNewsDetail':(c,{arguments})=>HomeNewsDetialPage(index:arguments),
};
@override
Widget build(BuildContext c) {
return MaterialApp(
// routes: {
// '/homeNewsDetail':(c)=>HomeNewsDetialPage(),
// },
onGenerateRoute: (RouteSettings settings){
final String name = settings.name;
final Function pageContentBuilder = this.routes[name];
if(pageContentBuilder!=null){
if(settings.arguments!=null){
final Route route = MaterialPageRoute(
builder: (c)=>pageContentBuilder(c,arguments:settings.arguments));
return route;
}else{
final Route route = MaterialPageRoute(
builder: (c)=>pageContentBuilder(c));
return route;
}
}
},
home:MyTab()
);
}
}
//使用
onTap: () {
// Navigator.of(context).push(
// MaterialPageRoute(builder: (context) => HomeNewsDetialPage(index:index)));
Navigator.pushNamed(context, '/homeNewsDetail',arguments: index);
},