单击TextField小部件时重建Flutter小部件

我确定这是一个菜鸟错误,但是我似乎无法弄清楚。

在下面的应用程序中,单击第二条路径中的文本字段时,

键盘将打开并立即关闭。经过仔细研究,似乎

只要获得焦点,便会重新构建小部件,从而导致路由

重置,从而使用户无法输入文本。

当我从表单中删除“密钥”时,不会发生此问题。这不是

长期解决方案,因为我需要“密钥”,因此我可以验证表格。

有任何想法吗?

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

title: 'My app',

debugShowCheckedModeBanner: false,

theme: ThemeData(

primarySwatch: Colors.lightBlue,

fontFamily: 'Nunito',

),

home: LoginPage(),

);

}

}

class LoginPage extends StatefulWidget {

@override

LoginPageState createState() {

return new LoginPageState();

}

}

class LoginPageState extends State<LoginPage> {

Widget build(BuildContext context) {

final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

final registerButton = Padding(

padding: EdgeInsets.symmetric(vertical: 16.0),

child: RaisedButton(

shape: RoundedRectangleBorder(

borderRadius: BorderRadius.circular(24),

),

onPressed: () {

Navigator.push(

context,

MaterialPageRoute(builder: (context) => SecondPage()),

);

},

child: Text('Register Now', style: TextStyle(color: Colors.white)),

),

);

// Now load the main login page

return Scaffold(

backgroundColor: Colors.white,

key: _scaffoldKey,

body: Center(

child: ListView(

shrinkWrap: true,

children: <Widget>[

registerButton,

],

),

),

);

}

}

class SecondPage extends StatelessWidget {

@override

Widget build(BuildContext context) {

final emailController = TextEditingController();

final _formKey = GlobalKey<FormState>();

final email = TextFormField(

keyboardType: TextInputType.emailAddress,

controller: emailController,

autofocus: false,

decoration: InputDecoration(

hintText: 'Email',

contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),

border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),

),

);

return Scaffold(

appBar: AppBar(

title: Text('Second page'),

),

body: Center(

child: Form(

key: _formKey,

child: email,

),

),

);

}

}

回答:

您必须在构建方法之外将_formKey声明为静态。

以上是 单击TextField小部件时重建Flutter小部件 的全部内容, 来源链接: utcz.com/qa/410525.html

回到顶部