无法在小吃店中显示小吃店

时间:2019-03-23 10:38:13

标签: dart flutter flutter-animation

我非常不熟悉,并在登录失败时停留在显示SnackBar的位置。请检查下面的代码,让我知道如何解决此问题。我不知道我到底需要在哪里builder。您可以向我建议以简单快捷的方式显示SnackBar的最佳解决方案。在此先感谢所有将提供帮助的人。

class LoginPage extends StatefulWidget {
  static String tag = 'login-page';
  @override
  _LoginPageState createState() => new _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {

  bool passwordVisible = true;
  var _scaffoldKey = new GlobalKey<ScaffoldState>();


  @override
  Widget build(BuildContext context) {

    final logo = Hero(
      tag: 'hero',
      child: CircleAvatar(
        backgroundColor: Colors.transparent,
        radius: 48.0,
        child: Image.asset('assets/splash.png'),
      ),
    );

   /* final email = TextFormField(
      keyboardType: TextInputType.emailAddress,
      autofocus: false,
      initialValue: 'mufeez@gmail.com',
      decoration: InputDecoration(
        hintText: 'Email',
        contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
        border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
      ),
    );
*/
    final password = TextFormField(
      autofocus: false,
      obscureText: passwordVisible,//This will obscure text dynamically
      decoration: InputDecoration(
        hintText: 'Enter Secret Key',
        contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
        border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),

        suffixIcon: IconButton(
          icon: Icon(
            // Based on passwordVisible state choose the icon
            passwordVisible
                ? Icons.visibility_off
                : Icons.visibility,
            color: Theme.of(context).primaryColorDark,
          ),
          onPressed: () {
            // Update the state i.e. toogle the state of passwordVisible variable
            setState(() {
              passwordVisible
                  ? passwordVisible = false
                  : passwordVisible = true;
            });
          },
        ),
      ),
    );


    final loginButton = Padding(
      padding: EdgeInsets.symmetric(vertical: 16.0),
      child: RaisedButton(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(24),
        ),

        onPressed: () async {


          final snackBar = SnackBar(content: Text('Yay! A SnackBar!'));
          Scaffold.of(context).showSnackBar(snackBar);
        },
        padding: EdgeInsets.all(12),
        color: Colors.lightBlueAccent,
        child: Text('Log In', style: TextStyle(color: Colors.white)),
      ),
    );

   /* final forgotLabel = FlatButton(
      child: Text(
        'Forgot password?',
        style: TextStyle(color: Colors.black54),
      ),
      onPressed: () {},
    );
*/
    return Scaffold(
      backgroundColor: Colors.white,
    body: Center(
        child: ListView(
          shrinkWrap: true,
          padding: EdgeInsets.only(left: 24.0, right: 24.0),
          children: <Widget>[
            logo,
            SizedBox(height: 48.0),
            SizedBox(height: 8.0),
            password,
            SizedBox(height: 24.0),
            loginButton,
          ],
        ),
      ),
    );
  }

2 个答案:

答案 0 :(得分:1)

您必须使用脚手架钥匙。

您需要在脚手架小部件中添加什么。

return Scaffold(
      key: _scaffoldKey,
      backgroundColor: Colors.white,

,在显示小吃店时,您必须使用脚手架钥匙。 用下面的代码替换onPressed。

 onPressed: () async {
          final snackBar = SnackBar(content: Text('Yay! A SnackBar!'));
          _scaffoldKey.currentState.showSnackBar(snackBar);
        },

答案 1 :(得分:0)

您还可以将脚手架主体包裹在Builder()小部件中。

return Scaffold(
  body: body: Builder(
     builder: (BuildContext ctxt) {
        return (your content here);}));

,并且要显示快餐栏时,请使用Scaffold.of(ctxt) onPressed

onPressed: () {
  Scaffold.of(ctxt).showSnackBar(
    SnackBar(content:Text('My snack')));
 },