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 如何使用flatter_bloc包从api获取数据_Flutter_Dart_Flutter Bloc - Fatal编程技术网

Flutter 如何使用flatter_bloc包从api获取数据

Flutter 如何使用flatter_bloc包从api获取数据,flutter,dart,flutter-bloc,Flutter,Dart,Flutter Bloc,如何在点击按钮后从api获取数据。基本上有两个屏幕主页和设置页面,每个页面有一个单独的区域和一个存储库。主页是启动屏幕,无需单击任何按钮即可自动获取api,在设置页面中有两个radiobutton和一个RaiseButton。每当我选择任何一个radiobutton,然后单击raisedbutton时,它应该在api链接上添加radiobutton值,并在主页上获取和加载该特定数据。 表示主页已经有HomeBloc.dart,但在单击“设置”页面中的“提高”按钮后,如何传递数据并再次加载到主页。

如何在点击按钮后从api获取数据。基本上有两个屏幕主页和设置页面,每个页面有一个单独的区域和一个存储库。主页是启动屏幕,无需单击任何按钮即可自动获取api,在设置页面中有两个radiobutton和一个RaiseButton。每当我选择任何一个radiobutton,然后单击raisedbutton时,它应该在api链接上添加radiobutton值,并在主页上获取和加载该特定数据。
表示主页已经有HomeBloc.dart,但在单击“设置”页面中的“提高”按钮后,如何传递数据并再次加载到主页。我已经检查了github中的所有示例或官方页面中的文档,但不幸的是没有得到类似的类型示例。

您没有使用flatter\u bloc进行API请求。您可以使用http.dart

示例(LoginController)

导入'dart:convert';
进口“包装:颤振/基础.dart”;
将“package:http/http.dart”导入为http;
导入“包:pmd_mobile/model/api_route.dart”;
类登录控制器{
静态未来登录(
{@required String email,@required String password})异步{
变量参数={
“电子邮件”:电子邮件,
“密码”:密码,
};
var response=wait http.post(ApiRoute.LOGIN,
body:json.encode(params));
返回响应;
}
}
然后你在你的集团内部调用它(LoginBloc)

classloginbloc扩展了Bloc{
最终构建语境;
最终用户存储库用户存储库;
最终AuthBloc AuthBloc;
罗金布洛克(
{@required this.context,
@需要此.userRepository,
@需要此属性(authBloc})
:assert(userRepository!=null),
断言(authBloc!=null);
LoginState get initialState=>LoginInitial();
@凌驾
流mapEventToState(LoginEvent事件)异步*{
如果(事件为LoginButtonPressed){
收益登录处理();
等待未来。延迟(常量持续时间(毫秒:250));
试一试{
var loginResponse=
等待尝试登录(userRepository、event.email、event.password);
if(loginResponse['data']){
收益率LoginInitial();
}否则{
屈服登录失败(消息:“登录失败”);
}
}捕获(错误,堆栈跟踪){
打印(错误);
打印(stackTrace);
等待未来。延迟(持续时间(秒:1));
收益登录失败(
消息:“登录失败。请检查您的internet连接。”);
}
}
}
}
_尝试登录(
UserRepository用户存储库、字符串电子邮件、字符串密码)异步{
最终响应=等待userRepository.authenticate(
电邮:电邮,,
密码:密码,
);
返回json.decode(response.body);
}
import 'dart:convert';

import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:pmd_mobile/model/api_route.dart';

class LoginController {
  static Future<http.Response> login(
      {@required String email, @required String password}) async {
    var params = {
      'email': email,
      'password': password,
    };

    var response = await http.post(ApiRoute.LOGIN,
        body: json.encode(params));
    return response;
  }
}
class LoginBloc extends Bloc<LoginEvent, LoginState> {
  final BuildContext context;
  final UserRepository userRepository;
  final AuthBloc authBloc;

  LoginBloc(
      {@required this.context,
      @required this.userRepository,
      @required this.authBloc})
      : assert(userRepository != null),
        assert(authBloc != null);

  LoginState get initialState => LoginInitial();

  @override
  Stream<LoginState> mapEventToState(LoginEvent event) async* {
    if (event is LoginButtonPressed) {
      yield LoginProcessing();

      await Future.delayed(const Duration(milliseconds: 250));

      try {
        var loginResponse =
            await _attemptLogin(userRepository, event.email, event.password);

        if (loginResponse['data']) {
          yield LoginInitial();
        } else {
          yield LoginFailure(message: 'Login failed.');
        }
      } catch (error, stackTrace) {
        print(error);
        print(stackTrace);

        await Future.delayed(const Duration(seconds: 1));
        yield LoginFailure(
            message: 'Login failed. Please check your internet connection.');
      }
    }
  }
}

_attemptLogin(
    UserRepository userRepository, String email, String password) async {
  final response = await userRepository.authenticate(
    email: email,
    password: password,
  );

  return json.decode(response.body);
}