flutter - 我怎样才能让 pageView.Builder 在颤动中占据所有可用空间?
问题描述
我正在尝试在单击按钮时交换两个小部件,或者还有其他方法可以做到这一点吗?
当我设置 SizedBox(
height: double.infinity,
width: 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,
);
}
}
推荐阅读
- ios - 实现要在我指定的设备上执行的部分代码
- c# - GetAsyncKeyState(0x14) 检查 Caps Lock 是否被按下
- git - 通过重置原点然后合并来“取消合并”上游分支
- python - TextBlob - 遍历文章以计算极性和主观性分数
- javascript - 为什么猫头鹰轮播一次显示3张图片
- powershell - 将字符串转换为 System.DateTime 为 Office365 的特定格式
- python - 从 pandas apply 构造一个 DataFrame
- laravel - 图像文件不想下载 Laravel
- python - .click() 的 Python/Selenium 未知错误
- microsoft-graph-api - 使用 microsoft graph API 获取公用文件夹