如何解决使用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: 'you@example.com',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 举报,一经查实,本站将立刻删除。