home_provide.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import 'dart:async';
  2. import 'package:dio/dio.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:mvvm_flutter/di/dartin.dart';
  5. import 'package:mvvm_flutter/model/repository.dart';
  6. import 'package:rxdart/rxdart.dart';
  7. /**
  8. * ViewModel
  9. */
  10. class HomeProvide extends ChangeNotifier {
  11. final CompositeSubscription _subscriptions = CompositeSubscription();
  12. final GithubRepo _repo; //数据仓库
  13. String username = ""; //账号
  14. String password = ""; //密码
  15. bool _loading = false; // 加载中
  16. String _response = ""; //响应数据
  17. final String title;
  18. String get response => _response;
  19. set response(String response) {
  20. _response = response;
  21. notifyListeners();
  22. }
  23. bool get loading => _loading;
  24. double _btnWidth = 295.0;
  25. double get btnWidth => _btnWidth;
  26. set btnWidth(double btnWidth) {
  27. _btnWidth = btnWidth;
  28. notifyListeners();
  29. }
  30. set loading(bool loading) {
  31. _loading = loading;
  32. notifyListeners();
  33. }
  34. HomeProvide(this.title,this._repo);
  35. /**
  36. * 调用model层的方法进行登录
  37. * doOnData : 请求成功时,处理响应数据
  38. * doOnError : 请求失败时,处理错误
  39. * doOnListen : 开始时loading为true,通知ui更新
  40. * doOnDone : 结束时loading为false,通知ui更新
  41. */
  42. Observable login() => _repo
  43. .login(username, password)
  44. .doOnData((r) => response = r.toString())
  45. .doOnError((e, stacktrace) {
  46. if (e is DioError) {
  47. response = e.response.data.toString();
  48. }
  49. })
  50. .doOnListen(() => loading = true)
  51. .doOnDone(() => loading = false);
  52. @override
  53. void dispose() {
  54. super.dispose();
  55. }
  56. void disposeBag(){
  57. _subscriptions.dispose();
  58. }
  59. void plus(StreamSubscription s) {
  60. _subscriptions.add(s);
  61. }
  62. }