Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振/飞镖:按钮已按下(),但屏幕未重新绘制?_Android_Button_Dart_Flutter - Fatal编程技术网

Android 颤振/飞镖:按钮已按下(),但屏幕未重新绘制?

Android 颤振/飞镖:按钮已按下(),但屏幕未重新绘制?,android,button,dart,flutter,Android,Button,Dart,Flutter,我试图让一个按钮在按下时更改其文本。我通过使用setState()更改传递给按钮文本子级的字符串的值来完成此操作。我试图更改文本的按钮是forgotLabel-可在下面的代码中找到 我尝试过使用不同的按钮类型,如FlatButton和RaisedButton,所有这些类型都导致了相同的问题:按钮被按下,setState被调用,并更改表示按钮中文本的字符串的值(代码中称为forgotText),但按钮在视觉上没有变化。代码如下: import 'package:flutter/material.d

我试图让一个按钮在按下时更改其文本。我通过使用setState()更改传递给按钮文本子级的字符串的值来完成此操作。我试图更改文本的按钮是forgotLabel-可在下面的代码中找到

我尝试过使用不同的按钮类型,如FlatButton和RaisedButton,所有这些类型都导致了相同的问题:按钮被按下,setState被调用,并更改表示按钮中文本的字符串的值(代码中称为forgotText),但按钮在视觉上没有变化。代码如下:

import 'package:flutter/material.dart';
import 'package:mobileapp/home_page.dart';

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

class _LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {
final bgGrey = Color(0xFF1c232c);

//Company logo at top
final logo = Hero(
  tag: 'hero',
  child: CircleAvatar(
    backgroundColor: Colors.transparent,
    radius:68.0,
    child: Image.asset('assets/logo_transparent.png'),
  ),
);

//Email field
final email = TextFormField(
  keyboardType: TextInputType.emailAddress,
  autofocus: false,
  initialValue: 'jonDoe@domain.com',  //remove later
  style: TextStyle(color: Colors.white70),
  decoration: InputDecoration(
    hintText: 'Email',
    contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
    enabledBorder: OutlineInputBorder(
      borderRadius: BorderRadius.circular(32.0),
      borderSide: BorderSide(color: Colors.white)
      )
  ),
);

//Password field
final password = TextFormField(
  autofocus: false,
  initialValue: 'verysafePassword',   //remove later
  obscureText: true,
  style: TextStyle(color: Colors.white70),
  decoration: InputDecoration(
    hintText: 'Password',
    contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
    enabledBorder: OutlineInputBorder(
      borderRadius: BorderRadius.circular(32.0),
      borderSide: BorderSide(color: Colors.white)
      )
  ),
);

// Login button
final loginButton = Padding(
  padding: EdgeInsets.symmetric(vertical: 20.0),
  child: Material(
    borderRadius: BorderRadius.circular(30.0),
    color: Colors.deepOrangeAccent,
    shadowColor: Colors.deepOrange[300],
    elevation: 5.0,
    child: MaterialButton(
      minWidth: 200.0,
      height: 30.0,
      onPressed: () {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => HomePage()),
        );
      },
      child: Text('Login', style: TextStyle(color: Colors.white70),),
    ),
  )
);

String forgotText = "Forgot Password";
void changeText() {
   setState(() =>forgotText = "Please use the web app to reset your password.");
}

// Forgot password button
final forgotLabel = MaterialButton(
  child: Text(
    forgotText,
    style: TextStyle(color: Colors.white70),
  ),
  onPressed: changeText,
);

//Layout settings for each widget made 
//Contains: logo, email, password, loginButton and forgotLabel
return Scaffold(
  backgroundColor: bgGrey,    //defined under method declaration
  body: Center(
    child: ListView(
      shrinkWrap: true,
      padding: EdgeInsets.only(left: 24.0, right: 24.0),
      children: <Widget>[
        logo,
        SizedBox(height: 48.0),
        email,
        SizedBox(height: 8.0),
        password,
        SizedBox(height: 25.0),
        loginButton,
        forgotLabel
      ],
    ),
  ),
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:mobileapp/home_page.dart”;
类LoginPage扩展StatefulWidget{
静态字符串标记='登录页面';
@凌驾
_LoginPagentate createState()=>_LoginPagentate();
}
类_loginpagentate扩展状态{
@凌驾
小部件构建(构建上下文){
最终BG格雷=颜色(0xFF1c232c);
//顶部有公司标志
最终标志=英雄(
标签:“英雄”,
孩子:圆环星(
背景颜色:颜色。透明,
半径:68.0,
子项:Image.asset('assets/logo_transparent.png'),
),
);
//电子邮件字段
最终电子邮件=TextFormField(
键盘类型:TextInputType.emailAddress,
自动对焦:错误,
初始值:'jonDoe@domain.com“,//稍后删除
样式:TextStyle(颜色:Colors.white70),
装饰:输入装饰(
hintText:“电子邮件”,
内容填充:来自LTRB(20.0,10.0,20.0,10.0)的EdgeInsets,
enabledBorder:OutlineInputBorder(
边界半径:边界半径。圆形(32.0),
borderSide:borderSide(颜色:Colors.white)
)
),
);
//密码字段
最终密码=TextFormField(
自动对焦:错误,
initialValue:'verysafePassword',//稍后删除
蒙昧文字:对,
样式:TextStyle(颜色:Colors.white70),
装饰:输入装饰(
hintText:'密码',
内容填充:来自LTRB(20.0,10.0,20.0,10.0)的EdgeInsets,
enabledBorder:OutlineInputBorder(
边界半径:边界半径。圆形(32.0),
borderSide:borderSide(颜色:Colors.white)
)
),
);
//登录按钮
最终登录按钮=填充(
填充:边缘组。对称(垂直:20.0),
儿童:材料(
边界半径:边界半径。圆形(30.0),
颜色:Colors.deeporangeacent,
阴影颜色:颜色。深橙色[300],
标高:5.0,
子:材质按钮(
最小宽度:200.0,
身高:30.0,
已按下:(){
导航器。推(
上下文
MaterialPackageRoute(生成器:(上下文)=>HomePage()),
);
},
子项:文本('Login',样式:TextStyle(颜色:Colors.white70),),
),
)
);
字符串forgotText=“忘记密码”;
void changeText(){
setState(()=>forgotText=“请使用web应用程序重置密码。”);
}
//忘记密码按钮
最终锻件标签=材料按钮(
子:文本(
忘了,
样式:TextStyle(颜色:Colors.white70),
),
onPressed:changeText,
);
//每个小部件的布局设置
//包含:徽标、电子邮件、密码、登录按钮和放弃标签
返回脚手架(
backgroundColor:bgGrey,//在方法声明下定义
正文:中(
子:ListView(
收缩膜:对,
填充:仅限边设置(左:24.0,右:24.0),
儿童:[
标志
尺寸箱(高度:48.0),
电子邮件
尺寸箱(高度:8.0),
暗语
尺寸箱(高度:25.0),
登录按钮,
放弃标签
],
),
),
);
}
}

问题是调用
setState
时更改了
forgotText
,但由于它在
build()
中定义为局部变量,因此它再次初始化为
忘记密码。将其作为
\u loginpagentate
的实例变量

定义-String forgotText=“忘记密码”;构建方法之外-