Rxdart BehaviorSubject使其值为null
我在RxdartRxdart BehaviorSubject使其值为null,dart,flutter,Dart,Flutter,我在Rxdart行为主体方面有一个有线问题!我在flatter中创建了一个屏幕,其中有两个TextField和一个DropdownButton,我用bloc模式接收它们的数据 但是,当我更改TextFields值时,连接到DropdownButton的BehaviorSubject的值变为null,当我更改DropdownButton值时,连接到TextFields的两个BehaviorSubjects的值变为null 此外,它不会影响小部件呈现 谁能帮我理解我做错了什么。这是我的集团代码: c
行为主体
方面有一个有线问题!我在flatter中创建了一个屏幕,其中有两个TextField
和一个DropdownButton
,我用bloc模式接收它们的数据
但是,当我更改TextField
s值时,连接到DropdownButton
的BehaviorSubject
的值变为null,当我更改DropdownButton
值时,连接到TextField
s的两个BehaviorSubject
s的值变为null
此外,它不会影响小部件呈现
谁能帮我理解我做错了什么。这是我的集团代码:
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();
}
}
class集团{
final _type=BehaviorSubject();
最终金额=行为主体();
最终标题=行为主体();
Stream get type=>\u type.Stream;
Stream get amount=>\u amount.Stream;
流获取标题=>\u title.Stream;
函数(字符串)get changeType=>\u type.sink.add;
函数(字符串)get changeAmount=>\u amount.sink.add;
函数(字符串)get changetTitle=>\u title.sink.add;
createTransaction(){
最终有效类型=_type.value;
最终有效金额=_amount.value;
最终有效标题=_title.value;
打印(有效类型);
打印(validAmount);
打印(有效标题);
}
处置{
_输入.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,
...
),
),
),
);
}
}
但是最后我不明白
行为主体
和这个解决方案之间的关系:)有人能帮我找到一个更好的标题吗?你找到问题的原因了吗。我也遇到了同样的问题。如果您发现了,请帮助我好吗?我的代码的问题是我将bloc providers作为MaterialPage路由
的子级,但不知何故这是错误的,您应该将providers作为MaterialPage路由
的父级。我希望你能理解