首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决飞镖颤振scaffoldKey问题?

如何解决飞镖颤振scaffoldKey问题?
EN

Stack Overflow用户
提问于 2022-10-25 15:53:00
回答 2查看 33关注 0票数 0

我将描述我的编码问题。

我已经创建了登录/注册.dart文件(页面),但是在调试时我得到了这个错误.

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

这条错误信息在.dart代码中随处可见,我有这条编码行.

`

代码语言:javascript
运行
复制
scaffoldKey.currentState.showSnackBar(snackbar);

`

下面是我的"login_page.dart“文件的完整代码.

`

代码语言:javascript
运行
复制
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,
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

`

整个代码的问题出现在这个类中..。

`

代码语言:javascript
运行
复制
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'.
  }

`

任何帮助都是非常感谢的。谢谢!

我想修复"snackBar“错误问题。我试了几个小时自己解决它,但没有成功。

EN

回答 2

Stack Overflow用户

发布于 2022-10-25 16:07:00

Flutter使用下面的方法按照flutter.dev显示snackbar

代码语言:javascript
运行
复制
ScaffoldMessenger.of(context).showSnackBar(snackBar);
票数 0
EN

Stack Overflow用户

发布于 2022-10-25 17:04:20

我发现了另一个名为"Rohan“的用户给我的解决方案。

我更改了有问题的代码行..。

代码语言:javascript
运行
复制
scaffoldKey.currentState.showSnackBar(snackbar);

对于第一个解决方案(仍然没有工作,出现错误“未定义的名称:‘snackbar’”).

代码语言:javascript
运行
复制
ScaffoldMessenger.of(context).showSnackBar(snackBar);

没有起作用,但后来我从以前的样品溶液中找到了一个解决方案。这是我的问题的通用解决方案.

代码语言:javascript
运行
复制
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: snackbar));

如果您发现"showSnackBar“存在相同或类似的问题,此解决方案将对您有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74196873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档