Commit b49cdade authored by 朱翠翠's avatar 朱翠翠

逻辑添加

parent c8d34ce1
class CallBackCompareItem {
checkedItem(int id) {}
}
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_common/commonModel/toast/NativeToast.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseState.dart';
class PlansCompareFeedItemView extends StatelessWidget { import 'CallBackCompareItem.dart';
class PlansCompareFeedItemView extends StatefulWidget {
Plans plan; Plans plan;
CallBackCompareItem compareItem;
Set<int> _setCompare;
PlansCompareFeedItemView(this.plan); PlansCompareFeedItemView(this.plan, this.compareItem, this._setCompare);
@override @override
Widget build(BuildContext context) { State<StatefulWidget> createState() => _PlansCompareFeedItemViewState();
return Container(child: getItem()); }
class _PlansCompareFeedItemViewState
extends BaseState<PlansCompareFeedItemView> {
ImageIcon _checked = ImageIcon(AssetImage("assets/icon_compare_select.png"));
ImageIcon _unchecked =
ImageIcon(AssetImage("assets/icon_compare_unselect.png"));
ImageIcon _icon = ImageIcon(AssetImage("assets/icon_compare_unselect.png"));
@override
Widget buildItem(BuildContext context) {
return Container(
margin: EdgeInsets.only(left: 15, right: 15), child: getItem());
} }
getItem() { getItem() {
if (plan.planType == 1) { if (widget.plan.planType == 2) {
return getFirstLevelItem(); return getFirstLevelItem();
} else { } else {
return getSecondLevelItem(); return getSecondLevelItem();
...@@ -25,19 +45,19 @@ class PlansCompareFeedItemView extends StatelessWidget { ...@@ -25,19 +45,19 @@ class PlansCompareFeedItemView extends StatelessWidget {
width: double.maxFinite, width: double.maxFinite,
height: 90, height: 90,
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
padding: EdgeInsets.only(left: 15, right: 15, top: 20, bottom: 20), padding: EdgeInsets.only(top: 20, bottom: 20),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
IconButton( IconButton(
icon: ImageIcon(AssetImage("assets/icon_compare_select.png")), icon: _icon,
onPressed: () => print('FlatButton pressed'), onPressed: () => onClickCheckBox(_icon),
), ),
Container( Container(
margin: EdgeInsets.only(left: 15, right: 15), margin: EdgeInsets.only(left: 15, right: 15),
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.circular(2.0), borderRadius: BorderRadius.circular(2.0),
child: Image.network( child: Image.network(
plan.projectImage, widget.plan.projectImage,
width: 50, width: 50,
height: 50, height: 50,
fit: BoxFit.fill, fit: BoxFit.fill,
...@@ -53,42 +73,20 @@ class PlansCompareFeedItemView extends StatelessWidget { ...@@ -53,42 +73,20 @@ class PlansCompareFeedItemView extends StatelessWidget {
margin: EdgeInsets.only(top: 2, bottom: 5), margin: EdgeInsets.only(top: 2, bottom: 5),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
Text( baseText(widget.plan.name, 14, Color(0xFF282828),
plan.name, bold: true),
style: TextStyle( baseText(" 好评率 ", 11, Color(0xFF282828)),
fontWeight: FontWeight.bold, baseText(widget.plan.positiveRate, 14, Color(0xFFFF5963),
fontSize: 14, bold: true),
color: Color(0xFF282828)),
maxLines: 1,
),
Text(
"好评率 ",
style:
TextStyle(fontSize: 11, color: Color(0xFF282828)),
maxLines: 1,
),
Text(
plan.positiveRate,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 14,
color: Color(0xFFFF5963)),
maxLines: 1,
),
], ],
), ),
), ),
Row( Row(
children: <Widget>[ children: <Widget>[
Text( baseText('¥${widget.plan.minPrice}-${widget.plan.maxPrice}',
'¥${plan.minPrice}-${plan.maxPrice}', 13, Color(0xFFFF5963)),
style: TextStyle(fontSize: 13, color: Color(0xFFFF5963)), baseText(" 销量${widget.plan.salesCount}", 11,
), Color(0xFF282828))
Text(
"销量${plan.salesCount}",
style: TextStyle(fontSize: 11, color: Color(0xFF282828)),
maxLines: 1,
)
], ],
) )
], ],
...@@ -101,62 +99,55 @@ class PlansCompareFeedItemView extends StatelessWidget { ...@@ -101,62 +99,55 @@ class PlansCompareFeedItemView extends StatelessWidget {
getSecondLevelItem() { getSecondLevelItem() {
return Container( return Container(
width: double.maxFinite,
height: 77, height: 77,
alignment: Alignment.centerLeft,
margin: EdgeInsets.only(left: 15, right: 15),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.only(right: 15.0),
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
width: 17,
height: 17,
child: IconButton( child: IconButton(
icon: ImageIcon(AssetImage("assets/icon_compare_select.png")), icon: _icon,
onPressed: () => print('FlatButton pressed'), onPressed: () => onClickCheckBox(_icon),
), ),
), ),
Container( Column(
margin: EdgeInsets.only(left: 15.0), crossAxisAlignment: CrossAxisAlignment.start,
height: 77, children: <Widget>[
alignment: Alignment.centerLeft, Container(
child: Column( margin: EdgeInsets.only(top: 13.0, bottom: 12),
crossAxisAlignment: CrossAxisAlignment.start, child: baseText(widget.plan.name, 14, Color(0xFF282828),
children: <Widget>[ bold: true),
Container( ),
margin: EdgeInsets.only(top: 13.0, bottom: 12), Row(
child: Text( children: <Widget>[
plan.name, baseText('¥${widget.plan.minPrice}-${widget.plan.maxPrice}',
style: TextStyle( 13, Color(0xFFFF5963)),
fontWeight: FontWeight.bold, Container(
fontSize: 14, width: 160,
color: Color(0xFF282828)),
maxLines: 1,
),
),
Row(
children: <Widget>[
Text(
'¥${plan.minPrice}-${plan.maxPrice}',
style: TextStyle(fontSize: 13, color: Color(0xFFFF5963)),
),
Container(
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: Text( child: baseText("指导价:¥${widget.plan.guidePrice}", 11,
"指导价:¥${plan.guidePrice}", Color(0xFF282828))),
style: ],
TextStyle(fontSize: 11, color: Color(0xFF282828)), ),
maxLines: 1, ],
),
),
],
)
],
),
) )
], ],
), ),
); );
} }
onClickCheckBox(ImageIcon icon) {
if (icon == _checked) {
_icon = _unchecked;
} else {
if (widget._setCompare.length == 2) {
NativeToast.showNativeToast("不许再选了两个够了!");
return;
}
_icon = _checked;
}
setState(() {
widget.compareItem.checkedItem(widget.plan.planId);
});
}
} }
...@@ -10,33 +10,37 @@ import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'; ...@@ -10,33 +10,37 @@ import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart'; import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseState.dart'; import 'package:gm_flutter/commonModel/base/BaseState.dart';
import 'CallBackCompareItem.dart';
import 'PlansCompareFeedItemView.dart'; import 'PlansCompareFeedItemView.dart';
class PlansCompareFeedPage extends StatefulWidget { class PlansCompareFeedPage extends StatefulWidget {
@override @override
State<StatefulWidget> createState() => PlansCompareFeedState(); State<StatefulWidget> createState() => _PlansCompareFeedState();
} }
class PlansCompareFeedState extends BaseState<PlansCompareFeedPage> { class _PlansCompareFeedState extends BaseState<PlansCompareFeedPage>
PlansCompareFeedModel _model = new PlansCompareFeedModel(); implements CallBackCompareItem {
PlansCompareFeedModel _model;
Color _compareColor;
Set<int> _setCompare;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_model = new PlansCompareFeedModel();
_model.init(); _model.init();
_compareColor = Color(0xFFCCCCCC);
_setCompare = Set();
} }
@override @override
void dispose() { void dispose() {
_model.dispose();
super.dispose(); super.dispose();
_model.dispose();
} }
@override @override
Widget buildItem(BuildContext context) {} Widget buildItem(BuildContext context) {
@override
Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: baseAppBar( appBar: baseAppBar(
title: "方案对比", title: "方案对比",
...@@ -50,31 +54,6 @@ class PlansCompareFeedState extends BaseState<PlansCompareFeedPage> { ...@@ -50,31 +54,6 @@ class PlansCompareFeedState extends BaseState<PlansCompareFeedPage> {
); );
} }
getList(List<Plans> plans) {
return Stack(alignment: Alignment.bottomCenter, //指定未定位或部分定位widget的对齐方式
children: <Widget>[
ListView.builder(
itemCount: plans.length,
itemBuilder: (BuildContext context, int position) {
return PlansCompareFeedItemView(plans[position]);
}),
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {},
child: Container(
margin:
EdgeInsets.only(left: 15, right: 15, top: 7.5, bottom: 7.5),
width: double.maxFinite,
height: 40,
decoration: BoxDecoration(
color: Color(0xff51CDC7),
borderRadius: BorderRadius.circular(20)),
alignment: Alignment.center,
child: baseText("对比", 14, Colors.white, bold: true),
))
]);
}
getBody() { getBody() {
return StreamBuilder( return StreamBuilder(
stream: _model.liveData.stream, stream: _model.liveData.stream,
...@@ -96,4 +75,49 @@ class PlansCompareFeedState extends BaseState<PlansCompareFeedPage> { ...@@ -96,4 +75,49 @@ class PlansCompareFeedState extends BaseState<PlansCompareFeedPage> {
}, },
); );
} }
getList(List<Plans> plans) {
return Stack(alignment: Alignment.bottomCenter, children: <Widget>[
ListView.builder(
itemCount: plans.length,
itemBuilder: (BuildContext context, int position) {
return PlansCompareFeedItemView(plans[position], this, _setCompare);
}),
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => onClickCompare(),
child: Container(
margin: EdgeInsets.only(left: 15, right: 15, top: 7.5, bottom: 7.5),
width: double.maxFinite,
height: 40,
decoration: BoxDecoration(
color: _compareColor, borderRadius: BorderRadius.circular(20)),
alignment: Alignment.center,
child: baseText("对比", 14, Colors.white, bold: true),
))
]);
}
onClickCompare() {
if (_compareColor == Color(0xFFCCCCCC)) return;
setState(() {
print("onClickCompare=====_compareColor$_compareColor");
});
}
@override
checkedItem(int id) {
if (_setCompare.contains(id)) {
_setCompare.remove(id);
} else {
_setCompare.add(id);
}
setState(() {
if (_setCompare.length == 2) {
_compareColor = Color(0xff51CDC7);
} else {
_compareColor = Color(0xFFCCCCCC);
}
});
}
} }
...@@ -6,52 +6,48 @@ ...@@ -6,52 +6,48 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart'; import 'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
class ProjectDetailsItemView extends StatelessWidget { class ProjectDetailsItemView extends StatelessWidget {
Groups listData; Groups listData;
List<Widget> listAttrs = [];
ProjectDetailsItemView(this.listData); ProjectDetailsItemView(this.listData) {
init();
}
@override init() {
Widget build(BuildContext context) {
List<Widget> tiles = [];
for (var item in listData.attrs) { for (var item in listData.attrs) {
tiles.add(getItem(item)); listAttrs.add(getAttrItem(item));
} }
var column = Column( }
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[ children: <Widget>[
Container( Container(
padding: EdgeInsets.only(left: 15.0), padding: EdgeInsets.only(left: 15.0),
margin: EdgeInsets.only(bottom: 16.0), margin: EdgeInsets.only(bottom: 16.0),
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
width: double.maxFinite, height: 55,
height: 55, decoration: BoxDecoration(
decoration: BoxDecoration( image: DecorationImage(
image: DecorationImage( image: AssetImage("assets/bg_project_detail_item.png"),
image: AssetImage("assets/bg_project_detail_item.png"), fit: BoxFit.cover)),
fit: BoxFit.cover)), child: baseText(listData.name, 15, Colors.black, bold: true)),
child: Text(
listData.name,
style: TextStyle(
fontWeight: FontWeight.bold,
color: Color(0xFF000000),
fontSize: 15.0,
),
),
),
Column( Column(
children: tiles, children: listAttrs,
),
SizedBox(
height: 5,
) )
], ],
); );
return Container(
margin: EdgeInsets.only(bottom: 5),
child: column,
);
} }
getItem(Attrs attrs) { getAttrItem(Attrs attrs) {
var row = Container( return Container(
width: double.maxFinite, width: double.maxFinite,
margin: EdgeInsets.only(bottom: 25, left: 15, right: 15), margin: EdgeInsets.only(bottom: 25, left: 15, right: 15),
child: Row( child: Row(
...@@ -60,29 +56,13 @@ class ProjectDetailsItemView extends StatelessWidget { ...@@ -60,29 +56,13 @@ class ProjectDetailsItemView extends StatelessWidget {
margin: EdgeInsets.only(right: 25.0), margin: EdgeInsets.only(right: 25.0),
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
width: 78, width: 78,
child: Text( child: baseText(attrs.attrName, 13, Color(0xFF999999)),
attrs.attrName,
style: TextStyle(
color: Color(0xFF999999),
fontSize: 13.0,
),
),
), ),
Container( Container(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Text( child: baseText(attrs.attrValue, 14, Color(0xFF282828))),
attrs.attrValue,
style: TextStyle(
color: Color(0xFF282828),
fontSize: 14.0,
),
),
),
], ],
), ),
); );
return Container(
child: row,
);
} }
} }
...@@ -14,15 +14,16 @@ import '../../server/entity/ProjectDetailsItem.dart'; ...@@ -14,15 +14,16 @@ import '../../server/entity/ProjectDetailsItem.dart';
class ProjectDetailsPage extends StatefulWidget { class ProjectDetailsPage extends StatefulWidget {
@override @override
State<StatefulWidget> createState() => ProjectDetailsState(); State<StatefulWidget> createState() => _ProjectDetailsState();
} }
class ProjectDetailsState extends BaseState<ProjectDetailsPage> { class _ProjectDetailsState extends BaseState<ProjectDetailsPage> {
ProjectDetailsModel _model = new ProjectDetailsModel(); ProjectDetailsModel _model;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_model = new ProjectDetailsModel();
_model.init(); _model.init();
} }
...@@ -33,10 +34,7 @@ class ProjectDetailsState extends BaseState<ProjectDetailsPage> { ...@@ -33,10 +34,7 @@ class ProjectDetailsState extends BaseState<ProjectDetailsPage> {
} }
@override @override
Widget buildItem(BuildContext context) {} Widget buildItem(BuildContext context) {
@override
Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: baseAppBar( appBar: baseAppBar(
title: "项目说明", title: "项目说明",
......
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