我试图创建一个Switch小部件,将其添加到initState内部的小部件列表中,然后将此列表添加到build方法中的Column的children属性中。该应用程序已成功运行,并且确实显示了“开关”小部件,但单击它并不会更改它,就好像它不起作用一样。我尝试在build方法中制作相同的小部件,并且Switch可以按预期工作。
我在_onClicked中添加了一些注释,这些注释已分配给Switch小部件的onChanged属性,以显示value属性的流程。
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
home: App(),
));
}
class App extends StatefulWidget {
@override
AppState createState() => new AppState();
}
class AppState extends State<App> {
List<Widget> widgetList = new List<Widget>();
bool _value = false;
void _onClicked(bool value) {
print(_value); // prints false the first time and true for the rest
setState(() {
_value = value;
});
print(_value); // Always prints true
}
@override
void initState() {
Switch myWidget = new Switch(value: _value, onChanged: _onClicked);
widgetList.add(myWidget);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('My AppBar'),
),
body: new Container(
padding: new EdgeInsets.all(32.0),
child: new Center(
child: new Column(children: widgetList),
),
),
);
}
}
答案 0 :(得分:1)
initState
用于初始化状态,而不是小部件。 build
用于创建小部件。
失败的原因是,当值更改时(当您调用setState
时,需要重新构建窗口小部件,但这并不是因为在调用build()
时,先前的(在{ {1}})创建的窗口小部件被重复使用。
initState