Commit b90a1518bad80adb31be3f058759242e5f0d6021

Authored by liangchengyou
1 parent e3c2820c

feat:练习接口逻辑完成

ios/Runner/XSMessageMehtodChannel.swift
@@ -21,16 +21,18 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate { @@ -21,16 +21,18 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate {
21 21
22 //配置评测信息 22 //配置评测信息
23 func setEvaluateConfig(dict:Dictionary<String, Any>) { 23 func setEvaluateConfig(dict:Dictionary<String, Any>) {
24 - let appKey = dict["appKey"] as? String  
25 - let secretKey = dict["secretKey"] as? String  
26 - let userId = dict.keys.contains("userId") ? dict["userId"] as! String:""  
27 - let frontTime = dict["frontTime"] as? TimeInterval  
28 - let backTime = dict["frontTime"] as? TimeInterval 24 + let appKey = dict["appKey"] as? String ?? ""
  25 + let secretKey = dict["secretKey"] as? String ?? ""
  26 + let userId = dict["userId"] as? String ?? "guest"
  27 + let frontTime = dict["frontTime"] as? String ?? "3"
  28 + let backTime = dict["frontTime"] as? String ?? "3"
29 let config = SSOralEvaluatingManagerConfig.init() 29 let config = SSOralEvaluatingManagerConfig.init()
  30 + config.vad = true
  31 + config.isOutputLog = false
30 config.appKey = appKey //"a418" 32 config.appKey = appKey //"a418"
31 config.secretKey = secretKey //"1a16f31f2611bf32fb7b3fc38f5b2c81"' 33 config.secretKey = secretKey //"1a16f31f2611bf32fb7b3fc38f5b2c81"'
32 - config.frontTime = frontTime ?? 3  
33 - config.backTime = backTime ?? 3 34 + config.frontTime = Double(frontTime)!
  35 + config.backTime = Double(backTime)!
34 SSOralEvaluatingManager.register(config) 36 SSOralEvaluatingManager.register(config)
35 SSOralEvaluatingManager.share().register(.line, userId: userId) 37 SSOralEvaluatingManager.share().register(.line, userId: userId)
36 SSOralEvaluatingManager.share().delegate = self 38 SSOralEvaluatingManager.share().delegate = self
@@ -38,12 +40,12 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate { @@ -38,12 +40,12 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate {
38 40
39 //开始评测 41 //开始评测
40 func evaluateVioce(dict:Dictionary<String, Any>) { 42 func evaluateVioce(dict:Dictionary<String, Any>) {
41 - let text = dict["word"] as! String  
42 - let type = dict["type"] as! Int  
43 - let userId = dict["userId"] as! String 43 + let text = dict["word"] as? String ?? ""
  44 + let type = dict["type"] as? String ?? "0"
  45 + let userId = dict["userId"] as? String ?? "guest"
44 let config = SSOralEvaluatingConfig() 46 let config = SSOralEvaluatingConfig()
45 config.oralContent = text 47 config.oralContent = text
46 - if (type == 0) { 48 + if (type == "0") {
47 config.oralType = .word 49 config.oralType = .word
48 } else { 50 } else {
49 config.oralType = .sentence 51 config.oralType = .sentence
@@ -79,7 +81,7 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate { @@ -79,7 +81,7 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate {
79 */ 81 */
80 func oralEvaluatingDidStart() { 82 func oralEvaluatingDidStart() {
81 print("评测开始") 83 print("评测开始")
82 - messageChannel!.invokeMethod("voiceStart", arguments: nil) 84 +// messageChannel!.invokeMethod("voiceStart", arguments: nil)
83 } 85 }
84 86
85 /** 87 /**
@@ -87,7 +89,7 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate { @@ -87,7 +89,7 @@ class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate {
87 */ 89 */
88 func oralEvaluatingDidStop() { 90 func oralEvaluatingDidStop() {
89 print("评测结束") 91 print("评测结束")
90 - messageChannel!.invokeMethod("voiceEnd",arguments: nil) 92 +// messageChannel!.invokeMethod("voiceEnd",arguments: nil)
91 } 93 }
92 94
93 /** 95 /**
lib/pages/home/home_page.dart
@@ -37,7 +37,8 @@ class _HomePageView extends StatelessWidget { @@ -37,7 +37,8 @@ class _HomePageView extends StatelessWidget {
37 } else if (type == HeaderActionType.shop) { 37 } else if (type == HeaderActionType.shop) {
38 Navigator.of(AppRouter.context).pushNamed(AppRouteName.shop); 38 Navigator.of(AppRouter.context).pushNamed(AppRouteName.shop);
39 } else if (type == HeaderActionType.user) { 39 } else if (type == HeaderActionType.user) {
40 - Navigator.of(AppRouter.context).pushNamed(AppRouteName.user); 40 + // Navigator.of(AppRouter.context).pushNamed(AppRouteName.user);
  41 + Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicPic);
41 } else { 42 } else {
42 // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicPic); 43 // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicPic);
43 } 44 }
lib/pages/practice/bloc/topic_picture_bloc.dart
@@ -50,17 +50,38 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; { @@ -50,17 +50,38 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; {
50 //音频播放器 50 //音频播放器
51 audioPlayer = AudioPlayer(); 51 audioPlayer = AudioPlayer();
52 audioPlayer.onPlayerStateChanged.listen((event) { 52 audioPlayer.onPlayerStateChanged.listen((event) {
53 - if (event == PlayerState.stopped) { 53 + if (event == PlayerState.completed) {
  54 + if (kDebugMode) {
  55 + print('播放完成');
54 56
55 - } 57 + }}
56 }); 58 });
57 59
58 60
59 methodChannel = const MethodChannel('wow_english/sing_sound_method_channely'); 61 methodChannel = const MethodChannel('wow_english/sing_sound_method_channely');
60 - methodChannel.invokeMethod('initVoiceSdk',{});  
61 methodChannel.setMethodCallHandler((call) async { 62 methodChannel.setMethodCallHandler((call) async {
62 - if (call.method == 'voiceResult') {//评测结 63 + if (call.method == 'voiceResult') {//评测结
63 add(XSVoiceResultEvent(call.arguments)); 64 add(XSVoiceResultEvent(call.arguments));
  65 + return;
  66 + }
  67 +
  68 + if (call.method == 'voiceStart') {//评测开始
  69 + if (kDebugMode) {
  70 + print('评测开始');
  71 + }
  72 + return;
  73 + }
  74 +
  75 + if (call.method == 'voiceEnd') {//评测结束
  76 + if (kDebugMode) {
  77 + print('评测结束');
  78 + }
  79 + return;
  80 + }
  81 +
  82 + if (call.method == 'voiceFail') {//评测失败
  83 + EasyLoading.showToast('评测失败');
  84 + return;
64 } 85 }
65 }); 86 });
66 }); 87 });
@@ -96,7 +117,8 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; { @@ -96,7 +117,8 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; {
96 void _pageControllerChange(CurrentPageIndexChangeEvent event,Emitter<TopicPictureState> emitter) async { 117 void _pageControllerChange(CurrentPageIndexChangeEvent event,Emitter<TopicPictureState> emitter) async {
97 _currentPage = event.pageIndex; 118 _currentPage = event.pageIndex;
98 final topics = _entity?.topics?[_currentPage]; 119 final topics = _entity?.topics?[_currentPage];
99 - if (topics?.type == 1 || topics?.type == 2) { 120 + if (topics?.type == 1 || topics?.type == 2 || topics?.type == 5) {
  121 + audioPlayer.stop();
100 if (topics?.audioUrl != null) { 122 if (topics?.audioUrl != null) {
101 final urlStr = topics?.audioUrl??''; 123 final urlStr = topics?.audioUrl??'';
102 if (urlStr.isNotEmpty) { 124 if (urlStr.isNotEmpty) {
@@ -106,6 +128,7 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; { @@ -106,6 +128,7 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; {
106 } else { 128 } else {
107 audioPlayer.stop(); 129 audioPlayer.stop();
108 } 130 }
  131 + _selectItem = -1;
109 emitter(CurrentPageIndexState()); 132 emitter(CurrentPageIndexState());
110 } 133 }
111 134
@@ -119,7 +142,7 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; { @@ -119,7 +142,7 @@ class TopicPictureBloc extends Bloc&lt;TopicPictureEvent, TopicPictureState&gt; {
119 void _voiceXsTest(XSVoiceTestEvent event,Emitter<TopicPictureState> emitter) async { 142 void _voiceXsTest(XSVoiceTestEvent event,Emitter<TopicPictureState> emitter) async {
120 EasyLoading.show(status: '录音中....'); 143 EasyLoading.show(status: '录音中....');
121 methodChannel.invokeMethod( 144 methodChannel.invokeMethod(
122 - 'startRecord', 145 + 'starVoice',
123 {'word':event.testWord,'type':event.type,'userId':event.userId.toString()} 146 {'word':event.testWord,'type':event.type,'userId':event.userId.toString()}
124 ); 147 );
125 _isVoicing = true; 148 _isVoicing = true;
lib/pages/practice/bloc/topic_picture_event.dart
@@ -20,8 +20,8 @@ class XSVoiceResultEvent extends TopicPictureEvent { @@ -20,8 +20,8 @@ class XSVoiceResultEvent extends TopicPictureEvent {
20 ///先声测试 20 ///先声测试
21 class XSVoiceTestEvent extends TopicPictureEvent { 21 class XSVoiceTestEvent extends TopicPictureEvent {
22 final String testWord; 22 final String testWord;
23 - final int type;  
24 - final int userId; 23 + final String type;
  24 + final String userId;
25 XSVoiceTestEvent(this.testWord,this.type,this.userId); 25 XSVoiceTestEvent(this.testWord,this.type,this.userId);
26 } 26 }
27 27
lib/pages/practice/topic_picture_page.dart
@@ -24,7 +24,7 @@ class TopicPicturePage extends StatelessWidget { @@ -24,7 +24,7 @@ class TopicPicturePage extends StatelessWidget {
24 { 24 {
25 'appKey':'a418', 25 'appKey':'a418',
26 'secretKey':'1a16f31f2611bf32fb7b3fc38f5b2c81', 26 'secretKey':'1a16f31f2611bf32fb7b3fc38f5b2c81',
27 - 'userId':UserUtil.getUser()!.id 27 + 'userId':UserUtil.getUser()!.id.toString()
28 } 28 }
29 )), 29 )),
30 child: _TopicPicturePage(), 30 child: _TopicPicturePage(),
@@ -60,9 +60,8 @@ class _TopicPicturePage extends StatelessWidget { @@ -60,9 +60,8 @@ class _TopicPicturePage extends StatelessWidget {
60 children: [ 60 children: [
61 PracticeHeaderWidget( 61 PracticeHeaderWidget(
62 title: '${bloc.currentPage}/${bloc.entity?.topics?.length}', 62 title: '${bloc.currentPage}/${bloc.entity?.topics?.length}',
63 - onTap: (){  
64 - bloc.add(XSVoiceTestEvent('Hello', 0,UserUtil.getUser()!.id));  
65 - // Navigator.pop(context); 63 + onTap: () {
  64 + Navigator.pop(context);
66 }, 65 },
67 ), 66 ),
68 Expanded( 67 Expanded(
@@ -108,7 +107,7 @@ class _TopicPicturePage extends StatelessWidget { @@ -108,7 +107,7 @@ class _TopicPicturePage extends StatelessWidget {
108 child: Column( 107 child: Column(
109 children: [ 108 children: [
110 Text( 109 Text(
111 - 'What to do when the sentence question is very long and needs a line break', 110 + topics?.word??'',
112 softWrap: true, 111 softWrap: true,
113 style: TextStyle( 112 style: TextStyle(
114 fontSize: 21.sp, 113 fontSize: 21.sp,
@@ -120,10 +119,11 @@ class _TopicPicturePage extends StatelessWidget { @@ -120,10 +119,11 @@ class _TopicPicturePage extends StatelessWidget {
120 height: 143.h, 119 height: 143.h,
121 width: 143.w * (topics?.topicAnswerList?.length??0), 120 width: 143.w * (topics?.topicAnswerList?.length??0),
122 child: ListView.builder( 121 child: ListView.builder(
123 - itemCount: topics?.topicAnswerList?.length??0,  
124 scrollDirection: Axis.horizontal, 122 scrollDirection: Axis.horizontal,
  123 + physics: const NeverScrollableScrollPhysics(),
  124 + itemCount: topics?.topicAnswerList?.length??0,
125 itemBuilder: (context,index){ 125 itemBuilder: (context,index){
126 - return _decodeImageWidget(index); 126 + return _decodeImageWidget(index,topics?.topicAnswerList?[index]);
127 }), 127 }),
128 ), 128 ),
129 ], 129 ],
@@ -131,7 +131,7 @@ class _TopicPicturePage extends StatelessWidget { @@ -131,7 +131,7 @@ class _TopicPicturePage extends StatelessWidget {
131 ); 131 );
132 }); 132 });
133 133
134 - Widget _decodeImageWidget(int index) => BlocBuilder<TopicPictureBloc,TopicPictureState>( 134 + Widget _decodeImageWidget(int index,CourseProcessTopicsTopicAnswerList? answerLis) => BlocBuilder<TopicPictureBloc,TopicPictureState>(
135 buildWhen: (_, s) => s is SelectItemChangeState, 135 buildWhen: (_, s) => s is SelectItemChangeState,
136 builder: (context,state){ 136 builder: (context,state){
137 final bloc = BlocProvider.of<TopicPictureBloc>(context); 137 final bloc = BlocProvider.of<TopicPictureBloc>(context);
@@ -155,9 +155,9 @@ class _TopicPicturePage extends StatelessWidget { @@ -155,9 +155,9 @@ class _TopicPicturePage extends StatelessWidget {
155 width: 1.0, 155 width: 1.0,
156 color: const Color(0xFF140C10) 156 color: const Color(0xFF140C10)
157 ), 157 ),
158 - image: const DecorationImage( 158 + image: DecorationImage(
159 fit: BoxFit.fitWidth, 159 fit: BoxFit.fitWidth,
160 - image: NetworkImage('https://img1.baidu.com/it/u=3392591833,1640391553&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=714') 160 + image: NetworkImage(answerLis?.picUrl??'')
161 ) 161 )
162 ), 162 ),
163 ), 163 ),
@@ -169,12 +169,11 @@ class _TopicPicturePage extends StatelessWidget { @@ -169,12 +169,11 @@ class _TopicPicturePage extends StatelessWidget {
169 ///看题选字 169 ///看题选字
170 Widget _pageViewWordItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>( 170 Widget _pageViewWordItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(
171 builder: (context, state){ 171 builder: (context, state){
172 - final bloc = BlocProvider.of<TopicPictureBloc>(context);  
173 return SafeArea( 172 return SafeArea(
174 child: Column( 173 child: Column(
175 children: [ 174 children: [
176 Text( 175 Text(
177 - 'What to do when the sentence question is very long and needs a line break', 176 + topics?.word??'',
178 softWrap: true, 177 softWrap: true,
179 style: TextStyle( 178 style: TextStyle(
180 fontSize: 21.sp, 179 fontSize: 21.sp,
@@ -186,10 +185,11 @@ class _TopicPicturePage extends StatelessWidget { @@ -186,10 +185,11 @@ class _TopicPicturePage extends StatelessWidget {
186 height: 143.h, 185 height: 143.h,
187 width: 143.w * (topics?.topicAnswerList?.length??0), 186 width: 143.w * (topics?.topicAnswerList?.length??0),
188 child: ListView.builder( 187 child: ListView.builder(
189 - itemCount: topics?.topicAnswerList?.length??0,  
190 scrollDirection: Axis.horizontal, 188 scrollDirection: Axis.horizontal,
  189 + itemCount: topics?.topicAnswerList?.length??0,
  190 + physics: const NeverScrollableScrollPhysics(),
191 itemBuilder: (context,index){ 191 itemBuilder: (context,index){
192 - return _decodeWordWidget(index); 192 + return _decodeWordWidget(index,topics?.topicAnswerList?[index]);
193 }), 193 }),
194 ), 194 ),
195 ], 195 ],
@@ -197,7 +197,7 @@ class _TopicPicturePage extends StatelessWidget { @@ -197,7 +197,7 @@ class _TopicPicturePage extends StatelessWidget {
197 ); 197 );
198 }); 198 });
199 199
200 - Widget _decodeWordWidget(int index) => BlocBuilder<TopicPictureBloc,TopicPictureState>( 200 + Widget _decodeWordWidget(int index,CourseProcessTopicsTopicAnswerList? answerLis) => BlocBuilder<TopicPictureBloc,TopicPictureState>(
201 buildWhen: (_, s) => s is SelectItemChangeState, 201 buildWhen: (_, s) => s is SelectItemChangeState,
202 builder: (context,state){ 202 builder: (context,state){
203 final bloc = BlocProvider.of<TopicPictureBloc>(context); 203 final bloc = BlocProvider.of<TopicPictureBloc>(context);
@@ -224,7 +224,7 @@ class _TopicPicturePage extends StatelessWidget { @@ -224,7 +224,7 @@ class _TopicPicturePage extends StatelessWidget {
224 child: Container( 224 child: Container(
225 alignment: Alignment.center, 225 alignment: Alignment.center,
226 child: Text( 226 child: Text(
227 - 'yellow', 227 + answerLis?.word??'',
228 style: TextStyle( 228 style: TextStyle(
229 fontSize: 20.sp, 229 fontSize: 20.sp,
230 color: const Color(0xFF333333) 230 color: const Color(0xFF333333)
@@ -256,7 +256,6 @@ class _TopicPicturePage extends StatelessWidget { @@ -256,7 +256,6 @@ class _TopicPicturePage extends StatelessWidget {
256 ///听音选图 256 ///听音选图
257 Widget _pageViewVoicePictureItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>( 257 Widget _pageViewVoicePictureItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(
258 builder: (context, state){ 258 builder: (context, state){
259 - final bloc = BlocProvider.of<TopicPictureBloc>(context);  
260 return SafeArea( 259 return SafeArea(
261 child: Column( 260 child: Column(
262 children: [ 261 children: [
@@ -266,7 +265,7 @@ class _TopicPicturePage extends StatelessWidget { @@ -266,7 +265,7 @@ class _TopicPicturePage extends StatelessWidget {
266 Image.asset('voice'.assetPng,height: 33.h,width: 30.w,), 265 Image.asset('voice'.assetPng,height: 33.h,width: 30.w,),
267 10.horizontalSpace, 266 10.horizontalSpace,
268 Text( 267 Text(
269 - 'yellow', 268 + topics?.word??'',
270 style: TextStyle( 269 style: TextStyle(
271 fontSize: 20.sp, 270 fontSize: 20.sp,
272 color: const Color(0xFF333333) 271 color: const Color(0xFF333333)
@@ -280,9 +279,10 @@ class _TopicPicturePage extends StatelessWidget { @@ -280,9 +279,10 @@ class _TopicPicturePage extends StatelessWidget {
280 width: 163.w * (topics?.topicAnswerList?.length??0), 279 width: 163.w * (topics?.topicAnswerList?.length??0),
281 child: ListView.builder( 280 child: ListView.builder(
282 scrollDirection: Axis.horizontal, 281 scrollDirection: Axis.horizontal,
  282 + physics: const NeverScrollableScrollPhysics(),
283 itemCount: topics?.topicAnswerList?.length??0, 283 itemCount: topics?.topicAnswerList?.length??0,
284 itemBuilder: (BuildContext context,int index){ 284 itemBuilder: (BuildContext context,int index){
285 - return _decodeVoiceImageWidget(1,topics?.topicAnswerList?[index]); 285 + return _decodeVoiceImageWidget(index,topics?.topicAnswerList?[index]);
286 }) 286 })
287 , 287 ,
288 ) 288 )
@@ -315,9 +315,9 @@ class _TopicPicturePage extends StatelessWidget { @@ -315,9 +315,9 @@ class _TopicPicturePage extends StatelessWidget {
315 width: 1.0, 315 width: 1.0,
316 color: const Color(0xFF140C10) 316 color: const Color(0xFF140C10)
317 ), 317 ),
318 - image: const DecorationImage( 318 + image: DecorationImage(
319 fit: BoxFit.fitWidth, 319 fit: BoxFit.fitWidth,
320 - image: NetworkImage('https://img1.baidu.com/it/u=3392591833,1640391553&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=714') 320 + image: NetworkImage(answerList?.picUrl??'')
321 ) 321 )
322 ), 322 ),
323 ), 323 ),
@@ -329,7 +329,6 @@ class _TopicPicturePage extends StatelessWidget { @@ -329,7 +329,6 @@ class _TopicPicturePage extends StatelessWidget {
329 ///听音选字 329 ///听音选字
330 Widget _pageViewVoiceWordItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>( 330 Widget _pageViewVoiceWordItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(
331 builder: (context, state){ 331 builder: (context, state){
332 - final bloc = BlocProvider.of<TopicPictureBloc>(context);  
333 return SafeArea( 332 return SafeArea(
334 child: Column( 333 child: Column(
335 children: [ 334 children: [
@@ -339,8 +338,9 @@ class _TopicPicturePage extends StatelessWidget { @@ -339,8 +338,9 @@ class _TopicPicturePage extends StatelessWidget {
339 width: 163.w * (topics?.topicAnswerList?.length??0), 338 width: 163.w * (topics?.topicAnswerList?.length??0),
340 height: 143.h, 339 height: 143.h,
341 child: ListView.builder( 340 child: ListView.builder(
342 - itemCount: topics?.topicAnswerList?.length,  
343 scrollDirection: Axis.horizontal, 341 scrollDirection: Axis.horizontal,
  342 + itemCount: topics?.topicAnswerList?.length,
  343 + physics: const NeverScrollableScrollPhysics(),
344 itemBuilder: (BuildContext context,int index){ 344 itemBuilder: (BuildContext context,int index){
345 return _decodeVoiceWordImageWidget(index, topics!.topicAnswerList![index]); 345 return _decodeVoiceWordImageWidget(index, topics!.topicAnswerList![index]);
346 }), 346 }),
@@ -416,7 +416,7 @@ class _TopicPicturePage extends StatelessWidget { @@ -416,7 +416,7 @@ class _TopicPicturePage extends StatelessWidget {
416 mainAxisAlignment: MainAxisAlignment.center, 416 mainAxisAlignment: MainAxisAlignment.center,
417 children: [ 417 children: [
418 OwImageWidget( 418 OwImageWidget(
419 - name:'https://up.enterdesk.com/edpic_source/16/e7/0d/16e70d550daff77cbac31fae5e1651d4.jpg', 419 + name:topics?.picUrl??'',
420 height: 186.h, 420 height: 186.h,
421 width: 186.w, 421 width: 186.w,
422 ), 422 ),
@@ -424,10 +424,16 @@ class _TopicPicturePage extends StatelessWidget { @@ -424,10 +424,16 @@ class _TopicPicturePage extends StatelessWidget {
424 Column( 424 Column(
425 mainAxisAlignment: MainAxisAlignment.center, 425 mainAxisAlignment: MainAxisAlignment.center,
426 children: [ 426 children: [
427 - Image.asset(  
428 - 'voice'.assetPng,  
429 - height: 52.h,  
430 - width: 46.w, 427 + Row(
  428 + children: [
  429 + Image.asset(
  430 + 'voice'.assetPng,
  431 + height: 52.h,
  432 + width: 46.w,
  433 + ),
  434 + 10.horizontalSpace,
  435 + Text(topics?.word??'')
  436 + ],
431 ), 437 ),
432 70.verticalSpace, 438 70.verticalSpace,
433 GestureDetector( 439 GestureDetector(
@@ -435,7 +441,11 @@ class _TopicPicturePage extends StatelessWidget { @@ -435,7 +441,11 @@ class _TopicPicturePage extends StatelessWidget {
435 if (bloc.isVoicing) { 441 if (bloc.isVoicing) {
436 return; 442 return;
437 } 443 }
438 - bloc.add(XSVoiceTestEvent('Hello', 0,UserUtil.getUser()!.id)); 444 + if (topics?.type == 5) {
  445 + bloc.add(XSVoiceTestEvent(topics?.keyWord??'', '0',UserUtil.getUser()!.id.toString()));
  446 + } else {
  447 + bloc.add(XSVoiceTestEvent(topics?.word??'', '0',UserUtil.getUser()!.id.toString()));
  448 + }
439 }, 449 },
440 child: Image.asset( 450 child: Image.asset(
441 'micro_phone'.assetPng, 451 'micro_phone'.assetPng,