如何解决如何让 pageView.Builder 占据所有可用空间?
我正在尝试在单击按钮时交换两个小部件,或者还有其他方法可以做到这一点吗?
当我设置
大小盒(
高度: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
小部件会扩展到最大允许空间,因此您不需要在其周围使用 Expanded 或 Center 小部件。
其次,我不知道您为什么要用 Card
包装 ListTile
小部件。您当然可以,但这不是 ListTile 和 Card 的设计方式。
第三,因为 PageView 小部件可以扩展,它需要一些大小限制,所以它不能放在像 ListView 这样无限大的小部件中,所以你可以删除它,这就是我所拥有的。我希望它与您要查找的内容相近。
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,);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。