我在颤抖的final Map<int, Widget> buildImage
中创建了这张地图。
对于地图中的一个小部件,我使用了showCupertinoModalPopup()
,但是它需要上下文。当我这样初始化时:
showCupertinoModalPopup(
context: context,
);
我收到以下错误:Only static members can be accessed in initializers
。
我想知道是否有任何方法可以解决这个问题。
编辑:这是用于进一步阐明问题的代码。
class NewReminderScreen extends StatefulWidget {
@override
_NewReminderScreenState createState() => _NewReminderScreenState();
}
class _NewReminderScreenState extends State<NewReminderScreen> {
static String title;
static String description;
static DateTime _dateTime;
int sharedValue = 0;
final Map<int, Widget> dateTimePlace = const <int, Widget>{
0: Text('Time'),
1: Text('Place'),
};
final Map<int, Widget> buildPage = <int, Widget>{
0: Container(
RaisedButton(
onPressed: (){
showCupertinoModalPopup(
context: context, <-This is the error
);
},
),
),
1: Container(),
执行此操作时,我收到一条错误消息,指出只能在初始化程序中访问静态成员。
答案 0 :(得分:0)
showCupertinoModalPopup(...)
是一种方法,您可以在需要时直接调用它。使用前无需定义它。
如果您正在使用StatelessWidget
,则可以将其转换为StatefulWidget
,然后可以在类中的任何位置使用context
。
如果您仍然想坚持使用StatelessWidget
,则可以通过context
方法传递build()
。
更新:
我认为使用变量不是一个好主意,您可以将buildPage
变量更改为如下方法:
Widget buildPage(int index) {
switch(index) {
case 0:
return Container(
child: RaisedButton(
onPressed: () {
// no error in using context
showCupertinoModalPopup(context: context);
},
),
);
break;
case 1:
return Container();
}
return Container();
}