gpt4 book ai didi

dart - Rxdart BehaviorSubject 使其值为空

转载 作者:IT王子 更新时间:2023-10-29 07:00:31 29 4
gpt4 key购买 nike

我有一个关于 Rxdart BehaviorSubject 的连线问题!我在 flutter 中创建了一个屏幕,它有两个 TextField 和一个 DropdownButton,我用 bloc 模式接收它们的数据。

但是当我更改 TextField 的值时,连接到 DropdownButtonBehaviorSubject 的值变为空,当我更改 DropdownButton 值,连接到 TextField 的两个 BehaviorSubject 的值变为 null。

它也不会影响小部件的渲染。

任何人都可以帮助我理解我在这里做错了什么。这是我的 Bloc 代码:

class Bloc {
final _type = BehaviorSubject<String>();
final _amount = BehaviorSubject<String>();
final _title = BehaviorSubject<String>();

Stream<String> get type => _type.stream;
Stream<String> get amount => _amount.stream;
Stream<String> get title => _title.stream;

Function(String) get changeType => _type.sink.add;
Function(String) get changeAmount => _amount.sink.add;
Function(String) get changeTitle => _title.sink.add;

createTransaction() {
final validType = _type.value;
final validAmount = _amount.value;
final validTitle = _title.value;

print(validType);
print(validAmount);
print(validTitle);
}

dispose() {
_type.close();
_amount.close();
_title.close();
}

}

最佳答案

所以在重写代码之后我终于找到了问题所在。这太烦人了,我希望这个答案对其他人有帮助。

问题是我在路由中添加了提供者,所以代码是这样的:

Route routes(RouteSettings settings) {
switch(settings.name) {
case '/app':
return MaterialPageRoute(
builder: (context) {
return MainProvider(child: MainScreen());
}
);
...
}
}

所以我将其更改为这段代码,并将所有提供程序引入主构建函数中:

class App extends StatelessWidget {
Widget build(context) {
return UserProvider(
child: ListsProvider(
child: TransactionsFormProvider(
child: MaterialApp(
onGenerateRoute: routes,
...
),
),
),
);
}
}

但最后我不明白 BehaviorSubject 和 This solution 之间的关系到底是什么:))

关于dart - Rxdart BehaviorSubject 使其值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51694330/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com