是否可以在小部件中使用上下文?

时间:2019-09-02 08:15:09

标签: flutter dart static

我在颤抖的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(),

执行此操作时,我收到一条错误消息,指出只能在初始化程序中访问静态成员。

1 个答案:

答案 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();
}