Commit 4814802c authored by 杜欣's avatar 杜欣

二级方案

parent 21f25c43
import 'package:flutter/material.dart';
class StickyTabBarDelegate extends SliverPersistentHeaderDelegate {
final Widget child;
StickyTabBarDelegate({@required this.child});
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
return this.child;
}
@override
double get maxExtent => 40;
@override
double get minExtent => 40;
@override
bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
return true;
}
}
......@@ -25,7 +25,7 @@ class LevelOneList extends StatefulWidget {
}
class LevelOneListState extends State<LevelOneList>
with AutomaticKeepAliveClientMixin{
with AutomaticKeepAliveClientMixin {
LevelOneListModel _model = LevelOneListModel();
RefreshController refreshController = RefreshController();
......@@ -83,7 +83,7 @@ class LevelOneListState extends State<LevelOneList>
return SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
if(index==_model.data.length){
if (index == _model.data.length) {
return Container(
height: 40,
color: Color(0xffF7F6FA),
......@@ -91,7 +91,7 @@ class LevelOneListState extends State<LevelOneList>
}
return LevelOneItem(_model.data[index]);
},
childCount: _model.data.length+1,
childCount: _model.data.length + 1,
),
);
},
......
......@@ -11,9 +11,9 @@ import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gm_flutter/ClueModel/page/common/StickyTabBarDelegate.dart';
import 'package:gm_flutter/ClueModel/page/levelOne/LevelOneList.dart';
import 'package:gm_flutter/ClueModel/page/levelOne/LevelOneModel.dart';
import 'package:gm_flutter/ClueModel/page/levelTwo/LevelTwoPage.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseState.dart';
import 'package:gm_flutter/commonModel/base/BaseUtil.dart';
......
......@@ -7,72 +7,50 @@ import 'package:flutter_common/commonModel/live/BaseModel.dart';
import 'package:flutter_common/commonModel/live/LiveData.dart';
import 'package:flutter_common/commonModel/toast/NativeToast.dart';
import 'package:gm_flutter/ClueModel/server/api/ClueApi.serv.dart';
import 'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanOverviewBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanOverViewBean.dart';
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:gm_flutter/commonModel/bean/Pair.dart';
import '../../../commonModel/bean/Pair.dart';
class LevelTwoModel extends BaseModel {
LiveData<Pair<int, String>> nameLive = LiveData();
LiveData<Pair<int, String>> imageUrlLive = LiveData();
LiveData<Pair<int, List<OverviewAttrsEntity>>> overviewAttrsLive = LiveData();
LiveData<Pair<int, List<ExplanationAttrsEntity>>> explanationAttrsLive =
LiveData();
LiveData<Pair<int, List<Tabs>>> tabsLive = LiveData();
class LevelOneModel extends BaseModel {
LiveData<int> stateLive = LiveData();
LiveData<Pair<int, List<Cards>>> cardsLive = LiveData();
LiveData<double> textLive = LiveData();
RxDispose rxDispose = RxDispose();
getPlanOverview(int plan_id) {
List<Tabs> tabsList = [];
int plan_id = 0;
PlanOverData planoverItem;
void init(VoidCallback callback) {
ClueApiImpl.getInstance()
.getPlanOverviewBean(DioUtil.getInstance().getDio(), plan_id)
.getPlanOverView(DioUtil.getInstance().getDio(), plan_id)
.listen((event) {
if (event.error == 0) {
planoverItem = event.data;
tabsList = event.data.tabs;
stateLive.notifyView(ENDLOADING);
nameLive.notifyView(Pair(ENDLOADING, event.data.name));
imageUrlLive
.notifyView(Pair(ENDLOADING, event.data.banner.imageUrl));
overviewAttrsLive
.notifyView(Pair(ENDLOADING, event.data.overviewAttrs));
explanationAttrsLive
.notifyView(Pair(ENDLOADING, event.data.explanationAttrs));
tabsLive.notifyView(Pair(ENDLOADING, event.data.tabs));
callback();
} else {
NativeToast.showNativeToast(event.message);
commonError();
stateLive.notifyView(FAIL);
}
})
.addToDispose(rxDispose)
.onError((err) {
commonError();
PrintUtil.printBug(err);
stateLive.notifyView(FAIL);
});
}
commonError() {
stateLive.notifyView(FAIL);
nameLive.notifyView(Pair(FAIL, null));
imageUrlLive.notifyView(Pair(FAIL, null));
overviewAttrsLive.notifyView(Pair(FAIL, null));
explanationAttrsLive.notifyView(Pair(FAIL, null));
tabsLive.notifyView(Pair(FAIL, null));
}
int currentIndex = 0;
@override
void dispose() {
nameLive.dispost();
imageUrlLive.dispost();
overviewAttrsLive.dispost();
explanationAttrsLive.dispost();
tabsLive.dispost();
stateLive.dispost();
rxDispose.dispose();
textLive.dispost();
}
void loadMore() {}
void selectTab(int index) {}
}
......@@ -25,30 +25,6 @@ class MechanismBox implements IBottomPicker {
}
Widget build(BuildContext context) {
return StreamBuilder(
stream: _model.stateLive.stream,
initialData: _model.stateLive.data ?? LOADING,
builder: (c, data) {
if (data.data == FAIL) {
return errorItem(MediaQuery.of(context).size.width,
MediaQuery.of(context).size.height, () {
_model.getQuestions(plan_id);
});
}
if (data.data == LOADING) {
return loadingItem();
}
return setupHome(context);
},
);
}
@override
void dispose() {
textController.dispose();
}
setupHome(context) {
MediaQueryData mq = MediaQuery.of(context);
double keyHeight = MediaQuery.of(context).viewInsets.bottom;
return ClipRRect(
......@@ -58,17 +34,41 @@ class MechanismBox implements IBottomPicker {
width: mq.size.width,
height: mq.size.height - 140,
color: Colors.white,
child: Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
title(mq),
mechanismList(mq, keyHeight),
bottomMessage()
],
child: StreamBuilder(
stream: _model.stateLive.stream,
initialData: _model.stateLive.data ?? LOADING,
builder: (c, data) {
if (data.data == FAIL) {
return errorItem(MediaQuery.of(context).size.width,
MediaQuery.of(context).size.height, () {
_model.getQuestions(plan_id);
});
}
if (data.data == LOADING) {
return loadingItem();
}
return setupHome(mq, keyHeight);
},
)),
);
}
@override
void dispose() {
textController.dispose();
}
setupHome(mq, keyHeight) {
return Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
title(mq),
mechanismList(mq, keyHeight),
bottomMessage()
],
);
}
// 弹窗标题
Widget title(mq) {
return Container(
......@@ -217,16 +217,14 @@ class MechanismBox implements IBottomPicker {
fontSize: 12),
)),
Expanded(
child: StreamBuilder<Pair<int, List<String>>>(
child: StreamBuilder<List<String>>(
stream: _model.questionsLive.stream,
initialData: _model.questionsLive.data ?? null,
builder: (c, e) {
print('dssdadsadas');
print(e.data.toString());
if (e.data == null) {
return Container();
}
List<String> questions = e.data.second;
List<String> questions = e.data;
return ListView.builder(
scrollDirection: Axis.horizontal, //横向滚动
itemBuilder: (c, index) {
......@@ -286,11 +284,10 @@ class MechanismBox implements IBottomPicker {
NativeToast.showNativeToast('text');
} else {
_model.sendMessage(doctor_ids, txt, plan_id);
dismissCall();
textController.text = '';
NativeToast.showNativeToast('消息已发送成功');
}
// dismissCall();
// textController.text = '';
// NativeToast.showNativeToast('消息已发送成功');
}
},
style: TextStyle(fontSize: 12),
......
......@@ -15,7 +15,7 @@ import 'package:gm_flutter/commonModel/util/PrintUtil.dart';
import 'package:gm_flutter/commonModel/bean/Pair.dart';
class MechanismModel extends BaseModel {
LiveData<Pair<int, List<String>>> questionsLive = LiveData();
LiveData<List<String>> questionsLive = LiveData();
LiveData<int> stateLive = LiveData();
LiveData messageLive = LiveData();
......@@ -27,17 +27,17 @@ class MechanismModel extends BaseModel {
.listen((event) {
if (event.error == 0) {
stateLive.notifyView(ENDLOADING);
questionsLive.notifyView(Pair(ENDLOADING, event.data.questions));
questionsLive.notifyView(event.data.questions);
} else {
stateLive.notifyView(FAIL);
questionsLive.notifyView(Pair(FAIL, null));
questionsLive.notifyView(null);
NativeToast.showNativeToast(event.message);
}
})
.addToDispose(rxDispose)
.onError((err) {
stateLive.notifyView(FAIL);
questionsLive.notifyView(Pair(FAIL, null));
questionsLive.notifyView(null);
PrintUtil.printBug(err);
});
}
......
......@@ -10,7 +10,7 @@ import 'package:flutter/cupertino.dart';
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'
as extend;
import 'package:flutter/material.dart';
import 'package:gm_flutter/ClueModel/page/levelTwo/LevelTwoPage.dart';
import 'package:gm_flutter/ClueModel/page/common/StickyTabBarDelegate.dart';
import 'package:gm_flutter/ClueModel/page/top/TopModel.dart';
import 'package:gm_flutter/ClueModel/util/PosUtil.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
......@@ -136,8 +136,8 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
List<Widget> list = [];
var d = MediaQueryData.fromWindow(window).padding.top;
for (int i = 0; i < _model.tabs.length; i++) {
list.add(extend.NestedScrollViewInnerScrollPositionKeyWidget(Key("Tab${i}"),
TopList(_model.tabs[i].id, kToolbarHeight + d)));
list.add(extend.NestedScrollViewInnerScrollPositionKeyWidget(
Key("Tab${i}"), TopList(_model.tabs[i].id, kToolbarHeight + d)));
}
return extend.NestedScrollView(
innerScrollPositionKeyBuilder: () {
......
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