-
Notifications
You must be signed in to change notification settings - Fork 29.7k
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)
)
],
)
)
),
)
]
)
)
//)
);
})
);
}
}