| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import 'package:dio/dio.dart';
- import 'package:rxdart/rxdart.dart';
- import '../model/repository.dart';
- import '../view/base.dart';
- /// ViewModel 层
- ///
- /// 将 Model层 [GithubRepo] 返回的数据转换成 View 层 [HomePage] 需要展示的数据
- /// 通过 [notifyListeners] 通知UI层更新
- class HomeProvide extends BaseProvide {
- final GithubRepo _repo;
- String username = "";
- String password = "";
- bool _loading = false;
- /// 结果
- String _response = "";
- final String title;
- String get response => _response;
- set response(String response) {
- _response = response;
- notifyListeners();
- }
- bool get loading => _loading;
- double _btnWidth = 295.0;
- double get btnWidth => _btnWidth;
- set btnWidth(double btnWidth) {
- _btnWidth = btnWidth;
- notifyListeners();
- }
- set loading(bool loading) {
- _loading = loading;
- notifyListeners();
- }
- HomeProvide(this.title, this._repo);
- /// 登录
- ///
- /// 调用 model层[GithubRepo] 的 login 方法进行登录
- /// 传入 [username] 和 [password]
- /// 成功:显示返回的信息
- /// 失败: 处理错误,显示错误信息
- /// 订阅开始:loading = true
- /// 订阅结束:loading = false
- /// 返回 [Observable] 给 View 层
- Observable login() => _repo
- .login(username, password)
- .doOnData((r) => response = r.toString())
- .doOnError((e, stacktrace) {
- if (e is DioError) {
- response = e.response.data.toString();
- }
- })
- .doOnListen(() => loading = true)
- .doOnDone(() => loading = false);
- }
|