Commit f2ed5c15 authored by 杜欣's avatar 杜欣

二级方案

parent 1cb532f5
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_common/commonModel/picker/base/BaseBottomPicker.dart'; import 'package:flutter_common/commonModel/picker/base/BaseBottomPicker.dart';
import 'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart'; import 'package:flutter_common/commonModel/toast/NativeToast.dart';
import 'package:gm_flutter/ClueModel/view/FiveStarView.dart'; import 'package:gm_flutter/ClueModel/view/FiveStarView.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart'; import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseUtil.dart';
import 'package:gm_flutter/ClueModel/page/mechanismBox/MechanismModel.dart'; import 'package:gm_flutter/ClueModel/page/mechanismBox/MechanismModel.dart';
class MechanismBox implements IBottomPicker { class MechanismBox implements IBottomPicker {
VoidCallback dismissCall; VoidCallback dismissCall;
TextEditingController textController = TextEditingController(); TextEditingController textController = TextEditingController();
MechanismModel _model = new MechanismModel(); MechanismModel _model = new MechanismModel();
List<int> doctor_ids = new List();
@required @required
final int plan_id; final int plan_id;
...@@ -186,7 +185,6 @@ class MechanismBox implements IBottomPicker { ...@@ -186,7 +185,6 @@ class MechanismBox implements IBottomPicker {
width: double.maxFinite, width: double.maxFinite,
margin: EdgeInsets.only(top: 12), margin: EdgeInsets.only(top: 12),
child: Row( child: Row(
mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.only(left: 15, right: 8), margin: EdgeInsets.only(left: 15, right: 8),
...@@ -198,40 +196,47 @@ class MechanismBox implements IBottomPicker { ...@@ -198,40 +196,47 @@ class MechanismBox implements IBottomPicker {
color: Color(0xff666666), color: Color(0xff666666),
fontSize: 12), fontSize: 12),
)), )),
StreamBuilder<ConsultQuestionsBean>( Expanded(
stream: _model.questionsLive.stream, child: StreamBuilder<List<String>>(
initialData: _model.questionsLive.data, stream: _model.questionsLive.stream,
builder: (c, data) { initialData: _model.questionsLive.data ?? null,
List<String> questions = data.data.data.questions; builder: (c, e) {
return ListView.builder( if (e.data == null) {
scrollDirection: Axis.horizontal, //横向滚动 return Container();
itemBuilder: (c, index) { }
return GestureDetector( List<String> questions = e.data;
onTap: () { return ListView.builder(
textController.text += questions[index]; scrollDirection: Axis.horizontal, //横向滚动
}, itemBuilder: (c, index) {
child: Container( return GestureDetector(
height: 25, onTap: () {
margin: EdgeInsets.only(right: 12), textController.text += questions[index];
padding: EdgeInsets.only(left: 8, right: 8), },
decoration: BoxDecoration( child: Container(
border: Border.all( height: 25,
color: Color(0xffE5E5E5), width: 0.5), margin: EdgeInsets.only(right: 12),
color: Color(0xffffffff), padding: EdgeInsets.only(left: 8, right: 8),
borderRadius: BorderRadius.circular(20)), decoration: BoxDecoration(
child: Text( border: Border.all(
questions[index], color: Color(0xffE5E5E5),
style: TextStyle( width: 0.5),
fontSize: 12, color: Color(0xffffffff),
color: Color(0xff666666), borderRadius:
height: 1.8), BorderRadius.circular(20)),
child: Text(
questions[index],
style: TextStyle(
fontSize: 12,
color: Color(0xff666666),
height: 1.8),
),
), ),
), );
); },
}, itemCount: questions.length,
itemCount: questions.length, );
); }),
}), )
], ],
)), )),
Container( Container(
...@@ -242,18 +247,39 @@ class MechanismBox implements IBottomPicker { ...@@ -242,18 +247,39 @@ class MechanismBox implements IBottomPicker {
border: Border.all(color: Color(0xffE5E5E5), width: 0.5), border: Border.all(color: Color(0xffE5E5E5), width: 0.5),
color: Color(0xffffffff), color: Color(0xffffffff),
borderRadius: BorderRadius.circular(35)), borderRadius: BorderRadius.circular(35)),
child: TextField( child: StreamBuilder(
controller: textController, stream: _model.messageLive.stream,
keyboardType: TextInputType.text, initialData: _model.messageLive.data ?? null,
textInputAction: TextInputAction.send, builder: (context, snapshot) {
onSubmitted: (txt) {}, return TextField(
style: TextStyle(fontSize: 12), controller: textController,
maxLines: 1, keyboardType: TextInputType.text,
decoration: InputDecoration( textInputAction: TextInputAction.send,
contentPadding: EdgeInsets.only( onSubmitted: (txt) {
left: 16, top: 0, bottom: 12, right: 16), if (!(doctor_ids.length > 3 ||
hintText: '请输入您想了解的问题', doctor_ids.length < 1)) {
border: InputBorder.none))) NativeToast.showNativeToast('请选择1-3个机构咨询');
} else {
if (txt == '') {
NativeToast.showNativeToast('text');
} else {
_model.sendMessage(doctor_ids, txt, plan_id);
}
// dismissCall();
// textController.text = '';
// NativeToast.showNativeToast('消息已发送成功');
}
},
style: TextStyle(fontSize: 12),
maxLines: 1,
decoration: InputDecoration(
contentPadding: EdgeInsets.only(
left: 16, top: 0, bottom: 12, right: 16),
hintText: '请输入您想了解的问题',
border: InputBorder.none));
},
))
], ],
)); ));
} }
......
...@@ -2,27 +2,56 @@ ...@@ -2,27 +2,56 @@
* @author lsy * @author lsy
* @date 2020/6/29 * @date 2020/6/29
**/ **/
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_common/commonModel/live/BaseModel.dart'; import 'package:flutter_common/commonModel/live/BaseModel.dart';
import 'package:flutter_common/commonModel/live/LiveData.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/api/ClueApi.serv.dart';
import 'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart';
import 'package:gm_flutter/commonModel/net/DioUtil.dart'; import 'package:gm_flutter/commonModel/net/DioUtil.dart';
import 'package:gm_flutter/commonModel/rx/RxDispose.dart'; import 'package:gm_flutter/commonModel/rx/RxDispose.dart';
import 'package:gm_flutter/commonModel/util/PrintUtil.dart'; import 'package:gm_flutter/commonModel/util/PrintUtil.dart';
import '../../../commonModel/net/DioUtil.dart';
import '../../../commonModel/util/PrintUtil.dart';
import '../../server/api/ClueApi.serv.dart';
class MechanismModel extends BaseModel { class MechanismModel extends BaseModel {
LiveData<ConsultQuestionsBean> questionsLive = LiveData(); LiveData<List<String>> questionsLive = LiveData();
LiveData messageLive = LiveData();
RxDispose rxDispose = RxDispose(); RxDispose rxDispose = RxDispose();
getQuestions(int plan_id) { getQuestions(int plan_id) {
ClueApiImpl.getInstance() ClueApiImpl.getInstance()
.getConsultQuestions(DioUtil.getInstance().getDio(), plan_id) .getConsultQuestions(DioUtil.getInstance().getDio(), plan_id)
.listen((event) { .listen((event) {
print('dadsadsa'); if (event.error == 0) {
print(event.data.questions.toList()); questionsLive.notifyView(event.data.questions);
print('dadsadsa'); } else {
questionsLive.data = event; NativeToast.showNativeToast(event.message);
//TODO
}
})
.addToDispose(rxDispose)
.onError((err) {
PrintUtil.printBug(err);
});
}
sendMessage(List<int> doctor_ids, String question, int plan_id) {
ClueApiImpl.getInstance()
.sendMessage(DioUtil.getInstance().getDio(), doctor_ids,
question, plan_id)
.listen((event) {
print('11111');
if (event.error == 0) {
print('kljfjkfdhkhkdfsklkds');
messageLive.notifyView(event.data.success);
} else {
NativeToast.showNativeToast(event.message);
}
}) })
.addToDispose(rxDispose) .addToDispose(rxDispose)
.onError((err) { .onError((err) {
...@@ -33,5 +62,6 @@ class MechanismModel extends BaseModel { ...@@ -33,5 +62,6 @@ class MechanismModel extends BaseModel {
@override @override
void dispose() { void dispose() {
questionsLive.dispost(); questionsLive.dispost();
rxDispose.dispose();
} }
} }
...@@ -9,12 +9,12 @@ import 'package:flutter_common/Annotations/anno/ServiceCenter.dart'; ...@@ -9,12 +9,12 @@ import 'package:flutter_common/Annotations/anno/ServiceCenter.dart';
import 'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'; import 'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanCompareDetail.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanCompareDetail.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanConsultBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanOverviewBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanOverviewBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart';
import 'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart'; import 'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart';
import 'package:gm_flutter/commonModel/net/Responce/SimpleResponce.dart';
@ServiceCenter() @ServiceCenter()
abstract class ClueApi { abstract class ClueApi {
...@@ -53,6 +53,6 @@ abstract class ClueApi { ...@@ -53,6 +53,6 @@ abstract class ClueApi {
ConsultQuestionsBean getConsultQuestions(@Query("plan_id") int plan_id); ConsultQuestionsBean getConsultQuestions(@Query("plan_id") int plan_id);
@Post("/api/janus/plans/plan_consult") @Post("/api/janus/plans/plan_consult")
SimpleResponce sendMessage(@Query("doctor_ids") List<int> doctor_ids, PlanConsultBean sendMessage(@Query("doctor_ids") List<int> doctor_ids,
@Query("question") String question, @Query("plan_id") int plan_id); @Query("question") String question, @Query("plan_id") int plan_id);
} }
...@@ -22,7 +22,7 @@ import 'package:gm_flutter/ClueModel/server/entity/PlanBean.dart'; ...@@ -22,7 +22,7 @@ import 'package:gm_flutter/ClueModel/server/entity/PlanBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanOverviewBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanOverviewBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart';
import 'package:gm_flutter/commonModel/net/Responce/SimpleResponce.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanConsultBean.dart';
const bool inProduction = const bool.fromEnvironment("dart.vm.product"); const bool inProduction = const bool.fromEnvironment("dart.vm.product");
...@@ -171,7 +171,7 @@ class ClueApiImpl { ...@@ -171,7 +171,7 @@ class ClueApiImpl {
}); });
} }
Stream<SimpleResponce> sendMessage( Stream<PlanConsultBean> sendMessage(
Dio _dio, List<int> doctor_ids, String question, int plan_id) { Dio _dio, List<int> doctor_ids, String question, int plan_id) {
return Stream.fromFuture(post(_dio, '/api/janus/plans/plan_consult', data: { return Stream.fromFuture(post(_dio, '/api/janus/plans/plan_consult', data: {
'doctor_ids': doctor_ids, 'doctor_ids': doctor_ids,
...@@ -181,7 +181,7 @@ class ClueApiImpl { ...@@ -181,7 +181,7 @@ class ClueApiImpl {
if (value != null && if (value != null &&
(value.statusCode >= 200 && value.statusCode < 300)) { (value.statusCode >= 200 && value.statusCode < 300)) {
return Stream.fromFuture( return Stream.fromFuture(
compute(parseSimpleResponce, value.toString())); compute(parsePlanConsultBean, value.toString()));
} else { } else {
throw Exception("--未知网络错误--"); throw Exception("--未知网络错误--");
} }
...@@ -357,6 +357,6 @@ ConsultQuestionsBean parseConsultQuestionsBean(String value) { ...@@ -357,6 +357,6 @@ ConsultQuestionsBean parseConsultQuestionsBean(String value) {
return ConsultQuestionsBean.fromJson(json.decode(value)); return ConsultQuestionsBean.fromJson(json.decode(value));
} }
SimpleResponce parseSimpleResponce(String value) { PlanConsultBean parsePlanConsultBean(String value) {
return SimpleResponce.fromJson(json.decode(value)); return PlanConsultBean.fromJson(json.decode(value));
} }
class PlanConsultBean {
int error;
String message;
Null extra;
Null errorExtra;
UserType userType;
Data data;
PlanConsultBean(
{this.error,
this.message,
this.extra,
this.errorExtra,
this.userType,
this.data});
PlanConsultBean.fromJson(Map<String, dynamic> json) {
error = json['error'];
message = json['message'];
extra = json['extra'];
errorExtra = json['error_extra'];
userType = json['user_type'] != null
? new UserType.fromJson(json['user_type'])
: null;
data = json['data'] != null ? new Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['error'] = this.error;
data['message'] = this.message;
data['extra'] = this.extra;
data['error_extra'] = this.errorExtra;
if (this.userType != null) {
data['user_type'] = this.userType.toJson();
}
if (this.data != null) {
data['data'] = this.data.toJson();
}
return data;
}
}
class UserType {
UserType();
UserType.fromJson(Map<String, dynamic> json) {}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
return data;
}
}
class Data {
bool success;
Data({this.success});
Data.fromJson(Map<String, dynamic> json) {
success = json['success'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['success'] = this.success;
return data;
}
}
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