Repository navigation
CupertinoActionSheet throws infinite size during layout error #56172
Description
I get the following error when calling the CupertinoActionSheet when implementing SingleChildScrollView on my stateful widget:
_RenderCupertinoAlertActions object was given an infinite size during layout.
The relevant error-causing widget was
CupertinoActionSheet
lib\main.dart:82
The following RenderObject was being processed when the exception was fired: _RenderCupertinoAlertActions#56898 relayoutBoundary=up19 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
RenderObject: _RenderCupertinoAlertActions#56898 relayoutBoundary=up19 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
constraints: BoxConstraints(w=395.4, 0.0<=h<=Infinity)
size: Size(395.4, Infinity)
child 1: RenderPointerListener#7df6e relayoutBoundary=up20 NEEDS-PAINT
parentData: offset=Offset(0.0, 0.0); id=null (can use size)
constraints: BoxConstraints(w=395.4, 0.0<=h<=Infinity)
size: Size(395.4, Infinity)
behavior: opaque
listeners: down
The full code is attached here:
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@OverRide
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@OverRide
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
List leaveTypes = ["Vacation Leave","Ordinary Sick Leave","Childcare Leave"];
String applyLeaveType;
@OverRide
Widget build(BuildContext context) {
if(applyLeaveType == null){
applyLeaveType = leaveTypes[0];
};
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: LayoutBuilder(builder:(context, constraints){
return SingleChildScrollView(
/child: ConstrainedBox(
constraints: BoxConstraints(
minWidth: constraints.maxWidth, minHeight: constraints.maxHeight
),/
child: Container(
height: constraints.maxHeight,
color: Color.fromARGB(255, 244, 246, 249),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
//Text for leave type
Container(
alignment: Alignment(-1.0,0.0),
padding:EdgeInsets.only(
top: 10, bottom: 5, left: 20, right: 20
),
child: Text("I want to apply for",
style: TextStyle(fontSize: 16),
textAlign: TextAlign.left,
)
),
SizedBox(
width: MediaQuery.of(context).size.width,
height:80,
child: GestureDetector(
onTap:() {
final action = Container(
height: MediaQuery.of(context).size.height,
child: CupertinoActionSheet(
title: Text(
"Leave Type",
style: TextStyle(fontSize:16)
),
actions: leaveTypes.map((leaveType){
CupertinoActionSheetAction(
child:Text(leaveType),
onPressed:(){
setState((){
applyLeaveType=leaveType;
});
Navigator.pop(context);
}
);
}).toList(),
cancelButton: CupertinoActionSheetAction(
child: Text("Back"),
onPressed:(){
Navigator.pop(context);
}
)
)
);
showCupertinoModalPopup(context: context, builder: (context) => action);
},
child: Container(
alignment: Alignment(0.0,0.0),
padding:EdgeInsets.only(
top: 10, bottom: 10, left: 20, right: 20
),
decoration: BoxDecoration(
color: Colors.white,
//border: Border.all(),
//borderRadius: BorderRadius.all(Radius.circular(10))
),
child:Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
padding: EdgeInsets.all(10),
child: Text(applyLeaveType),
),
Container(
padding: EdgeInsets.all(10),
child: Icon(Icons.keyboard_arrow_down)
)
],
)
)
),
)
]
)
)
//)
);
})
);
}
}
Activity
nicholastps93 commentedon May 4, 2020
I revised the GestureDetector accordingly to fix the error:
child: GestureDetector(
onTap:() {
buildLeaveList(){
List widgets = List();
leaveTypes.forEach((leaveType){
print(leaveType);
widgets.add(
CupertinoActionSheetAction(
child: Text(leaveType),
onPressed: () {
setState(() {
applyLeaveType = leaveType;
});
Navigator.pop(context);
}
)
);
return widgets;
});
}
final action = Container(
height: MediaQuery.of(context).size.height,
child: CupertinoActionSheet(
But now none of the actionsheet is being displayed (no options when opening the modal).
TahaTesser commentedon May 4, 2020
Hi @nicholastps93
This looks like an an issue with your code and not CupertinoActionSheet sheet
Working code sample
Code Sample
This platform is not meant for assistance on personal code.
Please see https://flutter.dev/community for resources and asking questions like this, you may also get some help if you post it on Stack Overflow.
Closing, as this isn't an issue with Flutter itself,
if you disagree please write in the comments and I will reopen it
Thank you
lock commentedon May 21, 2020
This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of
flutter doctor -vand a minimal reproduction of the issue.