Home > Enterprise >  How do I fix dart flutter scaffoldKey problem?
How do I fix dart flutter scaffoldKey problem?

Time:10-26

I will describe my coding problem.

Well I have created Login/signUp .dart files(pages) but while debugging I got this error...

The method 'showSnackBar' isn`t defined for the type 'ScaffoldState'.

This error message appears everywhere in .dart code where I have this coding line...

`

scaffoldKey.currentState.showSnackBar(snackbar);

`

Here below is full code of my "login_page.dart" file...

`

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();

  void showSnackBar(String title) {
    final snackbar = SnackBar(
      content: Text(
        title,
        textAlign: TextAlign.center,
        style: TextStyle(fontSize: 15),
      ),
    );

    scaffoldKey.currentState.showSnackBar(snackbar);
  }

  var emailIdController = TextEditingController();
  var passwordController = TextEditingController();

  Widget _buildLogin() {
    return Padding(
      padding: EdgeInsets.symmetric(horizontal: 30),
      child: Column(
        children: [
          InputTextField(
            controller: emailIdController,
            label: 'Email-Id',
            icon: Icon(Icons.email_outlined),
          ),
          InputTextField(
            controller: passwordController,
            label: 'Password',
            icon: Icon(Icons.lock),
          ),
          SizedBox(
            height: 50,
          ),
          GestureDetector(
            onTap: () async {
              // network connectivity
              var connectivityResult = await Connectivity().checkConnectivity();
              if (connectivityResult != ConnectivityResult.mobile &&
                  connectivityResult != ConnectivityResult.wifi) {
                showSnackBar('No Internet connectivity');
                return;
              }

              if (!emailIdController.text.contains('@')) {
                showSnackBar('Please provide a valid email address');
              }

              if (passwordController.text.length < 6) {
                showSnackBar('Please provide a password of length more than 6');
              }
              BuildContext dialogContext;
              showDialog(
                context: context,
                barrierDismissible: false,
                builder: (BuildContext context) {
                  dialogContext = context;
                  return ProgressDialog(
                    status: 'Logging you in...',
                  );
                },
              );
              context
                  .read<AuthenticationService>()
                  .signIn(
                    email: emailIdController.text.trim(),
                    password: passwordController.text.trim(),
                  )
                  .then((value) => Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) {
                          return HomePage();
                        }),
                      ));
              Navigator.pop(dialogContext);
            },
            child: CustomButton(
              text: 'Login',
            ),
          ),
          Text("\nDon't have any account?"),
          GestureDetector(
            onTap: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) {
                  return SignUpPage();
                }),
              );
            },
            child: Text(
              'SignUp here',
              style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12),
            ),
          ),
          SizedBox(
            height: 20,
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: scaffoldKey,
      body: SingleChildScrollView(
        physics: BouncingScrollPhysics(),
        child: Padding(
          padding: EdgeInsets.only(top: 130),
          child: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Text(
                  'hopOn',
                  style: TextStyle(
                    fontSize: 60,
                    letterSpacing: 2,
                    fontWeight: FontWeight.bold,
                    fontFamily: 'MuseoModerno',
                    // color: Colors.white,
                  ),
                ),
                SizedBox(height: 80),
                Padding(
                  padding: EdgeInsets.symmetric(horizontal: 30),
                  child: Column(
                    children: [
                      InputTextField(
                        controller: emailIdController,
                        label: 'Email-Id',
                        obscure: false,
                        icon: Icon(Icons.email_outlined),
                      ),
                      InputTextField(
                        controller: passwordController,
                        label: 'Password',
                        obscure: true,
                        icon: Icon(Icons.lock),
                      ),
                      SizedBox(
                        height: 30,
                      ),
                      GestureDetector(
                        onTap: () async {
                          // network connectivity
                          var connectivityResult =
                              await Connectivity().checkConnectivity();
                          if (connectivityResult != ConnectivityResult.mobile &&
                              connectivityResult != ConnectivityResult.wifi) {
                            showSnackBar('No Internet connectivity');
                            return;
                          }

                          if (!emailIdController.text.contains('@')) {
                            showSnackBar(
                                'Please provide a valid email address');
                          }

                          if (passwordController.text.length < 6) {
                            showSnackBar(
                                'Please provide a password of length more than 6');
                          }
                          BuildContext dialogContext;
                          showDialog(
                            context: context,
                            barrierDismissible: false,
                            builder: (BuildContext context) {
                              dialogContext = context;
                              return ProgressDialog(
                                status: 'Logging you in...',
                              );
                            },
                          );
                          context
                              .read<AuthenticationService>()
                              .signIn(
                                email: emailIdController.text.trim(),
                                password: passwordController.text.trim(),
                              )
                              .then((value) => Navigator.push(
                                    context,
                                    MaterialPageRoute(builder: (context) {
                                      return HomePage();
                                    }),
                                  ));
                          Navigator.pop(dialogContext);
                        },
                        child: CustomButton(
                          text: 'Login',
                        ),
                      ),
                      SizedBox(
                        height: 20,
                      ),
                      GestureDetector(
                        onTap: () {
                          Navigator.push(
                            context,
                            MaterialPageRoute(builder: (context) {
                              return SignUpPage();
                            }),
                          );
                        },
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            Text(
                              "Don't have any account?\t",
                              style: TextStyle(fontSize: 10),
                            ),
                            Text(
                              'SignUp here',
                              style: TextStyle(
                                  fontWeight: FontWeight.bold, fontSize: 12),
                            ),
                          ],
                        ),
                      ),
                      SizedBox(
                        height: 20,
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

`

The problem from whole code appears in this class...

`

void showSnackBar(String title) {
    final snackbar = SnackBar(
      content: Text(
        title,
        textAlign: TextAlign.center,
        style: TextStyle(fontSize: 15),
      ),
    );

    scaffoldKey.currentState.showSnackBar(snackbar); // <=== here is problem, this line have error message --> The method 'showSnackBar' isn`t defined for the type 'ScaffoldState'.
  }

`

Any help is appreciated. Thank you!

I would like to fix that "snackBar" error problem. I tryed several hours to fix it by myself but without succees.

CodePudding user response:

Flutter uses below method to display the snackbar as per flutter.dev

ScaffoldMessenger.of(context).showSnackBar(snackBar);

CodePudding user response:

I found a solution idea that other user named "Rohan" gave to me.

I changed problematic code line...

scaffoldKey.currentState.showSnackBar(snackbar);

to first solution (which still didn't worked,, appeared error "Undefined name: 'snackbar'")...

ScaffoldMessenger.of(context).showSnackBar(snackBar);

Didn`t worked, but then I found a solution from previous sample solution. This is general and working Solution for my problem...

ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: snackbar));

This solution will help you, if you found the same or similar issue with "showSnackBar".

  • Related