【发布时间】:2018-08-30 09:01:56
【问题描述】:
我正在尝试创建一个 Switch 小部件,将其添加到 initState 内的小部件列表中,然后将此列表添加到 build 方法中 Column 的 children 属性中。该应用程序成功运行,并且 Switch 小部件确实显示,但单击它不会更改它,就好像它不工作一样。我尝试在 build 方法中制作相同的小部件,并且 Switch 按预期工作。
我在 _onClicked 中添加了一些 cmets,这些 cmets 已分配给 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),
),
),
);
}
}
【问题讨论】:
-
initState是初始化状态,而不是小部件。build是创建小部件。