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/model/repository.dart';
  5. import 'package:rxdart/rxdart.dart';
  6. /**
  7. * ViewModel
  8. */
  9. class HomeProvide extends ChangeNotifier {
  10. final CompositeSubscription _subscriptions = CompositeSubscription();
  11. final GithubRepo _repo;
  12. String username = "";
  13. String password = "";
  14. bool _loading = false;
  15. String _response = "";
  16. final String title;
  17. String get response => _response;
  18. set response(String response) {
  19. _response = response;
  20. notifyListeners();
  21. }
  22. bool get loading => _loading;
  23. double _btnWidth = 295.0;
  24. double get btnWidth => _btnWidth;
  25. set btnWidth(double btnWidth) {
  26. _btnWidth = btnWidth;
  27. notifyListeners();
  28. }
  29. set loading(bool loading) {
  30. _loading = loading;
  31. notifyListeners();
  32. }
  33. HomeProvide(this.title,this._repo);
  34. /**
  35. * call the model layer 's method to login
  36. * doOnData : handle response when success
  37. * doOnError : handle error when failure
  38. * doOnListen : show loading when listen start
  39. * doOnDone : hide loading when complete
  40. */
  41. Observable login() => _repo
  42. .login(username, password)
  43. .doOnData((r) => response = r.toString())
  44. .doOnError((e, stacktrace) {
  45. if (e is DioError) {
  46. response = e.response.data.toString();
  47. }
  48. })
  49. .doOnListen(() => loading = true)
  50. .doOnDone(() => loading = false);
  51. @override
  52. void dispose() {
  53. super.dispose();
  54. }
  55. void disposeBag(){
  56. _subscriptions.dispose();
  57. }
  58. /// add [StreamSubscription] to [_subscriptions]
  59. void plus(StreamSubscription s) {
  60. _subscriptions.add(s);
  61. }
  62. }