Android 如何包装页面视图的内容,使指示器显示在页面视图结束处的正下方?
如何包装页面视图的内容,使指示器显示在页面视图结束处的正下方?。现在页面视图占据了整个屏幕,指示器位于屏幕底部。下面是如何创建PageView中的每个子项。在每个子对象中,我都有一个默认高度为200的图像和一个maxLines为2的TextView。虽然PageView中每个孩子的实际高度是设备屏幕的一半,但它占据了整个屏幕Android 如何包装页面视图的内容,使指示器显示在页面视图结束处的正下方?,android,flutter,flutter-layout,Android,Flutter,Flutter Layout,如何包装页面视图的内容,使指示器显示在页面视图结束处的正下方?。现在页面视图占据了整个屏幕,指示器位于屏幕底部。下面是如何创建PageView中的每个子项。在每个子对象中,我都有一个默认高度为200的图像和一个maxLines为2的TextView。虽然PageView中每个孩子的实际高度是设备屏幕的一半,但它占据了整个屏幕 final List<Widget> _pages = <Widget>[ new Column( mainAxisSize: MainAxis
final List<Widget> _pages = <Widget>[
new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Image.network(
'imageurl',
height: 200.0,
fit: BoxFit.fitWidth,
),
new Padding(
padding: EdgeInsets.all(20.0),
child: new Text(
"Order from wide range of restaurants",
maxLines: 2,
style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
)
],
),
new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Image.network(
'imageurl',
height: 200.0,
fit: BoxFit.fitWidth,
),
new Padding(
padding: EdgeInsets.all(20.0),
child: new Text(
"Order from wide range of restaurants",
maxLines: 2,
style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
],
),
new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Image.network(
'imageurl',
height: 200.0,
fit: BoxFit.fitWidth,
),
new Padding(
padding: EdgeInsets.all(20.0),
child: new Text(
"Order from wide range of restaurants",
maxLines: 2,
style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
)
],
)
];
最终列表_页面=[
新专栏(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新图像网络(
“imageurl”,
高度:200.0,
适合:BoxFit.fitWidth,
),
新填料(
填充:所有边缘设置(20.0),
儿童:新文本(
“从各种餐厅订购”,
maxLines:2,
样式:新的文本样式(fontSize:25.0,fontWeight:fontWeight.bold),
textAlign:textAlign.center,
),
)
],
),
新专栏(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新图像网络(
“imageurl”,
高度:200.0,
适合:BoxFit.fitWidth,
),
新填料(
填充:所有边缘设置(20.0),
儿童:新文本(
“从各种餐厅订购”,
maxLines:2,
样式:新的文本样式(fontSize:25.0,fontWeight:fontWeight.bold),
textAlign:textAlign.center,
),
),
],
),
新专栏(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新图像网络(
“imageurl”,
高度:200.0,
适合:BoxFit.fitWidth,
),
新填料(
填充:所有边缘设置(20.0),
儿童:新文本(
“从各种餐厅订购”,
maxLines:2,
样式:新的文本样式(fontSize:25.0,fontWeight:fontWeight.bold),
textAlign:textAlign.center,
),
)
],
)
];
有状态小部件的生成器方法
Widget build(BuildContext context) {
return new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
new Flexible(
child: new PageView.builder(
physics: new AlwaysScrollableScrollPhysics(),
controller: _controller,
itemCount: _pages.length,
itemBuilder: (BuildContext context, int index) {
return _pages[index % _pages.length];
},
),
fit: FlexFit.loose,
),
new Container(
color: Colors.black,
padding: const EdgeInsets.all(20.0),
child: new Center(
child: new DotsIndicator(
controller: _controller,
itemCount: _pages.length,
onPageSelected: (int page) {
_controller.animateToPage(
page,
duration: _kDuration,
curve: _kCurve,
);
},
),
),
)
],
);
}
小部件构建(构建上下文){
返回新列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
新柔性(
子项:新建PageView.builder(
物理:新的AlwaysScrollableScrollPhysics(),
控制器:_控制器,
itemCount:_pages.length,
itemBuilder:(构建上下文,int索引){
返回_页[index%_pages.length];
},
),
适合:FlexFit.宽松,
),
新容器(
颜色:颜色,黑色,
填充:常数边集全部(20.0),
孩子:新中心(
孩子:新的点指示器(
控制器:_控制器,
itemCount:_pages.length,
onPageSelected:(整版){
_controller.animateToPage(
页
持续时间:_k持续时间,
曲线:kCurve,
);
},
),
),
)
],
);
}
这里是我的解决方案,因为您没有粘贴整个源代码,所以我省略了dots部分
import 'package:flutter/material.dart';
class PageViewIssue extends StatefulWidget {
PageViewIssue({Key key, this.title}) : super(key: key);
static const String routeName = "/PageViewIssue";
final String title;
@override
_PageViewIssueState createState() => new _PageViewIssueState();
}
class _PageViewIssueState extends State<PageViewIssue> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: _getBodyContent(),
floatingActionButton: new FloatingActionButton(
onPressed: _onFloatingActionButtonPressed,
tooltip: 'Add',
child: new Icon(Icons.add),
),
);
}
void _onFloatingActionButtonPressed() {}
List<Widget> _getPageViews() {
final String imgUrl =
"https://images.pexels.com/photos/45201/kitty-cat-kitten-pet-45201.jpeg?auto=compress&cs=tinysrgb&h=320&w=320";
final List<Widget> _pages = <Widget>[
new Center(
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Center(
child: new Image.network(
imgUrl,
height: 200.0,
fit: BoxFit.fitWidth,
)),
new Padding(
padding: EdgeInsets.all(20.0),
child: new Text(
"Order from wide range of restaurants",
maxLines: 2,
style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
)
],
)),
new Center(
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Center(
child: new Image.network(
imgUrl,
height: 200.0,
fit: BoxFit.fitWidth,
)),
new Padding(
padding: EdgeInsets.all(20.0),
child: new Text(
"Order from wide range of restaurants",
maxLines: 2,
style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
],
)),
new Center(
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Center(
child: new Image.network(
imgUrl,
height: 200.0,
fit: BoxFit.fitWidth,
)),
new Padding(
padding: EdgeInsets.all(20.0),
child: new Text(
"Order from wide range of restaurants",
maxLines: 2,
style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
)
],
))
];
return _pages;
}
Widget _getBodyContent() {
var controller = new PageController(initialPage: 0);
var pageView = new PageView(
children: _getPageViews(), pageSnapping: true, controller: controller);
var width = MediaQuery.of(context).size.width;
var expansion1 = new Expanded(
child:
new Container(width: width, child: pageView, color: Colors.green),
flex: 9);
var expansion2 = new Expanded(
child: new Container(
width: width,
child: new Center(child: new Text("Text 2")),
color: Colors.redAccent),
flex: 1);
return new Column(children: <Widget>[expansion1, expansion2]);
}
}
导入“包装:颤振/材料.省道”;
类PageViewIssue扩展了StatefulWidget{
PageViewIssue({Key-Key,this.title}):超级(Key:Key);
静态常量字符串routeName=“/PageViewIssue”;
最后的字符串标题;
@凌驾
_PageViewIssueState createState()=>new_PageViewIssueState();
}
类_PageViewIssueState扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(widget.title),
),
正文:_getBodyContent(),
floatingActionButton:新的floatingActionButton(
按下:按下浮动操作按钮,
工具提示:“添加”,
子:新图标(Icons.add),
),
);
}
void _onFloatingActionButtonPressed(){}
列表_getPageViews(){
最终字符串imgUrl=
"https://images.pexels.com/photos/45201/kitty-cat-kitten-pet-45201.jpeg?auto=compress&cs=tinysrgb&h=320&w=320";
最终列表_页=[
新中心(
子:新列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新中心(
孩子:新图像网络(
伊姆古尔,
高度:200.0,
适合:BoxFit.fitWidth,
)),
新填料(
填充:所有边缘设置(20.0),
儿童:新文本(
“从各种餐厅订购”,
maxLines:2,
样式:新的文本样式(fontSize:25.0,fontWeight:fontWeight.bold),
textAlign:textAlign.center,
),
)
],
)),
新中心(
子:新列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新中心(
孩子:新图像网络(
伊姆古尔,
高度:200.0,
适合:BoxFit.fitWidth,
)),
新填料(
填充:所有边缘设置(20.0),
儿童:新文本(
“从各种餐厅订购”,
maxLines:2,
样式:新的文本样式(fontSize:25.0,fontWeight:fontWeight.bold),
textAlign:textAlign.center,
),
),
],
)),
新中心(
子:新列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新中心(
孩子:新图像网络(
伊姆古尔,
嗨