如何在StatelessWidget中使用showModalBottomSheet?

问题描述 投票:1回答:3

我尝试像这样编码

showModalBottomSheet(
   context: context, // I got error here (Undefined name 'context'.dart(undefined_identifier))
   builder: (context){

   return Container(

   );
);

我在context: context上收到错误,错误信息是

未定义的名称'context'.dart(undefined_identifier)

dart flutter
3个回答
3
投票

这就是你如何在showModalBottomSheet中调用StatelessWidget

class TestStatelessWidget extends StatelessWidget{
  @override
  Widget build(BuildContext context) {

    return RaisedButton(
      child: Text('Press me'),
      onPressed: ()=>showPress(context),
    );
  }

  void showPress(BuildContext context){
    showModalBottomSheet(context:context, builder: (context){
      return Text('hello');
    });
  }



}

1
投票

您收到此错误是因为您无法在context类中访问StatelessWidget。所有你需要做的是从context传递build(),如果你在build()方法之外使用它,否则在build()方法中使用它。


解决方案1.(在build()内部使用)

@override
Widget build(BuildContext context) {
  return RaisedButton(
    child: Text("Show sheet"),
    onPressed: () {
      showModalBottomSheet(context: context, builder: (context) => YourWidget());
    },
  );
}

解决方案2.(在build()之外使用)

@override
Widget build(BuildContext context) {
  return RaisedButton(
    child: Text("Show sheet"),
    onPressed: () => _showSheet(context),
  );
}

void _showSheet(BuildContext context) {
  showModalBottomSheet(context: context, builder: (context) => YourWidget());
}

0
投票

你没有正确关闭你的showModalBottomSheetbuilder。有一个}失踪。

这将是正确的用法:

showModalBottomSheet(
    context: context,
    builder: (builder){
      return Container();
    }
);
© www.soinside.com 2019 - 2024. All rights reserved.