我曾经使用过flutter,但是有点使flutter渲染引擎如何工作感到困惑。某些地方很奇怪
Flutter被认为是在setState()被调用时发生的。引擎将重新渲染我们在build方法中描述的小部件。我的理解是所有小部件都会重新创建,所以我可能会丢失子小部件中的当前状态。
但是我错了。即使我尝试将参数发送到那些子小部件的构造函数,子小部件内的所有状态仍然是持久的。通过构造函数将新值应用于子小部件(似乎再次创建了它们),但是状态值仍然保持不变。
之后,我尝试发送1个有状态小部件实例,但将其放入Column中2次(我想它来自同一时刻,因此其中的数据,状态必须进行相应更改),但我又错了。好像我有2个瞬间,渲染后它们具有自己的状态。
请在下面考虑我的代码
import 'package:flutter/material.dart';
class TestWidget extends StatefulWidget{
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _TestWidgetState();
}
}
class _TestWidgetState extends State<TestWidget>{
String _text = "";
@override
Widget build(BuildContext context) {
// TODO: implement build
print('TestWidget build');
Widget wg2 = new TestWidget2(name:_text);
return Scaffold(
appBar: AppBar(
title: Text(_text),
),
body: Center(
child: Column(
children: <Widget>[
TextField(
onChanged: (_val) {
this.setState((){
_text = _val;
});
},
),
wg2,
Container(
color: Colors.red,
height: 20,
),
wg2
],
),
),
);
}
}
//============================
class TestWidget2 extends StatefulWidget{
String name;
TestWidget2({this.name});
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _TestWidgetState2();
}
}
class _TestWidgetState2 extends State<TestWidget2>{
String _text = "";
@override
Widget build(BuildContext context) {
// TODO: implement build
print('TestWidget build');
return Center(
child: Container(
color: Colors.tealAccent,
child: Column(
children: <Widget>[
TextField(
onChanged: (_val) {
this.setState((){
_text = _val;
});
},
),
Text(_text),
Divider(),
Text(widget.name)
],
),
),
);
}
}
我希望如果我重新渲染屏幕。我应该获取所有新创建的小部件,以便重置所有状态。而且,如果我将同一个即时消息传递到小部件的布局中,而不管它有多少次,那么我应该让小部件显示在屏幕上,并且其中的小部件应该具有对应的状态,数据,因为它来自同一即时
如果我误会了,请告诉我。
谢谢。