【发布时间】:2018-05-27 16:15:23
【问题描述】:
如何在 Flutter 中更新兄弟部件的状态?
例如,如果我有一个矩形小部件,我可以通过调用 setState() 并更改颜色变量来从小部件内更改它的颜色(就像下面的“变成绿色”按钮所做的那样)。但是,假设我想要一个矩形之外的按钮来改变它的颜色。我如何向 Rectangle 传达是时候改变它的颜色了,以及要改变什么颜色?
这是我的示例代码。当用户按下“变成蓝色”按钮时,我希望矩形变成蓝色,但我无法从同级小部件访问其状态。
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Hello Rectangle',
home: Scaffold(
appBar: AppBar(
title: Text('Hello Rectangle'),
),
body: Column(
children: <Widget>[
HelloRectangle(),
FlatButton(
child: Text('Turn Blue!',
style: TextStyle(fontSize: 40.0),
textAlign: TextAlign.center,
),
onPressed: () {
// How to update state of the Rectangle from here?
},
),
]
),
),
),
);
}
class HelloRectangle extends StatefulWidget {
@override
HelloRectangleState createState() {
return new HelloRectangleState();
}
}
class HelloRectangleState extends State<HelloRectangle> {
Color _color;
@override
void initState() {
super.initState();
_color = Colors.red;
}
@override
Widget build(BuildContext context) {
return Center(
child: Container(
color: _color,
height: 400.0,
width: 300.0,
child: Center(
child: FlatButton(
child: Text('Turn Green!',
style: TextStyle(fontSize: 40.0),
textAlign: TextAlign.center,
),
onPressed: () {
// I can update the state from here because I'm inside the widget
setState(() {
_color = Colors.green;
});
},
),
),
),
);
}
}
【问题讨论】:
标签: flutter