有 2 个小部件:MyHomePage和Buttons。列表中的MyHomePage信息应该显示在哪里,而 Buttons 只是作为一个单独的“自定义小部件”。当我单击按钮时,我必须更改 id 以确定 List 中的哪个项目应显示在MyHomePage中。
class _ButtonsState extends State<Buttons> {
var s = Logic();
void _func(int id) {
setState(() {
s.id = id;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
MaterialButton(
onPressed: () => _func(1),
child: Text('Text 1'),
),
MaterialButton(
onPressed: () => _func(2),
child: Text('Text 2'),
),
],
);
}
}
但是当你点击按钮时,信息并没有更新,虽然MyHomePage有StreamBuilder
class _MyHomePageState extends State<MyHomePage> {
var s = Logic();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
StreamBuilder<String>(
stream: s.stream(),
builder: (context, snapshot) {
if (snapshot.data != null && snapshot.hasData) {
return Text(
'${snapshot.data}',
style: Theme.of(context).textTheme.headline4,
);
} else {
return Container(
width: 100,
height: 100,
color: Colors.red,
);
}
},
),
Buttons(),
],
),
),
);
}
}
这是Stream
我订阅的代码StreamBuilder
class Logic {
int? id;
var text = ListStrings();
Stream<String>? stream() {
if (id == 1) {
return Stream.value(text.text[0]);
} else if (id == 2) {
return Stream.value(text.text[1]);
} else {
return null;
}
}
}
单击按钮时id
,类中的自身会更新。Logic
错误是什么?
Logic.stream
它返回一个具有单个值的流,该值不能以任何方式更新。也就是说,它等价于以下内容:var s
in_ButtonsState
和var s
in是两个不同的对象这一事实_MyHomePageState
将不再允许我们实现正确的逻辑。我可以建议以下方法来解决问题: