Commit 363711f0 authored by 杜欣's avatar 杜欣

Merge branch 'test' into featrue/duxin

# Conflicts:
#	lib/commonModel/net/Api.dart
parents 675666c2 81631e35
......@@ -10,17 +10,17 @@ import 'package:gm_flutter/ClueModel/ClueRouterImpl.dart';
@Router("ClueRouter", ClueRouterImpl, true)
abstract class ClueRouter implements RouterBaser {
Widget getProjectDetailsPage(Map<String,dynamic> params);
Widget getProjectDetailsPage(Map<String, dynamic> params);
Widget getPlansCompareFeed(Map<String,dynamic> params);
Widget getPlansCompareFeed(Map<String, dynamic> params);
Widget getLevelOnePage(Map<String,dynamic> params);
Widget getLevelOnePage(Map<String, dynamic> params);
Widget getLevelTwoPage();
Widget getLevelTwoPage(Map<String, dynamic> params);
Widget getPlanPage();
Widget getPlanCompareDetailPage();
Widget getPlanCompareDetailPage(Map<String, dynamic> params);
Widget getTopPage();
Widget getTopPage(Map<String, dynamic> params);
}
......@@ -25,8 +25,8 @@ class ClueRouterImpl implements ClueRouter {
}
@override
Widget getLevelTwoPage() {
return LevelTwoPage();
Widget getLevelTwoPage(Map<String, dynamic> params) {
return LevelTwoPage(params);
}
@override
......@@ -40,12 +40,12 @@ class ClueRouterImpl implements ClueRouter {
}
@override
Widget getPlanCompareDetailPage() {
return PlanCompareDetailPage();
Widget getPlanCompareDetailPage(Map<String, dynamic> params) {
return PlanCompareDetailPage(params);
}
@override
Widget getTopPage() {
return TopPage();
Widget getTopPage(Map<String, dynamic> params) {
return TopPage(params);
}
}
......@@ -15,6 +15,8 @@ import 'package:gm_flutter/commonModel/base/BaseState.dart';
import 'package:gm_flutter/commonModel/bean/Pair.dart';
class PlanCompareDetailPage extends StatefulWidget {
PlanCompareDetailPage(Map<String, dynamic> params) {}
@override
State<StatefulWidget> createState() => PlanCompareDetailPageState();
}
......
......@@ -24,6 +24,7 @@ class LevelOneModel extends BaseModel {
List<Tabs> tabsList = [];
int plan_id = 0;
PlanOverData planoverItem;
String imageUrl = "";
void init(VoidCallback callback) {
ClueApiImpl.getInstance()
......@@ -31,6 +32,7 @@ class LevelOneModel extends BaseModel {
.listen((event) {
if (event.error == 0) {
planoverItem = event.data;
imageUrl = event.data.banner.imageUrl;
tabsList = event.data.tabs;
stateLive.notifyView(ENDLOADING);
callback();
......
......@@ -184,8 +184,7 @@ class LevelOneState extends BaseState<LevelOnePage>
handle: extend.NestedScrollView.sliverOverlapAbsorberHandleFor(
context),
sliver: baseSliverAppBar(
// _model.imageUrl
"https://pic.igengmei.com/2018/09/11/1513/b7e825a4e4c1-w")),
_model.imageUrl)),
SliverList(
delegate: SliverChildBuilderDelegate((BuildContext c, int i) {
if (i == 0) {
......
......@@ -23,12 +23,14 @@ import 'package:gm_flutter/main.mark.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class LevelTwoPage extends StatefulWidget {
LevelTwoPage(Map<String, dynamic> params) {}
@override
State<StatefulWidget> createState() => LevelTwoState();
}
class LevelTwoState extends BaseState<LevelTwoPage>
with SingleTickerProviderStateMixin {
with TickerProviderStateMixin {
int planId = 10;
LevelOneModel _model = new LevelOneModel();
RefreshController _refreshController = RefreshController();
......@@ -147,8 +149,14 @@ class LevelTwoState extends BaseState<LevelTwoPage>
},
child: newHome(),
)),
baseSliverTitle(_model.planoverItem?.name,
MediaQuery.of(context).size.width, _model.textLive),
Positioned(
top: 57,
child: Container(
alignment: Alignment.center,
width: MediaQuery.of(context).size.width,
child: baseText("文案", 18, Color(0xff333333)),
),
),
baseSliverBack(() {
Navigator.of(context).pop();
}),
......@@ -175,6 +183,11 @@ class LevelTwoState extends BaseState<LevelTwoPage>
},
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverOverlapAbsorber(
handle: extend.NestedScrollView.sliverOverlapAbsorberHandleFor(
context),
sliver: baseSliverAppBar(_model.imageUrl,
height: pinnedHeaderHeight, needpic: false)),
SliverList(
delegate: SliverChildBuilderDelegate((BuildContext c, int i) {
if (i == 0) {
......
......@@ -14,6 +14,7 @@ import 'package:gm_flutter/commonModel/GMBase.dart';
import 'package:gm_flutter/commonModel/bean/Pair.dart';
import 'package:gm_flutter/commonModel/rx/RxDispose.dart';
import 'package:gm_flutter/commonModel/util/PrintUtil.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class PlanModel extends BaseModel {
LiveData<List> managerLive = new LiveData();
......@@ -75,7 +76,7 @@ class PlanModel extends BaseModel {
refreshFeed(true);
}
void refreshFeed(bool clear) {
void refreshFeed(bool clear, {RefreshController controller}) {
if (clear) {
feedDatas.clear();
}
......@@ -90,15 +91,18 @@ class PlanModel extends BaseModel {
feedDatas.addAll(event.data.plans);
feedsLive.notifyView(Pair(ENDLOADING, feedDatas));
}
controller?.refreshCompleted();
} else {
NativeToast.showNativeToast(event.message);
feedsLive.notifyView(Pair(FAIL, null));
controller?.refreshFailed();
}
})
.addToDispose(rxDispose)
.onError((err) {
PrintUtil.printBug(err);
feedsLive.notifyView(Pair(FAIL, null));
controller?.refreshFailed();
});
}
......
......@@ -27,6 +27,7 @@ import 'package:gm_flutter/commonModel/popMenu/BaseMenuListener.dart';
import 'package:gm_flutter/commonModel/popMenu/BasePopMenu.dart';
import 'package:gm_flutter/commonModel/util/DartUtil.dart';
import 'package:gm_flutter/commonModel/util/WidgetUtil.dart';
import 'package:gm_flutter/main.mark.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'PlanModel.dart';
......@@ -53,8 +54,6 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin {
@override
void initState() {
CacheManager.getInstance().get(MEMORY_CACHE).save(COOKIE,
"_gtid=3123e178b91a11eaa2d87e40d376ac134112; sessionid=pq9wf8equ4h26ia3yspzmquqn2rjs6mx; _gm_token=4091a81593419225");
DioUtil.getInstance().setProxy("172.30.8.245");
super.initState();
_model.init();
......@@ -350,7 +349,7 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin {
child: baseRefreshView(
refreshController,
() {
_model.refreshFeed(true);
_model.refreshFeed(true, controller: refreshController);
},
Container(
width: 0,
......@@ -389,7 +388,10 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin {
data.data == null ? "" : data.data[0].icon ?? "",
fit: BoxFit.cover,
)).gestureDetector(() {
//TODO
Map<String, dynamic> map = {"rank_type": "0"};
RouterCenterImpl()
.findMainRouter()
.jumpPage(context, "favor_plan", map, false);
});
},
),
......@@ -411,7 +413,10 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin {
data.data == null ? "" : data.data[1].icon ?? "",
fit: BoxFit.cover,
)).gestureDetector(() {
//TODO
Map<String, dynamic> map = {"rank_type": "1"};
RouterCenterImpl()
.findMainRouter()
.jumpPage(context, "hot_plan", map, false);
});
},
),
......
......@@ -23,6 +23,12 @@ import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'TopList.dart';
class TopPage extends StatefulWidget {
String rank_type;
TopPage(Map<String, dynamic> map) {
this.rank_type = map["rank_type"];
}
@override
State<StatefulWidget> createState() => TopPageState();
}
......@@ -35,6 +41,7 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
@override
void initState() {
_model.rank_type = widget.rank_type;
init();
super.initState();
}
......
......@@ -6,6 +6,8 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter_boost/flutter_boost.dart';
import 'package:flutter_common/commonModel/util/JumpUtil.dart';
import 'package:gm_flutter/MainRouter/manager/MainManager.dart';
import 'package:gm_flutter/commonModel/App.dart';
import 'package:gm_flutter/commonModel/cache/CacheManager.dart';
import 'package:gm_flutter/main.mark.dart';
class JumpManager {
......@@ -25,6 +27,8 @@ class JumpManager {
String pageNameWrap =
nativePage ? "gm://${pageName}" : "flutter://${pageName}";
if (!MainManager.getInstance().isInit) {
CacheManager.getInstance().get(MEMORY_CACHE).save(COOKIE,
"_gtid=3123e178b91a11eaa2d87e40d376ac134112; sessionid=pq9wf8equ4h26ia3yspzmquqn2rjs6mx; _gm_token=4091a81593419225");
JumpUtil.jumpToPageRight(context, initMap(params)[pageNameWrap]);
} else {
FlutterBoost.singleton.open(pageName, urlParams: params);
......@@ -33,12 +37,21 @@ class JumpManager {
Map<String, dynamic> initMap(Map<String, dynamic> params) {
return {
"flutter://clueLevelOne":
"flutter://level_one_plan_detail":
RouterCenterImpl().findClueRouter().getLevelOnePage(params),
"flutter://clueProjectDetails":
"flutter://level_one_plan_instruction":
RouterCenterImpl().findClueRouter().getProjectDetailsPage(params),
"flutter://cluePlansCompareFeed":
"flutter://level_one_plan_compare":
RouterCenterImpl().findClueRouter().getPlansCompareFeed(params),
"flutter://plan_home": RouterCenterImpl().findClueRouter().getPlanPage(),
"flutter://favor_plan":
RouterCenterImpl().findClueRouter().getTopPage(params),
"flutter://hot_plan":
RouterCenterImpl().findClueRouter().getTopPage(params),
'level_one_plan_compare_detail':
RouterCenterImpl().findClueRouter().getPlanCompareDetailPage(params),
'level_two_plan_compare_deatil':
RouterCenterImpl().findClueRouter().getPlanCompareDetailPage(params),
};
}
}
......@@ -34,7 +34,7 @@ class TestState extends BaseState<TestPage> {
}));
list.add(listItem("二级列表页", () {
JumpUtil.jumpToPageRight(
context, RouterCenterImpl().findClueRouter().getLevelTwoPage());
context, RouterCenterImpl().findClueRouter().getLevelTwoPage({}));
}));
list.add(listItem("方案页面", () {
JumpUtil.jumpToPageRight(
......@@ -42,19 +42,25 @@ class TestState extends BaseState<TestPage> {
}));
list.add(listItem("对比详情页", () {
JumpUtil.jumpToPageRight(context,
RouterCenterImpl().findClueRouter().getPlanCompareDetailPage());
RouterCenterImpl().findClueRouter().getPlanCompareDetailPage({}));
}));
list.add(listItem("项目说明", () {
JumpUtil.jumpToPageRight(
context, RouterCenterImpl().findClueRouter().getProjectDetailsPage({"planId":1}));
context,
RouterCenterImpl()
.findClueRouter()
.getProjectDetailsPage({"planId": 1}));
}));
list.add(listItem("方案对比", () {
JumpUtil.jumpToPageRight(
context, RouterCenterImpl().findClueRouter().getPlansCompareFeed({"planId":1,"planType":1}));
context,
RouterCenterImpl()
.findClueRouter()
.getPlansCompareFeed({"planId": 1, "planType": 1}));
}));
list.add(listItem("榜单", () {
JumpUtil.jumpToPageRight(
context, RouterCenterImpl().findClueRouter().getTopPage());
JumpUtil.jumpToPageRight(context,
RouterCenterImpl().findClueRouter().getTopPage({"rank_type": "0"}));
}));
list.add(listItem("弹窗", () {
DiscussLowPricePopView.showPopView(context);
......
......@@ -144,11 +144,11 @@ Widget loadingItem({bool needBackground = false}) {
Widget netErrorItem() {}
Widget errorItem(double width, double height, VoidCallback retry,
{String errorText, String retryText,double paddingTop}) {
{String errorText, String retryText, double paddingTop}) {
return Container(
width: width,
height: height,
padding: EdgeInsets.only(top: paddingTop??0),
padding: EdgeInsets.only(top: paddingTop ?? 0),
alignment: Alignment.topCenter,
child: Container(
width: 180,
......@@ -377,46 +377,46 @@ Widget normalRefreshHeader() {
);
}
Widget emptyItem(double width, double height, {String detail,double paddingTop}) {
Widget emptyItem(double width, double height,
{String detail, double paddingTop}) {
return Container(
padding: EdgeInsets.only(top: paddingTop??0),
padding: EdgeInsets.only(top: paddingTop ?? 0),
width: width,
height: height,
color: Colors.white,
alignment: Alignment.topCenter,
child: Container(
width: 175,
height: 188,
margin: EdgeInsets.only(top: 62.5),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
width: 175,
height: 188,
child: Stack(
alignment: AlignmentDirectional.bottomCenter,
children: <Widget>[
Container(
width: 175,
height: 188,
child: Image.asset("assets/empty.png"),
),
Positioned(
bottom: 17,
child: baseText(detail ?? "此处太寂寥,转转别处吧", 15, Color(0xff666666)),
)
],
width: 175,
height: 188,
margin: EdgeInsets.only(top: 62.5),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
width: 175,
height: 188,
child: Stack(
alignment: AlignmentDirectional.bottomCenter,
children: <Widget>[
Container(
width: 175,
height: 188,
child: Image.asset("assets/empty.png"),
),
Positioned(
bottom: 17,
child: baseText(
detail ?? "此处太寂寥,转转别处吧", 15, Color(0xff666666)),
)
],
),
),
),
Container(
height:0,
color: Colors.white,
)
],
)
),
Container(
height: 0,
color: Colors.white,
)
],
)),
);
}
......@@ -453,7 +453,8 @@ Widget baseTabBarItem(String text,
);
}
Widget baseSliverAppBar(String url, {double height, double elevation}) {
Widget baseSliverAppBar(String url,
{double height, double elevation, bool needpic = true}) {
return SliverAppBar(
pinned: true,
centerTitle: true,
......@@ -461,10 +462,12 @@ Widget baseSliverAppBar(String url, {double height, double elevation}) {
expandedHeight: height ?? 200,
automaticallyImplyLeading: false,
flexibleSpace: FlexibleSpaceBar(
background: Image.network(
url ?? '',
fit: BoxFit.cover,
),
background: needpic
? Image.network(
url ?? '',
fit: BoxFit.cover,
)
: Container(),
),
);
}
......@@ -510,7 +513,8 @@ Widget baseSliverTitle(String text, double width, LiveData liveData) {
}
Widget baseStateView(double width, double height, LiveData<int> stateLive,
Widget home, VoidCallback retry,{double paddingTop}) {
Widget home, VoidCallback retry,
{double paddingTop}) {
return StreamBuilder(
stream: stateLive.stream,
initialData: stateLive.data ?? LOADING,
......@@ -518,9 +522,9 @@ Widget baseStateView(double width, double height, LiveData<int> stateLive,
if (data.data == LOADING) {
return loadingItem();
} else if (data.data == FAIL) {
return errorItem(width, height, retry,paddingTop: paddingTop);
return errorItem(width, height, retry, paddingTop: paddingTop);
} else if (data.data == EMPTY) {
return emptyItem(width, height,paddingTop: paddingTop);
return emptyItem(width, height, paddingTop: paddingTop);
}
return home;
},
......
......@@ -20,7 +20,7 @@ const String APP_HOST_RELEASE = "https://x6cgr5y5-gengmei.mock.coding.io";
//const String APP_HOST_DEBUG = "http://backend.paas-merchant.envs";
//const String APP_HOST_DEBUG = "http://doctor.paas-merchant.env";
const String APP_HOST_DEBUG = "https://x6cgr5y5-gengmei.mock.coding.io";
// const String APP_HOST_DEBUG = "http://backend.paas-merchant.env";
//const String APP_HOST_DEBUG = "http://backend.paas-merchant.env";
//const String APP_HOST_DEBUG = "http://janus.paas-merchant.env";
/**
......
......@@ -58,12 +58,26 @@ class MyApp extends State<MyAppWidget> {
void initState() {
super.initState();
FlutterBoost.singleton.registerPageBuilders({
'clueLevelOne': (pageName, params, _) {
return RouterCenterImpl().findClueRouter().getLevelOnePage(params);
},
'demoPage1': (pageName, params, _) {
return DemoPage1();
},
'plan_home': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getPlanPage(),
'level_one_plan_detail': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getLevelOnePage(params),
'level_two_plan_deatil': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getLevelTwoPage(params),
'level_one_plan_instruction': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getProjectDetailsPage(params),
'level_two_plan_instruction': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getProjectDetailsPage(params),
'level_one_plan_compare': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getPlansCompareFeed(params),
'level_one_plan_compare_detail': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getPlanCompareDetailPage(params),
'level_two_plan_compare_deatil': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getPlanCompareDetailPage(params),
'favor_plan': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getTopPage(params),
'hot_plan': (pageName, params, _) =>
RouterCenterImpl().findClueRouter().getTopPage(params),
});
FlutterBoost.singleton
.addBoostContainerLifeCycleObserver((state, settings) {
......
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