невозможно отобразить закусочную во флаттере - PullRequest
0 голосов
/ 23 марта 2019

Я очень новичок, чтобы трепетать и застревать на месте отображения 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,
          ],
        ),
      ),
    );
  }

1 Ответ

1 голос
/ 23 марта 2019

вы должны использовать ключ скаффолда, чтобы сделать это.

что вы должны добавить в виджет скаффолда.

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

и во время отображения снэкбар вы должны использовать ключ скаффолда,замените ваш onPressed с кодом ниже.

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