使用bloc处理Post方法的回调响应

问题描述

我在单击按钮时调用登录api,我能够从服务器获取响应,但是在单击按钮时,我无法接收响应。如何接收和处理响应。我正在使用BLoC模式这个。这是代码

import numpy as np

a = np.zeros((100,3))
a[:,0:2] = np.arange(100*2).reshape(-1,2)

a[40,2]=6

这是我的login_screen.dart。我的api调用bloc类是:

import 'package:Flutter/material.dart';
import '../blocs/bloc.dart';
import '../blocs/provider.dart';
import '../models/login_response.dart';

class LoginScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Provider(
  child: new Scaffold(
      body: Container(
        child: LoginForm(),),);
}
}

class LoginForm extends StatefulWidget {
// since its a stateful widget we need to create state for it.
const LoginForm({Key key}) : super(key: key);

@override
_LoginFormState createState() => _LoginFormState();
}

class _LoginFormState extends State<LoginForm> {

@override
 Widget build(BuildContext context) {


return Form(
  child: Column(
    children: <Widget>[ 
      Padding(
        padding: const EdgeInsets.only(top: 50),// Start creating widget here.
      emailField(),passwordField(),Container(margin: EdgeInsets.only(top: 25.0)),submitButton()
    ],);
}

  Widget emailField() {
   return StreamBuilder(
   stream: bloc.email,builder: (context,snapshot) {
     return TextField(
        onChanged:  bloc.changeEmail,keyboardType: TextInputType.emailAddress,decoration: Inputdecoration(
        hintText: '[email protected]',labelText: 'Email Address',errorText: snapshot.error
      ),);
   }
  );
}

Widget passwordField() {
  return StreamBuilder(
   stream: bloc.password,snapshot) {
      return TextField(
        onChanged: bloc.changePassword,obscureText: true,decoration: Inputdecoration(
        labelText: 'Please enter your password',hintText: 'Password',);
   },);
}

Widget submitButton() {

return StreamBuilder(
  stream: bloc.submitValid,snapshot) {
      return RaisedButton(
        onpressed:() =>  showWidgetForNetworkCall(context),// onpressed: () {
        //   // Do submit button action.              
        //   showWidgetForNetworkCall(context);
        // //  callLoginApi();
        // },child: const Text('Login'),textColor: Colors.white,color: Colors.blueAccent,);
    },);
}

  // Loading Widget
   Widget _buildLoadingWidget() {
   return Center(
     child: Column(
       mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
         Text("Loading data from API...",textDirection: TextDirection.ltr),CircularProgressIndicator()
       ],);
 }

 // // Error Widget
  Widget _buildErrorWidget(String error) {
   return Center(
    child: Column(
    mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
      Text("Loading error data from API...",CircularProgressIndicator()
    ],);
}

// show server data
 showServerData() {
   print(" Servr >>>>>> Data : ");
 }

 Widget showWidgetForNetworkCall(BuildContext context) {
  bloc.loginSubmit();
    return StreamBuilder(
     stream: bloc.loginSubject.stream,AsyncSnapshot<LoginResponse>snapshot){
     if (snapshot.hasData) {
        return showServerData();
      } else if (snapshot.hasError) {
        return _buildErrorWidget(snapshot.error);
      } else {
        return _buildLoadingWidget();
      }
    },);
 }
}

集团代码

   postData() async {
LoginResponse response = await _repository.postData(_loginResource);
_subject.sink.add(response);

}

final bloc = Bloc();

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)