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

mvvm

parent 829ea00b
...@@ -10,9 +10,21 @@ import 'package:netrain_flutter_app/douwen/custom/http/AdService.dart'; ...@@ -10,9 +10,21 @@ import 'package:netrain_flutter_app/douwen/custom/http/AdService.dart';
import 'custom/http/base/IEntity.dart'; import 'custom/http/base/IEntity.dart';
class Demo2 extends BaseView { 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( child: Column(
children: [ children: [
Row( Row(
...@@ -31,9 +43,9 @@ class Demo2 extends BaseView { ...@@ -31,9 +43,9 @@ class Demo2 extends BaseView {
setReplaceView(Row( setReplaceView(Row(
children: [ children: [
ValueListenableBuilder( ValueListenableBuilder(
valueListenable: viewModel.num, valueListenable: viewModel.showText,
builder: (context, value, child) => builder: (context, value, child) =>
Text("点击了${viewModel.num.value}次")), Text(value.toString())),
ElevatedButton( ElevatedButton(
onPressed: () async { onPressed: () async {
viewModel.login(); viewModel.login();
...@@ -45,13 +57,4 @@ class Demo2 extends BaseView { ...@@ -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'; ...@@ -6,10 +6,8 @@ import 'EmptyPage.dart';
import 'ErrorPage.dart'; import 'ErrorPage.dart';
import 'ViewState.dart'; import 'ViewState.dart';
class BaseView extends StatefulWidget { abstract class BaseView extends StatefulWidget {
BaseViewModel viewModel; BaseViewModel viewModel;
Widget Function(BuildContext context, BaseViewModel value, Widget child)
builder;
Widget _mReplaceView; Widget _mReplaceView;
Widget emptyView = EmptyPage(); Widget emptyView = EmptyPage();
Widget errorView = ErrorPage(); Widget errorView = ErrorPage();
...@@ -18,6 +16,8 @@ class BaseView extends StatefulWidget { ...@@ -18,6 +16,8 @@ class BaseView extends StatefulWidget {
} }
Widget builder(BuildContext context, BaseViewModel value, Widget child);
Widget setReplaceView(Widget replaceView) { Widget setReplaceView(Widget replaceView) {
_mReplaceView = replaceView; _mReplaceView = replaceView;
switch (viewModel.viewState ?? ViewState.Normal) { switch (viewModel.viewState ?? ViewState.Normal) {
......
...@@ -7,6 +7,7 @@ import 'ViewState.dart'; ...@@ -7,6 +7,7 @@ import 'ViewState.dart';
class BaseViewModel extends ChangeNotifier { class BaseViewModel extends ChangeNotifier {
var _viewState; var _viewState;
var num = ValueNotifier<int>(0); var num = ValueNotifier<int>(0);
var showText = ValueNotifier<String>("稍等");
set viewState(ViewState viewState) => setViewState(viewState); set viewState(ViewState viewState) => setViewState(viewState);
...@@ -45,7 +46,17 @@ class BaseViewModel extends ChangeNotifier { ...@@ -45,7 +46,17 @@ class BaseViewModel extends ChangeNotifier {
AdRepository.instance.login((str) { AdRepository.instance.login((str) {
Fluttertoast.showToast(msg: str); Fluttertoast.showToast(msg: str);
}, (iEntity) { }, (iEntity) {
showText.post(iEntity.msg);
Fluttertoast.showToast(msg: 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'; ...@@ -3,7 +3,7 @@ import 'package:netrain_flutter_app/douwen/custom/http/AdService.dart';
import 'base/IEntity.dart'; import 'base/IEntity.dart';
import 'base/IRepository.dart'; import 'base/IRepository.dart';
class AdRepository with IRepository{ class AdRepository with IRepository {
AdRepository._privateConstructor(this._service); AdRepository._privateConstructor(this._service);
static AdRepository _instance; static AdRepository _instance;
...@@ -17,6 +17,9 @@ class AdRepository with IRepository{ ...@@ -17,6 +17,9 @@ class AdRepository with IRepository{
final AdService _service; 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