Slide-up view in Flutter

后端 未结 4 1971
走了就别回头了
走了就别回头了 2021-01-14 06:03

I\'m trying to make something similar to google/apple maps screen in flutter. I just started experimenting in Flutter and I have a hard time understand that \"Draggable widg

4条回答
  •  没有蜡笔的小新
    2021-01-14 06:29

    Draggable (and DragTarget) is not used for what you call slide-up view

    slide-up view, from the android world, is for bottom aligned modals. Draggable is to transfer data using Drag&Drop.

    In flutter, bottom modals are fairly simple :

    First, make sure you have somewhere above in your tree a Scaffold. As it's what will position everything together.

    Then, call either showBottomSheet or showModalBottomSheet with whatever content you like. The content will now automatically appear at the bottom of your screen.

    That's it, your job is done ! You can optionally now add a custom close event. For this, you'll just have to call Navigator.pop(context). But both modal and non-modal bottom sheet can be closed out of the box using common gestures. Such as back button, navbar back, of click outside.

    Full example :

    class MyExample extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          home: new Scaffold(
            appBar: new AppBar(title: new Text('Example')),
            body: new Center(
              child: new Builder(builder: (context) {
                return new Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: [
                    new RaisedButton(
                      onPressed: () => modal(context),
                      child: new Text("modal"),
                    ),
                    new RaisedButton(
                      onPressed: () => showSlideupView(context),
                      child: new Text("non modal"),
                    ),
                  ],
                );
              }),
            ),
          ),
        );
      }
    
      void showSlideupView(BuildContext context) {
        showBottomSheet(
            context: context,
            builder: (context) {
              return new Container(
                child: new GestureDetector(
                  onTap: () => Navigator.pop(context),
                  child: new Text("Click me to close this non-modal bottom sheet"),
                ),
              );
            });
      }
    
      modal(BuildContext context) {
        showModalBottomSheet(
            context: context,
            builder: (context) {
              return new Container(
                child: new Text("This is a modal bottom sheet !"),
              );
            });
      }
    }
    

提交回复
热议问题