我在將螢屏垂直分成 2 個部分然后用SingleChildScrollView. 如果沒有ConstrainedBox列將不會顯示,有沒有其他方法可以做到這一點?使用MediaQuery.of(context).size.height - AppBar().preferredSize.height將兩個部分包裝在 ConstrainedBox 中以擴展到全屏的高度會不會有任何性能問題?
body: RefreshIndicator(
onRefresh: () async{
print('testing');
},
child: SingleChildScrollView(
physics: const BouncingScrollPhysics(
parent: AlwaysScrollableScrollPhysics()),
child: ConstrainedBox(
constraints: BoxConstraints(maxHeight: MediaQuery.of(context).size.height -
AppBar().preferredSize.height), //----------> I want to avoid using BoxConstraints
child: Padding(
padding: const EdgeInsets.only(left: 24.0, right: 24.0, top: 24.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
// flex: 1,
child: Container(
color: Colors.amber,
// height: 20 * SizeConfig.heightMultiplier,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
// height: 100.0,
// width: 100.0,
child: Text('teacher_photo_album_flow.listing_title'.tr(),
style: CustomTextStyle.pageSectionTitle(context),),
),
SizedBox(
height: 2 * SizeConfig.heightMultiplier,
),
GestureDetector(
onTap: (){
},
child: Container(
child: Column(children: [
Container(
height: 25 * SizeConfig.heightMultiplier,
// width: double.infinity,
width: double.infinity,
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Image.network(this.photoAlbums1[0]['album_cover'],
fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
),
),
),
SizedBox(
height: 1.5 * SizeConfig.heightMultiplier,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 4,
child:
Container(
alignment: Alignment.centerLeft,
child: Text(this.photoAlbums1[0]['title'],
style: CustomTextStyle.titleOnelineEllipses(context),),
),
),
Expanded(
// flex: 1,
child:
Container(
alignment: Alignment.centerRight,
child: Text(this.photoAlbums1[0]['newDate'],
style: CustomTextStyle.silentTextDate(context),),
)
,),
],
),
],),
)
),
SizedBox(
height: 3 * SizeConfig.heightMultiplier,
),
],
),
),
),
photoAlbums2.length > 0 ? Expanded(
// flex: 2,
child: Container(
child: Column(
children: [
Expanded(
// flex: 2,
child: GridView.builder(
shrinkWrap: true,
primary: true,
physics: NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisSpacing: 1,
mainAxisSpacing: 1,
crossAxisCount: 2),
itemCount: this.photoAlbums2.length,
itemBuilder: (BuildContext ctx, i) {
return
GestureDetector(
onTap: (){
},
child: Container(
child: Column(children: [
Container(
height: 15 * SizeConfig.heightMultiplier,
// width: double.infinity,
width: double.infinity,
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Image.network(this.photoAlbums2[i]['album_cover'],
fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
),
),
),
SizedBox(
height: 1.0 * SizeConfig.heightMultiplier,
),
Container(
alignment: Alignment.centerLeft,
child: Text(this.photoAlbums2[i]['title'],
style: CustomTextStyle.titleOnelineEllipses(context),),
),
SizedBox(
height: 0.5 * SizeConfig.heightMultiplier,
),
Container(
alignment: Alignment.centerLeft,
child: Text(this.photoAlbums2[i]['newDate'],
style: CustomTextStyle.silentTextDate(context),),
),
],),
)
);
}
),
),]
),
),
) : SizedBox(height: 0,)
],),
),
),
),
);
uj5u.com熱心網友回復:
我正在使用LayoutBuilder獲取螢屏尺寸。
@override
Widget build(BuildContext context) {
return Scaffold(
body: LayoutBuilder(builder: (context, constraints) {
return RefreshIndicator(
onRefresh: () async {},
child: CustomScrollView(slivers: [
SliverToBoxAdapter(
child: Container(
color: Colors.green,
width: constraints.maxWidth,
height: constraints.maxHeight * .3,// amount of height you want or the widget you like to include with `ConstrainedBox`
),
),
SliverGrid.count(
crossAxisCount: 2,
children: [
...List.generate(
11,
(index) => Container(
color: index % 3 == 0 ? Colors.amber : Colors.cyanAccent,
),
)
],
),
]));
}),
);
}
uj5u.com熱心網友回復:
嘗試這個
SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
child: Padding(
padding: EdgeInsets.all(20),
child: Text(''),
),
color: Colors.red,
),
SizedBox(
height: 10,
),
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Container(
color: Colors.yellow,
child : Padding(
padding: EdgeInsets.all(20),),
),
),
SizedBox(width : 10,),
Expanded(
child: Container(
color: Colors.yellow,
child : Padding(
padding: EdgeInsets.all(20),),
),
),
],
),
SizedBox(height : 10),
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Container(
color: Colors.yellow,
child : Padding(
padding: EdgeInsets.all(20),),
),
),
SizedBox(width : 10,),
Expanded(
child: Container(
color: Colors.yellow,
child : Padding(
padding: EdgeInsets.all(20),),
),
),
],
),
SizedBox(height : 10),
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Container(
color: Colors.yellow,
child : Padding(
padding: EdgeInsets.all(20),),
),
),
SizedBox(width : 10,),
Expanded(
child: Container(
color: Colors.yellow,
child : Padding(
padding: EdgeInsets.all(20),),
),
),
],
),
]),
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/372212.html
