Flutter 导航到颤振中的另一页
嗨,我有个问题。我有一个包含标题和图片的列表,显示在应用程序的主页上。单击图片时,应打开与此元素对应的另一页,但始终打开相同的第一页。我试图为每个页面创建单独的文件,但无法将单独的页面链接到单独的按钮。提前谢谢 主页。省道:Flutter 导航到颤振中的另一页,flutter,dart,hyperlink,navigation,Flutter,Dart,Hyperlink,Navigation,嗨,我有个问题。我有一个包含标题和图片的列表,显示在应用程序的主页上。单击图片时,应打开与此元素对应的另一页,但始终打开相同的第一页。我试图为每个页面创建单独的文件,但无法将单独的页面链接到单独的按钮。提前谢谢 主页。省道: import 'package:flutter/material.dart'; import 'package:flutter_icons/flutter_icons.dart'; import 'package:furniture_app/util/data.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:furniture_app/util/data.dart';
//import 'package:furniture_app/widgets/badge.dart';
import 'package:furniture_app/widgets/product_item.dart';
import 'package:furniture_app/widgets/room_item.dart';
import 'package:furniture_app/widgets/room_item2.dart';
import 'package:furniture_app/widgets/room_item3.dart';
//import 'package:furniture_app/widgets/search_card.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: <Widget>[
Center(
),
SizedBox(width: 20.0),
],
),
body: ListView(
padding: EdgeInsets.only(left: 20.0),
children: <Widget>[
Padding(
padding: EdgeInsets.only(right: 20.0),
child: Text(
"Поиск низких цен \nна товары и услуги",
style: TextStyle(
fontSize: 35.0,
fontWeight: FontWeight.bold,
),
),
),
SizedBox(height: 10.0),
SizedBox(height: 30.0),
buildRoomList(),
SizedBox(height: 20.0),
buildTitleRow(),
buildProductList(),
SizedBox(height: 10.0),
],
),
);
}
buildRoomList() {
return Container(
height: 275,
child: ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: furnitures.length,
itemBuilder: (BuildContext context, int index) {
Map furniture = furnitures[index];
return RoomItem(
furniture: furniture,
);
},
),
);
}
buildTitleRow() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"Примеры использования",
style: TextStyle(
fontSize: 23,
fontWeight: FontWeight.w800,
),
),
],
);
}
buildProductList() {
return Container(
height: 140.0,
child: ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: furnitures.length,
itemBuilder: (BuildContext context, int index) {
Map furniture2 = furnitures2[index];
return ProductItem(
furniture: furniture2,
);
},
),
);
}
}
房间项目。省道
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:furniture_app/screens/home.dart';
class MainScreen extends StatefulWidget {
@override
_MainScreenState createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
PageController _pageController;
int _page = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(
physics: NeverScrollableScrollPhysics(),
controller: _pageController,
onPageChanged: onPageChanged,
children: List.generate(4, (index) => Home()),
),
bottomNavigationBar: Theme(
data: Theme.of(context).copyWith(
canvasColor: Theme.of(context).primaryColor,
primaryColor: Theme.of(context).accentColor,
textTheme: Theme.of(context).textTheme.copyWith(
caption: TextStyle(color: Colors.grey[500]),
),
),
child: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(
Feather.home,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.heart,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.user,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.grid,
),
title: Container(height: 0.0),
),
],
onTap: navigationTapped,
currentIndex: _page,
),
),
);
}
void navigationTapped(int page) {
_pageController.jumpToPage(page);
}
@override
void initState() {
super.initState();
_pageController = PageController(initialPage: 2);
}
@override
void dispose() {
super.dispose();
_pageController.dispose();
}
void onPageChanged(int page) {
setState(() {
this._page = page;
});
}
}
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:furniture_app/util/data.dart';
//import 'package:furniture_app/widgets/badge.dart';
import 'package:furniture_app/widgets/product_item.dart';
class Details extends StatefulWidget {
@override
_DetailsState createState() => _DetailsState();
}
class _DetailsState extends State<Details> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: <Widget>[
],
),
body: Stack(
children: <Widget>[
ListView(
padding: EdgeInsets.symmetric(horizontal: 20.0),
children: <Widget>[
SizedBox(height: 10.0),
buildImage(),
SizedBox(height: 20.0),
Text(
"${furnitures[0]["name"]}",
style: TextStyle(
fontSize: 32.0,
fontWeight: FontWeight.w900,
),
),
SizedBox(height: 10.0),
Text(
"\$550.00",
style: TextStyle(
fontSize: 27.0,
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 30.0),
Text(
"Description",
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10.0),
Text(
"Sed porttitor lectus nibh. Cras ultricies ligula "
"sed magna dictum porta. Praesent sapien massa, "
"convallis a pellentesque nec, egestas non nisi. "
"Lorem ipsum dolor sit amet, consectetur adipiscing "
"elit. Nulla porttitor accumsan tincidunt. "
"Curabitur arcu erat, accumsan id imperdiet et, "
"porttitor at sem.",
style: TextStyle(
fontSize: 15.0,
color: Colors.grey,
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 20.0),
Text(
"Photos",
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10.0),
buildProductList(),
SizedBox(height: 10.0),
],
),
buildFloatingButton(),
],
),
);
}
buildProductList() {
return Container(
height: 100.0,
child: ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: furnitures.length,
itemBuilder: (BuildContext context, int index) {
Map furniture = furnitures.reversed.toList()[index];
return ProductItem(
furniture: furniture,
);
},
),
);
}
buildFloatingButton() {
return Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(right: 20.0),
child: Container(
height: 60.0,
width: 60.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context).accentColor,
boxShadow: [
BoxShadow(
color: Colors.orange[200],
offset: Offset(0.0, 10.0),
blurRadius: 10,
),
],
),
child: Center(
child: Icon(
Feather.plus,
color: Colors.white,
size: 25.0,
),
),
),
),
);
}
buildImage() {
return Container(
height: 240.0,
width: MediaQuery.of(context).size.width,
child: Stack(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furnitures[0]["img"]}",
height: 240.0,
width: MediaQuery.of(context).size.width,
fit: BoxFit.cover,
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import '../screens/details.dart';
class ProductItem extends StatelessWidget {
final Map furniture;
ProductItem({this.furniture});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(right: 20),
child: GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return Details();
},
),
);
},
child: Container(
height: 140,
width: 140,
child: ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furniture["img"]}",
height: 140,
width: 140,
fit: BoxFit.cover,
),
),
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:furniture_app/screens/details2.dart';
import 'package:furniture_app/screens/details3.dart';
import 'package:furniture_app/util/data.dart';
import '../screens/details.dart';
class RoomItem extends StatelessWidget {
final Map furniture;
RoomItem({this.furniture});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(right: 20),
child: GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return Details();
},
),
);
},
child: Container(
height: 275,
width: 280,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
furniture['name'],
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20,
),
),
SizedBox(height: 10),
ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furniture["img"]}",
height: 240,
width: 280,
fit: BoxFit.cover,
),
),
],
),
),
),
);
}
}
List furnitures = [
{
"name": "Оставить заявку",
"img": "assets/1.png",
},
{
"name": "О сервисе",
"img": "assets/2.png",
},
{
"name": "Руководителям",
"img": "assets/3.png",
},
];
List furnitures2 = [
{
"name": "Оставить заявку",
"img": "assets/1.jpeg",
},
{
"name": "О сервисе",
"img": "assets/2.jpeg",
},
{
"name": "Руководителям",
"img": "assets/3.jpeg",
},
];
import 'package:flutter/material.dart';
import 'package:stackoverflow/products.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
// This widget is the home page of your application. It is stateful, meaning
// that it has a State object (defined below) that contains fields that affect
// how it looks.
// This class is the configuration for the state. It holds the values (in this
// case the title) provided by the parent (in this case the App widget) and
// used by the build method of the State. Fields in a Widget subclass are
// always marked "final".
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List furniture = [
{
"name": "Оставить заявку",
"img": "assets/1.png",
},
{
"name": "О сервисе",
"img": "assets/1.png",
},
{
"name": "Руководителям",
"img": "assets/1.png",
},
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(child: ListView(
children: furniture.map((furniture){
return ListTile(title: Text(furniture['name']),leading: Image.asset(furniture['img']),onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => Products(furniture: furniture,),));
},);
}).toList(),
),)
);
}
}
import 'package:flutter/material.dart';
class Products extends StatefulWidget {
dynamic furniture;
Products({this.furniture});
@override
_ProductsState createState() => _ProductsState();
}
class _ProductsState extends State<Products> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.furniture['name']),),
body: Container(child: Column(
children: [
Image.asset(widget.furniture['img']),
],
),),
);
}
}
下面的示例在单击时从
列表创建家具列表
,打开带有名称和图像URL的新产品页面
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:furniture_app/screens/home.dart';
class MainScreen extends StatefulWidget {
@override
_MainScreenState createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
PageController _pageController;
int _page = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(
physics: NeverScrollableScrollPhysics(),
controller: _pageController,
onPageChanged: onPageChanged,
children: List.generate(4, (index) => Home()),
),
bottomNavigationBar: Theme(
data: Theme.of(context).copyWith(
canvasColor: Theme.of(context).primaryColor,
primaryColor: Theme.of(context).accentColor,
textTheme: Theme.of(context).textTheme.copyWith(
caption: TextStyle(color: Colors.grey[500]),
),
),
child: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(
Feather.home,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.heart,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.user,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.grid,
),
title: Container(height: 0.0),
),
],
onTap: navigationTapped,
currentIndex: _page,
),
),
);
}
void navigationTapped(int page) {
_pageController.jumpToPage(page);
}
@override
void initState() {
super.initState();
_pageController = PageController(initialPage: 2);
}
@override
void dispose() {
super.dispose();
_pageController.dispose();
}
void onPageChanged(int page) {
setState(() {
this._page = page;
});
}
}
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:furniture_app/util/data.dart';
//import 'package:furniture_app/widgets/badge.dart';
import 'package:furniture_app/widgets/product_item.dart';
class Details extends StatefulWidget {
@override
_DetailsState createState() => _DetailsState();
}
class _DetailsState extends State<Details> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: <Widget>[
],
),
body: Stack(
children: <Widget>[
ListView(
padding: EdgeInsets.symmetric(horizontal: 20.0),
children: <Widget>[
SizedBox(height: 10.0),
buildImage(),
SizedBox(height: 20.0),
Text(
"${furnitures[0]["name"]}",
style: TextStyle(
fontSize: 32.0,
fontWeight: FontWeight.w900,
),
),
SizedBox(height: 10.0),
Text(
"\$550.00",
style: TextStyle(
fontSize: 27.0,
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 30.0),
Text(
"Description",
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10.0),
Text(
"Sed porttitor lectus nibh. Cras ultricies ligula "
"sed magna dictum porta. Praesent sapien massa, "
"convallis a pellentesque nec, egestas non nisi. "
"Lorem ipsum dolor sit amet, consectetur adipiscing "
"elit. Nulla porttitor accumsan tincidunt. "
"Curabitur arcu erat, accumsan id imperdiet et, "
"porttitor at sem.",
style: TextStyle(
fontSize: 15.0,
color: Colors.grey,
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 20.0),
Text(
"Photos",
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10.0),
buildProductList(),
SizedBox(height: 10.0),
],
),
buildFloatingButton(),
],
),
);
}
buildProductList() {
return Container(
height: 100.0,
child: ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: furnitures.length,
itemBuilder: (BuildContext context, int index) {
Map furniture = furnitures.reversed.toList()[index];
return ProductItem(
furniture: furniture,
);
},
),
);
}
buildFloatingButton() {
return Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(right: 20.0),
child: Container(
height: 60.0,
width: 60.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context).accentColor,
boxShadow: [
BoxShadow(
color: Colors.orange[200],
offset: Offset(0.0, 10.0),
blurRadius: 10,
),
],
),
child: Center(
child: Icon(
Feather.plus,
color: Colors.white,
size: 25.0,
),
),
),
),
);
}
buildImage() {
return Container(
height: 240.0,
width: MediaQuery.of(context).size.width,
child: Stack(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furnitures[0]["img"]}",
height: 240.0,
width: MediaQuery.of(context).size.width,
fit: BoxFit.cover,
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import '../screens/details.dart';
class ProductItem extends StatelessWidget {
final Map furniture;
ProductItem({this.furniture});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(right: 20),
child: GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return Details();
},
),
);
},
child: Container(
height: 140,
width: 140,
child: ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furniture["img"]}",
height: 140,
width: 140,
fit: BoxFit.cover,
),
),
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:furniture_app/screens/details2.dart';
import 'package:furniture_app/screens/details3.dart';
import 'package:furniture_app/util/data.dart';
import '../screens/details.dart';
class RoomItem extends StatelessWidget {
final Map furniture;
RoomItem({this.furniture});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(right: 20),
child: GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return Details();
},
),
);
},
child: Container(
height: 275,
width: 280,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
furniture['name'],
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20,
),
),
SizedBox(height: 10),
ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furniture["img"]}",
height: 240,
width: 280,
fit: BoxFit.cover,
),
),
],
),
),
),
);
}
}
List furnitures = [
{
"name": "Оставить заявку",
"img": "assets/1.png",
},
{
"name": "О сервисе",
"img": "assets/2.png",
},
{
"name": "Руководителям",
"img": "assets/3.png",
},
];
List furnitures2 = [
{
"name": "Оставить заявку",
"img": "assets/1.jpeg",
},
{
"name": "О сервисе",
"img": "assets/2.jpeg",
},
{
"name": "Руководителям",
"img": "assets/3.jpeg",
},
];
import 'package:flutter/material.dart';
import 'package:stackoverflow/products.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
// This widget is the home page of your application. It is stateful, meaning
// that it has a State object (defined below) that contains fields that affect
// how it looks.
// This class is the configuration for the state. It holds the values (in this
// case the title) provided by the parent (in this case the App widget) and
// used by the build method of the State. Fields in a Widget subclass are
// always marked "final".
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List furniture = [
{
"name": "Оставить заявку",
"img": "assets/1.png",
},
{
"name": "О сервисе",
"img": "assets/1.png",
},
{
"name": "Руководителям",
"img": "assets/1.png",
},
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(child: ListView(
children: furniture.map((furniture){
return ListTile(title: Text(furniture['name']),leading: Image.asset(furniture['img']),onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => Products(furniture: furniture,),));
},);
}).toList(),
),)
);
}
}
import 'package:flutter/material.dart';
class Products extends StatefulWidget {
dynamic furniture;
Products({this.furniture});
@override
_ProductsState createState() => _ProductsState();
}
class _ProductsState extends State<Products> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.furniture['name']),),
body: Container(child: Column(
children: [
Image.asset(widget.furniture['img']),
],
),),
);
}
}
导入“包装:颤振/材料.省道”;
导入“包装:stackoverflow/products.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
//这是应用程序的主题。
//
//尝试使用“flutter run”运行应用程序。您将看到
//应用程序有一个蓝色工具栏。然后,在不退出应用程序的情况下,重试
//将下面的primarySwatch更改为Colors.green,然后调用
//“热重新加载”(在运行“颤振运行”的控制台中按“r”,
//或者只需将更改保存到颤振IDE中的“热重新加载”。
//请注意,计数器没有重置回零;应用程序
//未重新启动。
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
//此小部件是应用程序的主页。它是有状态的,表示
//它有一个状态对象(定义如下),其中包含影响
//看起来怎么样。
//此类是状态的配置。它保存值(在此
//案例名称)由家长(在本例中为应用程序小部件)提供,以及
//由State的build方法使用。小部件子类中的字段包括
//始终标记为“最终”。
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
列出家具=[
{
“名称”:“名称”,
“img”:“assets/1.png”,
},
{
“名称”:“бббб”,
“img”:“assets/1.png”,
},
{
“名称”:“ПццццццццМ”,
“img”:“assets/1.png”,
},
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
主体:容器(子:ListView(
儿童:家具。地图((家具){
返回ListTile(标题:Text(furniture['name']),前导:Image.asset(furniture['img']),onTap:(){
push(上下文,materialpage(builder:(上下文)=>产品(家具:家具,),);
},);
}).toList(),
),)
);
}
}
产品。省道
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:furniture_app/screens/home.dart';
class MainScreen extends StatefulWidget {
@override
_MainScreenState createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
PageController _pageController;
int _page = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(
physics: NeverScrollableScrollPhysics(),
controller: _pageController,
onPageChanged: onPageChanged,
children: List.generate(4, (index) => Home()),
),
bottomNavigationBar: Theme(
data: Theme.of(context).copyWith(
canvasColor: Theme.of(context).primaryColor,
primaryColor: Theme.of(context).accentColor,
textTheme: Theme.of(context).textTheme.copyWith(
caption: TextStyle(color: Colors.grey[500]),
),
),
child: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(
Feather.home,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.heart,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.user,
),
title: Container(height: 0.0),
),
BottomNavigationBarItem(
icon: Icon(
Feather.grid,
),
title: Container(height: 0.0),
),
],
onTap: navigationTapped,
currentIndex: _page,
),
),
);
}
void navigationTapped(int page) {
_pageController.jumpToPage(page);
}
@override
void initState() {
super.initState();
_pageController = PageController(initialPage: 2);
}
@override
void dispose() {
super.dispose();
_pageController.dispose();
}
void onPageChanged(int page) {
setState(() {
this._page = page;
});
}
}
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:furniture_app/util/data.dart';
//import 'package:furniture_app/widgets/badge.dart';
import 'package:furniture_app/widgets/product_item.dart';
class Details extends StatefulWidget {
@override
_DetailsState createState() => _DetailsState();
}
class _DetailsState extends State<Details> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: <Widget>[
],
),
body: Stack(
children: <Widget>[
ListView(
padding: EdgeInsets.symmetric(horizontal: 20.0),
children: <Widget>[
SizedBox(height: 10.0),
buildImage(),
SizedBox(height: 20.0),
Text(
"${furnitures[0]["name"]}",
style: TextStyle(
fontSize: 32.0,
fontWeight: FontWeight.w900,
),
),
SizedBox(height: 10.0),
Text(
"\$550.00",
style: TextStyle(
fontSize: 27.0,
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 30.0),
Text(
"Description",
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10.0),
Text(
"Sed porttitor lectus nibh. Cras ultricies ligula "
"sed magna dictum porta. Praesent sapien massa, "
"convallis a pellentesque nec, egestas non nisi. "
"Lorem ipsum dolor sit amet, consectetur adipiscing "
"elit. Nulla porttitor accumsan tincidunt. "
"Curabitur arcu erat, accumsan id imperdiet et, "
"porttitor at sem.",
style: TextStyle(
fontSize: 15.0,
color: Colors.grey,
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 20.0),
Text(
"Photos",
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10.0),
buildProductList(),
SizedBox(height: 10.0),
],
),
buildFloatingButton(),
],
),
);
}
buildProductList() {
return Container(
height: 100.0,
child: ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: furnitures.length,
itemBuilder: (BuildContext context, int index) {
Map furniture = furnitures.reversed.toList()[index];
return ProductItem(
furniture: furniture,
);
},
),
);
}
buildFloatingButton() {
return Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(right: 20.0),
child: Container(
height: 60.0,
width: 60.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context).accentColor,
boxShadow: [
BoxShadow(
color: Colors.orange[200],
offset: Offset(0.0, 10.0),
blurRadius: 10,
),
],
),
child: Center(
child: Icon(
Feather.plus,
color: Colors.white,
size: 25.0,
),
),
),
),
);
}
buildImage() {
return Container(
height: 240.0,
width: MediaQuery.of(context).size.width,
child: Stack(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furnitures[0]["img"]}",
height: 240.0,
width: MediaQuery.of(context).size.width,
fit: BoxFit.cover,
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import '../screens/details.dart';
class ProductItem extends StatelessWidget {
final Map furniture;
ProductItem({this.furniture});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(right: 20),
child: GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return Details();
},
),
);
},
child: Container(
height: 140,
width: 140,
child: ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furniture["img"]}",
height: 140,
width: 140,
fit: BoxFit.cover,
),
),
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:furniture_app/screens/details2.dart';
import 'package:furniture_app/screens/details3.dart';
import 'package:furniture_app/util/data.dart';
import '../screens/details.dart';
class RoomItem extends StatelessWidget {
final Map furniture;
RoomItem({this.furniture});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(right: 20),
child: GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return Details();
},
),
);
},
child: Container(
height: 275,
width: 280,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
furniture['name'],
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20,
),
),
SizedBox(height: 10),
ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
"${furniture["img"]}",
height: 240,
width: 280,
fit: BoxFit.cover,
),
),
],
),
),
),
);
}
}
List furnitures = [
{
"name": "Оставить заявку",
"img": "assets/1.png",
},
{
"name": "О сервисе",
"img": "assets/2.png",
},
{
"name": "Руководителям",
"img": "assets/3.png",
},
];
List furnitures2 = [
{
"name": "Оставить заявку",
"img": "assets/1.jpeg",
},
{
"name": "О сервисе",
"img": "assets/2.jpeg",
},
{
"name": "Руководителям",
"img": "assets/3.jpeg",
},
];
import 'package:flutter/material.dart';
import 'package:stackoverflow/products.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
// This widget is the home page of your application. It is stateful, meaning
// that it has a State object (defined below) that contains fields that affect
// how it looks.
// This class is the configuration for the state. It holds the values (in this
// case the title) provided by the parent (in this case the App widget) and
// used by the build method of the State. Fields in a Widget subclass are
// always marked "final".
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List furniture = [
{
"name": "Оставить заявку",
"img": "assets/1.png",
},
{
"name": "О сервисе",
"img": "assets/1.png",
},
{
"name": "Руководителям",
"img": "assets/1.png",
},
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(child: ListView(
children: furniture.map((furniture){
return ListTile(title: Text(furniture['name']),leading: Image.asset(furniture['img']),onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => Products(furniture: furniture,),));
},);
}).toList(),
),)
);
}
}
import 'package:flutter/material.dart';
class Products extends StatefulWidget {
dynamic furniture;
Products({this.furniture});
@override
_ProductsState createState() => _ProductsState();
}
class _ProductsState extends State<Products> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.furniture['name']),),
body: Container(child: Column(
children: [
Image.asset(widget.furniture['img']),
],
),),
);
}
}
导入“包装:颤振/材料.省道”;
类产品扩展了StatefulWidget{
动态家具;
产品({this.furniture});
@凌驾
_ProductsState createState()=>\u ProductsState();
}
类_ProductsState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(widget.furniture['name']),),
主体:容器(子:列)(
儿童:[
Image.asset(widget.furniture['img']),
],
),),
);
}
}
图像的
注意:我在资源中只使用了一个图像,因此我将图像路径指定为1。对于所有列表项,请确保更改图像路径