Flutter:当窗口小部件状态更改时,构造函数页面多次调用

时间:2019-03-07 08:53:20

标签: dart flutter

我不明白为什么刷新页面时会多次调用我的类构造函数 或小部件值更改...? 示例:我向参数中的页面发送一些数据以填充一些async并使用此textField数据。

代码示例

await

因此,在本期中,如果我修改TextFormField以更新数据, 当我按下按钮以获取import 'package:flutter/material.dart'; class AddProductPage extends StatelessWidget { static String tag = 'add-product-page'; final TextEditingController _titleController = new TextEditingController(); String text; AddProductPage({Key key, @required this.text}) : super(key: key) { _titleController.text = this.text; } @override Widget build(BuildContext context) { final title = TextFormField( keyboardType: TextInputType.text, controller: _titleController, decoration: InputDecoration( labelText: 'Product Name', contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), //border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)), ), ); final addproductButton = Padding( padding: EdgeInsets.symmetric(vertical: 16.0), child: RaisedButton( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(24), ), onPressed: (){ this.text =_titleController.text; //XXX //Do some stuff with this.text }, padding: EdgeInsets.all(12), color: Colors.lightBlueAccent, child: Text('Add Product', style: TextStyle(color: Colors.white)), ), ); final body = Container( width: MediaQuery.of(context).size.width, padding: EdgeInsets.all(28.0), decoration: BoxDecoration( gradient: LinearGradient(colors: [ Colors.white10, Colors.orange[200], ]), ), child: Column( children: <Widget>[title, addproductButton], ), ); return Scaffold( resizeToAvoidBottomPadding: false, body: body, ); } } 的最后一个文本时,TextFormField的值始终与构造函数中给出的值相同。因为在我编辑text时多次调用了构造函数。

TextFormField

TextFormField

谢谢

1 个答案:

答案 0 :(得分:0)

如何查找您的文字是否未更改。有两件事要注意。

  • AddProductPage应该是一个有状态的小部件,以呈现更改后的文本。
  • 始终处置您的控制器。

参考

在使用TextEditingController时将其用作参考。
Cookbook1
Cookbook 2
TextEditingController