2

I have an issue with my modal bottom sheet it slides under the status bar whenever the keyboard appears on screen like so

Modal bottom sheet under status bar

I tried putting the second widget in a Safe area but that did not work regardless of where I put the safe area Here is my code :

showModalBottomSheet<void>(isScrollControlled: true,context: context, builder: (BuildContext context,) {

           //Tried safe area here

           return LoginBottomSheet();
           });

this is where I show the bottom sheet and this is the bottom sheet code :

class _LoginBottomSheetState extends State<LoginBottomSheet> {
  int currentView = 0;
  late List<Widget> pages;

  @override
  void initState() {
    pages = [
      login(),
      signUp(),
    ];
    super.initState();
  }

  @override
  Widget build(BuildContext context) {

     //and tried safe area here as well

    return AnimatedSwitcher(
      transitionBuilder: (child, animation) => SizeTransition(
        child: child,
        sizeFactor: animation,
      ),
      child: pages[currentView],
      duration: Duration(milliseconds: 500),
    );
  }

and this is the code for the sign up

    return SafeArea(
      top:true,
      child: SingleChildScrollView(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Align(
              alignment: Alignment.topLeft,
              child: MaterialButton(
                onPressed: () {
                  setState(() {
                    currentView = 0;
                  });
                },
                child: Icon(Icons.arrow_back),
              ),
            ),
            Padding(
              padding: const EdgeInsets.only(left:32.0,right:32,bottom:16,top:0),
              child: Form(
                child: Column(children: [
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Material(
                      borderRadius: BorderRadius.circular(12),
                      elevation: 10,
                      child: TextFormField(
                          decoration: InputDecoration(
                        focusedBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide: BorderSide(color: Colors.deepPurple)),
                        enabledBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide:
                                BorderSide(color: Colors.grey.shade100)),
                        hintText: "Name",
                      )),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Material(
                      elevation: 10,
                      borderRadius: BorderRadius.circular(12),
                      child: TextFormField(
                          decoration: InputDecoration(
                        focusedBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide: BorderSide(color: Colors.deepPurple)),
                        enabledBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide:
                                BorderSide(color: Colors.grey.shade100)),
                        hintText: "Email",
                      )),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Material(
                      elevation: 10,
                      borderRadius: BorderRadius.circular(12),
                      child: TextFormField(
                          obscureText: true,
                          decoration: InputDecoration(
                            focusedBorder: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(12),
                                borderSide:
                                    BorderSide(color: Colors.deepPurple)),
                            enabledBorder: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(12),
                                borderSide:
                                    BorderSide(color: Colors.grey.shade100)),
                            hintText: "Password",
                          )),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Material(
                      elevation: 10,
                      borderRadius: BorderRadius.circular(12),
                      child: TextFormField(
                          decoration: InputDecoration(
                        focusedBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide: BorderSide(color: Colors.deepPurple)),
                        enabledBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide:
                                BorderSide(color: Colors.grey.shade100)),
                        hintText: "Phone Number",
                      )),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Material(
                      elevation: 10,
                      borderRadius: BorderRadius.circular(12),
                      child: TextFormField(
                          decoration: InputDecoration(
                        focusedBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide: BorderSide(color: Colors.deepPurple)),
                        enabledBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(12),
                            borderSide:
                                BorderSide(color: Colors.grey.shade100)),
                        hintText: "Address",
                      )),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: ElevatedButton(
                        onPressed: () {
                          print("Signing up baby!");
                        },
                        child: Padding(
                          padding: const EdgeInsets.symmetric(
                              vertical: 16, horizontal: 100),
                          child: Text(
                            "Sign Up",
                            style: TextStyle(
                                fontSize: 20,
                                color: Colors.white,
                                fontWeight: FontWeight.bold),
                          ),
                        )
                     ),
                  ),
                ]),
              ),
            )
          ],
        ),
      ),
    );
  }

From what I read online the safe area should in fact make the widget avoid operating system interface, so i don't know what I am doing wrong here

  • This is already answered here: https://stackoverflow.com/a/51980136/9558020 – Subair K May 18 '21 at 13:07
  • the solution doesn't work though , putting my pages inside a scaffold and setting resizeToAvoidBottomInset to false and or putting the body in a single child view only makes the bottom sheet take up the entire screen I just want sign up page to stop below the status bar – Mahmoud Gamal Eid May 18 '21 at 13:22

0 Answers0