在不使用onPressed颤振的情况下浏览页面后如何打开bottomSheet?

问题描述 投票:0回答:2

在不使用onPressed的情况下浏览页面后是否可以打开bottomSheet?

当前,我添加为在bottomSheet事件上打开onPressed

scaffoldKey.currentState
        .showBottomSheet((context) => Container(
              height: 100,
              color: Colors.red,
)),                                                                                      
flutter dart flutter-layout
2个回答
1
投票

我不确定您是否已经尝试过此操作,但是可以定义一个有状态的小部件并添加显示bottomSheet的功能,下面添加了一个示例波纹管,

void _modalBottomSheetMenu() {
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      await showModalBottomSheet(
          context: context,
          builder: (builder) {
            return new Container(
              height: 350.0,
              color:
                  Colors.transparent, //could change this to Color(0xFF737373),
              //so you don't have to change MaterialApp canvasColor
              child: new Container(
                  decoration: new BoxDecoration(
                      color: Colors.white,
                      borderRadius: new BorderRadius.only(
                          topLeft: const Radius.circular(10.0),
                          topRight: const Radius.circular(10.0))),
                  child: new Center(
                    child: new Text("This is a modal sheet"),
                  )),
            );
          });
    });
  }

这将等待绘制第一帧,然后显示bottomSheet,因此您可以从initState进行调用

@@ override,在初始化状态下,您将调用上述函数。

 @override
  void initState() {
    super.initState();
    _modalBottomSheetMenu();
  }

0
投票

您不能在initState()上添加它,因为那时您还没有上下文。

最简单的方法是在开头添加变量didOpenModalBottomSheet = false

然后在构建中添加类似的内容

@override
Widget build(BuildContext context) {
    if(!didOpenModalBottomSheet){
        didOpenModalBottomSheet = true;
        _modalBottomSheetMenu();
    }
    return ...

您也可以使用此库:https://pub.dev/packages/need_resume特别是如果您来自Android。但是我还没有尝试过。

© www.soinside.com 2019 - 2024. All rights reserved.