Commit 83c395a8 authored by 窦文's avatar 窦文

mvvm

parent 829ea00b
......@@ -10,9 +10,21 @@ import 'package:netrain_flutter_app/douwen/custom/http/AdService.dart';
import 'custom/http/base/IEntity.dart';
class Demo2 extends BaseView {
Demo2() : super(BaseViewModel());
Demo2() : super(BaseViewModel()) {
builder = (context, value, child) => Container(
_item(String title, VoidCallback onPressed) {
return Container(
child: RaisedButton(
onPressed: onPressed,
child: Text(title),
),
);
}
@override
Widget builder(BuildContext context, BaseViewModel value, Widget child) {
Container(
child: Column(
children: [
Row(
......@@ -31,9 +43,9 @@ class Demo2 extends BaseView {
setReplaceView(Row(
children: [
ValueListenableBuilder(
valueListenable: viewModel.num,
valueListenable: viewModel.showText,
builder: (context, value, child) =>
Text("点击了${viewModel.num.value}次")),
Text(value.toString())),
ElevatedButton(
onPressed: () async {
viewModel.login();
......@@ -45,13 +57,4 @@ class Demo2 extends BaseView {
)
);
}
_item(String title, VoidCallback onPressed) {
return Container(
child: RaisedButton(
onPressed: onPressed,
child: Text(title),
),
);
}
}
......@@ -6,10 +6,8 @@ import 'EmptyPage.dart';
import 'ErrorPage.dart';
import 'ViewState.dart';
class BaseView extends StatefulWidget {
abstract class BaseView extends StatefulWidget {
BaseViewModel viewModel;
Widget Function(BuildContext context, BaseViewModel value, Widget child)
builder;
Widget _mReplaceView;
Widget emptyView = EmptyPage();
Widget errorView = ErrorPage();
......@@ -18,6 +16,8 @@ class BaseView extends StatefulWidget {
}
Widget builder(BuildContext context, BaseViewModel value, Widget child);
Widget setReplaceView(Widget replaceView) {
_mReplaceView = replaceView;
switch (viewModel.viewState ?? ViewState.Normal) {
......
......@@ -7,6 +7,7 @@ import 'ViewState.dart';
class BaseViewModel extends ChangeNotifier {
var _viewState;
var num = ValueNotifier<int>(0);
var showText = ValueNotifier<String>("稍等");
set viewState(ViewState viewState) => setViewState(viewState);
......@@ -45,7 +46,17 @@ class BaseViewModel extends ChangeNotifier {
AdRepository.instance.login((str) {
Fluttertoast.showToast(msg: str);
}, (iEntity) {
showText.post(iEntity.msg);
Fluttertoast.showToast(msg: iEntity.msg);
});
}
}
extension ValueNotifierValue<T> on ValueNotifier<T>{
void post(T t){
value = t;
notifyListeners();
}
}
\ No newline at end of file
......@@ -3,7 +3,7 @@ import 'package:netrain_flutter_app/douwen/custom/http/AdService.dart';
import 'base/IEntity.dart';
import 'base/IRepository.dart';
class AdRepository with IRepository{
class AdRepository with IRepository {
AdRepository._privateConstructor(this._service);
static AdRepository _instance;
......@@ -17,6 +17,9 @@ class AdRepository with IRepository{
final AdService _service;
void login(void onSuccess(String str),void onError(IEntity iEntity)) => getResult<String>(_service.login(),analysis: (data) => data.toString(),onSuccess: (str) => onSuccess(str),onError:(iEntity) => onError(iEntity));
void login(void onSuccess(String str), void onError(IEntity iEntity)) =>
getResult<String>(_service.login(),
analysis: (data) => data.toString(),
onSuccess: (str) => onSuccess(str),
onError: (iEntity) => onError(iEntity));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment