Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 小部件未显示RaisedButton的onPressed事件_Flutter_Dart_Bloc_Dio - Fatal编程技术网

Flutter 小部件未显示RaisedButton的onPressed事件

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

我试图在使用dio&BLoC模式调用API时显示
循环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();
  }
}