Flutter 小部件未显示RaisedButton的onPressed事件
我试图在使用dio&BLoC模式调用API时显示Flutter 小部件未显示RaisedButton的onPressed事件,flutter,dart,bloc,dio,Flutter,Dart,Bloc,Dio,我试图在使用dio&BLoC模式调用API时显示循环ProgressIndicator 代码如下: class UserWidget extends StatefulWidget { @override State<StatefulWidget> createState() { return _UserWidgetState(); } } class _UserWidgetState extends State<UserWidget> { @ov
循环ProgressIndicator
代码如下:
class UserWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _UserWidgetState();
}
}
class _UserWidgetState extends State<UserWidget> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
margin: EdgeInsets.only(top: 200),
child: RaisedButton(
child: Text("Click"),
onPressed: () {
bloc.getUser();
StreamBuilder<MemberLogin>(
stream: bloc.subject.stream,
builder: (context, AsyncSnapshot<MemberLogin> snapshot) {
if (snapshot.hasData) {
return _buildUserWidget(snapshot.data);
} else if (snapshot.hasError) {
return _buildErrorWidget(snapshot.error);
} else {
return _buildLoadingWidget();
}
},
);
},
),
),
);
}
Widget _buildLoadingWidget() {
return Center(
child: CircularProgressIndicator(),
);
}
Widget _buildErrorWidget(String error) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Error occured: $error"),
],
));
}
Widget _buildUserWidget(MemberLogin data) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("User widget"),
],
));
}
我正在从API获取数据,但唯一的问题是显示加载进度。您的RaisedButton onPress()永远不会打开小部件
因为,onPress()是一种用于处理数据处理、事件和函数的方法
onPress()不希望或不希望在屏幕上呈现小部件。onPress()是一个函数,不是结构或小部件
在您的例子中,bloc.getUser()可以,因为它是一个函数。但是您已经在函数中编写了StreamBuilder小部件。不应将其添加到函数中
将它放在构建方法中,您将能够在屏幕上查看/渲染它。StreamBuilder不应在按下的
内部调用。谢谢你的回复。是的,我得到了它,但当我把它放在build方法下时,它默认显示出来。那么默认情况下如何隐藏它呢?只需检查条件,如if(数据可用){return your_streambuilder_widget}else{return container();}。通过这种方式,您可以渲染视图。但无法显示该视图!你能告诉我具体放在哪里吗?
class UserBloc {
final UserRepository _repository = UserRepository();
final BehaviorSubject<MemberLogin> _subject = BehaviorSubject<MemberLogin>();
getUser() async {
MemberLogin response = await _repository.getUser();
_subject.sink.add(response);
}
dispose() {
_subject.close();
}
BehaviorSubject<MemberLogin> get subject => _subject;
}
final bloc = UserBloc();
class UserRepository{
MemberApiProvider _apiProvider = MemberApiProvider();
Future<MemberLogin> getUser(){
return _apiProvider.getUser();
}
}