我怎样才能让 pageView.Builder 在 flutter 中占据所有可用的 space?
How can i make pageView.Builder occupy all available space in flutter?
我正在尝试在单击按钮时交换两个小部件,或者有其他方法可以做到这一点吗?
当我设置
大小框(
身高:double.infinity,
宽度:double.infinity, )
它给出错误:BoxConstraints forces an infinite height.
手动设置高度和宽度时有效。
我尝试使用
扩展和灵活它给出这样的错误
RenderBox was not laid out: RenderRepaintBoundary#8b1a5 relayoutBoundary=up14 NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1785 pos 12: 'hasSize'
代码
class _MyHomePageState extends State<MyHomePage> {
TextEditingController _uri = TextEditingController();
bool flag=false;
bool swap = false;
int _index = 0;
@override
void initState() {
swap = widget.swap;
super.initState();
}
@override
Widget build(BuildContext context) {
Widget swapWidget;
if (!swap) {
swapWidget = Center(
child: Expanded(
// card height
child: PageView.builder(
itemCount: 2,
controller: PageController(viewportFraction: 0.95),
onPageChanged: (int index) => setState(() => _index = index),
itemBuilder: (_, i) {
return Transform.scale(
scale: i == _index ? 1 : 0.9,
child: Card(
elevation: 6,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
child: Center(
child: Text(
"Card ${i + 1}",
style: TextStyle(fontSize: 32),
),
),
),
);
},
)
)
);
} else {
swapWidget =new Card(
child:Text('Nothing To show')
);
}
var swapTile = new ListTile(
title: swapWidget,
);
return new Scaffold(
appBar: AppBar( title: Text('My APP')),
body: new ListView(
children: <Widget>[
swapTile,
],
),
);
}
}
我做错了什么?
谢谢
我不完全确定你想在这里做什么,但很少有事情。 PageView
默认情况下,小部件会扩展到允许的最大值 space,因此您不需要在其周围使用“展开”或“居中”小部件。
其次,我不知道您为什么要用 ListTile
包装 Card
小部件。您当然可以,但 ListTile 和 Card 不是这样设计的。
第三,因为PageView widget可以展开,所以需要一定的尺寸限制,所以不能放到像ListView这样无限大的widget里面,所以你可以把它去掉,我的就是这个。我希望它接近您要找的东西。
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool swap = true;
int _index = 0;
@override
Widget build(BuildContext context) {
Widget swapWidget;
if (swap) {
swapWidget = PageView.builder(
itemCount: 2,
controller: PageController(viewportFraction: 0.95),
itemBuilder: (_, i) {
return Transform.scale(
scale: i == _index ? 1 : 0.9,
child: Card(
elevation: 6,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20)),
child: Center(
child: Text(
"Card ${i + 1}",
style: TextStyle(fontSize: 32),
),
),
),
);
},
);
} else {
swapWidget = Card(child: Text('Nothing To show'));
}
return Scaffold(
body: swapWidget,
);
}
}
我正在尝试在单击按钮时交换两个小部件,或者有其他方法可以做到这一点吗?
当我设置
大小框(
身高:double.infinity,
宽度:double.infinity, )
它给出错误:BoxConstraints forces an infinite height.
手动设置高度和宽度时有效。
我尝试使用
扩展和灵活它给出这样的错误
RenderBox was not laid out: RenderRepaintBoundary#8b1a5 relayoutBoundary=up14 NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1785 pos 12: 'hasSize'
代码
class _MyHomePageState extends State<MyHomePage> {
TextEditingController _uri = TextEditingController();
bool flag=false;
bool swap = false;
int _index = 0;
@override
void initState() {
swap = widget.swap;
super.initState();
}
@override
Widget build(BuildContext context) {
Widget swapWidget;
if (!swap) {
swapWidget = Center(
child: Expanded(
// card height
child: PageView.builder(
itemCount: 2,
controller: PageController(viewportFraction: 0.95),
onPageChanged: (int index) => setState(() => _index = index),
itemBuilder: (_, i) {
return Transform.scale(
scale: i == _index ? 1 : 0.9,
child: Card(
elevation: 6,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
child: Center(
child: Text(
"Card ${i + 1}",
style: TextStyle(fontSize: 32),
),
),
),
);
},
)
)
);
} else {
swapWidget =new Card(
child:Text('Nothing To show')
);
}
var swapTile = new ListTile(
title: swapWidget,
);
return new Scaffold(
appBar: AppBar( title: Text('My APP')),
body: new ListView(
children: <Widget>[
swapTile,
],
),
);
}
}
我做错了什么? 谢谢
我不完全确定你想在这里做什么,但很少有事情。 PageView
默认情况下,小部件会扩展到允许的最大值 space,因此您不需要在其周围使用“展开”或“居中”小部件。
其次,我不知道您为什么要用 ListTile
包装 Card
小部件。您当然可以,但 ListTile 和 Card 不是这样设计的。
第三,因为PageView widget可以展开,所以需要一定的尺寸限制,所以不能放到像ListView这样无限大的widget里面,所以你可以把它去掉,我的就是这个。我希望它接近您要找的东西。
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool swap = true;
int _index = 0;
@override
Widget build(BuildContext context) {
Widget swapWidget;
if (swap) {
swapWidget = PageView.builder(
itemCount: 2,
controller: PageController(viewportFraction: 0.95),
itemBuilder: (_, i) {
return Transform.scale(
scale: i == _index ? 1 : 0.9,
child: Card(
elevation: 6,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20)),
child: Center(
child: Text(
"Card ${i + 1}",
style: TextStyle(fontSize: 32),
),
),
),
);
},
);
} else {
swapWidget = Card(child: Text('Nothing To show'));
}
return Scaffold(
body: swapWidget,
);
}
}