Commit f29687b2fe98680efbe9ac7805cc6e830ef1f8d4

Authored by biao
1 parent 18699a34

修复iOS偶现按钮消失问题,练习页面返回按钮尺寸和标题位置

ios/Runner.xcodeproj/project.pbxproj
@@ -2327,7 +2327,7 @@ @@ -2327,7 +2327,7 @@
2327 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; 2327 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
2328 CODE_SIGN_IDENTITY = "Apple Development"; 2328 CODE_SIGN_IDENTITY = "Apple Development";
2329 CODE_SIGN_STYLE = Automatic; 2329 CODE_SIGN_STYLE = Automatic;
2330 - CURRENT_PROJECT_VERSION = 11; 2330 + CURRENT_PROJECT_VERSION = 12;
2331 DEVELOPMENT_TEAM = T8P9KW8GWH; 2331 DEVELOPMENT_TEAM = T8P9KW8GWH;
2332 ENABLE_BITCODE = NO; 2332 ENABLE_BITCODE = NO;
2333 INFOPLIST_FILE = Runner/Info.plist; 2333 INFOPLIST_FILE = Runner/Info.plist;
@@ -2671,7 +2671,7 @@ @@ -2671,7 +2671,7 @@
2671 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; 2671 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
2672 CODE_SIGN_IDENTITY = "Apple Development"; 2672 CODE_SIGN_IDENTITY = "Apple Development";
2673 CODE_SIGN_STYLE = Automatic; 2673 CODE_SIGN_STYLE = Automatic;
2674 - CURRENT_PROJECT_VERSION = 11; 2674 + CURRENT_PROJECT_VERSION = 12;
2675 DEVELOPMENT_TEAM = T8P9KW8GWH; 2675 DEVELOPMENT_TEAM = T8P9KW8GWH;
2676 ENABLE_BITCODE = NO; 2676 ENABLE_BITCODE = NO;
2677 HEADER_SEARCH_PATHS = ( 2677 HEADER_SEARCH_PATHS = (
@@ -2876,7 +2876,7 @@ @@ -2876,7 +2876,7 @@
2876 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; 2876 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
2877 CODE_SIGN_IDENTITY = "Apple Development"; 2877 CODE_SIGN_IDENTITY = "Apple Development";
2878 CODE_SIGN_STYLE = Automatic; 2878 CODE_SIGN_STYLE = Automatic;
2879 - CURRENT_PROJECT_VERSION = 11; 2879 + CURRENT_PROJECT_VERSION = 12;
2880 DEVELOPMENT_TEAM = T8P9KW8GWH; 2880 DEVELOPMENT_TEAM = T8P9KW8GWH;
2881 ENABLE_BITCODE = NO; 2881 ENABLE_BITCODE = NO;
2882 INFOPLIST_FILE = Runner/Info.plist; 2882 INFOPLIST_FILE = Runner/Info.plist;
ios/Runner/Info.plist
@@ -92,16 +92,16 @@ @@ -92,16 +92,16 @@
92 <true/> 92 <true/>
93 <key>UISupportedInterfaceOrientations</key> 93 <key>UISupportedInterfaceOrientations</key>
94 <array> 94 <array>
95 - <string>UIInterfaceOrientationPortrait</string>  
96 <string>UIInterfaceOrientationLandscapeLeft</string> 95 <string>UIInterfaceOrientationLandscapeLeft</string>
97 <string>UIInterfaceOrientationLandscapeRight</string> 96 <string>UIInterfaceOrientationLandscapeRight</string>
  97 + <string>UIInterfaceOrientationPortrait</string>
98 </array> 98 </array>
99 <key>UISupportedInterfaceOrientations~ipad</key> 99 <key>UISupportedInterfaceOrientations~ipad</key>
100 <array> 100 <array>
101 - <string>UIInterfaceOrientationPortrait</string>  
102 - <string>UIInterfaceOrientationPortraitUpsideDown</string>  
103 <string>UIInterfaceOrientationLandscapeLeft</string> 101 <string>UIInterfaceOrientationLandscapeLeft</string>
104 <string>UIInterfaceOrientationLandscapeRight</string> 102 <string>UIInterfaceOrientationLandscapeRight</string>
  103 + <string>UIInterfaceOrientationPortrait</string>
  104 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
105 </array> 105 </array>
106 <key>UIViewControllerBasedStatusBarAppearance</key> 106 <key>UIViewControllerBasedStatusBarAppearance</key>
107 <false/> 107 <false/>
ios/Runner/Wowgame/WowGameClasses/WowGameCocosManager.mm
@@ -48,6 +48,7 @@ static CocosAppDelegate cocosAppDelegate; @@ -48,6 +48,7 @@ static CocosAppDelegate cocosAppDelegate;
48 } 48 }
49 49
50 - (void)exitGame { 50 - (void)exitGame {
  51 +
51 [self.gameViewController dismissViewControllerAnimated:YES completion:nil]; 52 [self.gameViewController dismissViewControllerAnimated:YES completion:nil];
52 } 53 }
53 54
@@ -102,6 +103,7 @@ static DMProgressHUD *hud; @@ -102,6 +103,7 @@ static DMProgressHUD *hud;
102 } 103 }
103 104
104 -(void)startGameWithID:(NSInteger)gameid { 105 -(void)startGameWithID:(NSInteger)gameid {
  106 + [self clearData];
105 cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread([=] { 107 cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread([=] {
106 // CCLOG("start gameid---> %d ", gameid); 108 // CCLOG("start gameid---> %d ", gameid);
107 cocos2d::EventCustom evtEnter("start_gameid"); 109 cocos2d::EventCustom evtEnter("start_gameid");
@@ -117,6 +119,16 @@ static DMProgressHUD *hud; @@ -117,6 +119,16 @@ static DMProgressHUD *hud;
117 } 119 }
118 120
119 121
  122 +- (void)clearData
  123 +{
  124 + cocos2d::SpriteFrameCache::getInstance()->removeSpriteFrames();
  125 + cocos2d::Director::getInstance()->getTextureCache()->removeAllTextures();
  126 + //清理搜索路径
  127 + std::vector<std::string> searchPathArray;
  128 + searchPathArray.push_back("res");
  129 + cocos2d::FileUtils::getInstance()->setSearchPaths(searchPathArray);
  130 +}
  131 +
120 - (void)detoryCocosEnvironment { 132 - (void)detoryCocosEnvironment {
121 133
122 } 134 }
lib/pages/practice/topic_picture_page.dart
@@ -14,7 +14,7 @@ import &#39;../../common/widgets/throttledGesture_gesture_detector.dart&#39;; @@ -14,7 +14,7 @@ import &#39;../../common/widgets/throttledGesture_gesture_detector.dart&#39;;
14 import 'bloc/topic_picture_bloc.dart'; 14 import 'bloc/topic_picture_bloc.dart';
15 import 'widgets/practice_header_widget.dart'; 15 import 'widgets/practice_header_widget.dart';
16 16
17 -class TopicPicturePage extends StatelessWidget { 17 +class TopicPicturePage extends StatelessWidget {
18 const TopicPicturePage({super.key, this.courseLessonId}); 18 const TopicPicturePage({super.key, this.courseLessonId});
19 19
20 final String? courseLessonId; 20 final String? courseLessonId;
@@ -23,20 +23,18 @@ class TopicPicturePage extends StatelessWidget { @@ -23,20 +23,18 @@ class TopicPicturePage extends StatelessWidget {
23 Widget build(BuildContext context) { 23 Widget build(BuildContext context) {
24 return BlocProvider( 24 return BlocProvider(
25 create: (context) => TopicPictureBloc( 25 create: (context) => TopicPictureBloc(
26 - context,  
27 - PageController(),  
28 - courseLessonId??'', 26 + context,
  27 + PageController(),
  28 + courseLessonId ?? '',
29 ) 29 )
30 ..add(InitBlocEvent()) 30 ..add(InitBlocEvent())
31 ..add(RequestDataEvent()) 31 ..add(RequestDataEvent())
32 - ..add(XSVoiceInitEvent(  
33 - {  
34 - 'appKey':AppConsts.xsAppKey,  
35 - 'service':AppConsts.xsAppService,  
36 - 'secretKey':AppConsts.xsAppSecretKey,  
37 - 'userId':UserUtil.getUser()!.id.toString(),  
38 - }  
39 - )), 32 + ..add(XSVoiceInitEvent({
  33 + 'appKey': AppConsts.xsAppKey,
  34 + 'service': AppConsts.xsAppService,
  35 + 'secretKey': AppConsts.xsAppSecretKey,
  36 + 'userId': UserUtil.getUser()!.id.toString(),
  37 + })),
40 child: _TopicPicturePage(), 38 child: _TopicPicturePage(),
41 ); 39 );
42 } 40 }
@@ -45,21 +43,20 @@ class TopicPicturePage extends StatelessWidget { @@ -45,21 +43,20 @@ class TopicPicturePage extends StatelessWidget {
45 class _TopicPicturePage extends StatelessWidget { 43 class _TopicPicturePage extends StatelessWidget {
46 @override 44 @override
47 Widget build(BuildContext context) { 45 Widget build(BuildContext context) {
48 - return BlocListener<TopicPictureBloc,TopicPictureState>(  
49 - listener: (context, state){ 46 + return BlocListener<TopicPictureBloc, TopicPictureState>(
  47 + listener: (context, state) {
50 if (state is RequestDataState) { 48 if (state is RequestDataState) {
51 context.read<TopicPictureBloc>().add(CurrentPageIndexChangeEvent(0)); 49 context.read<TopicPictureBloc>().add(CurrentPageIndexChangeEvent(0));
52 } 50 }
53 - if (state is XSVoiceTestState) {  
54 -  
55 - } 51 + if (state is XSVoiceTestState) {}
56 }, 52 },
57 child: _topicPictureView(), 53 child: _topicPictureView(),
58 ); 54 );
59 } 55 }
60 56
61 - Widget _topicPictureView() => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
62 - builder: (context,state){ 57 + Widget _topicPictureView() =>
  58 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  59 + builder: (context, state) {
63 final bloc = BlocProvider.of<TopicPictureBloc>(context); 60 final bloc = BlocProvider.of<TopicPictureBloc>(context);
64 return Container( 61 return Container(
65 color: Colors.white, 62 color: Colors.white,
@@ -70,14 +67,13 @@ class _TopicPicturePage extends StatelessWidget { @@ -70,14 +67,13 @@ class _TopicPicturePage extends StatelessWidget {
70 PracticeHeaderWidget( 67 PracticeHeaderWidget(
71 title: '${bloc.currentPage}/${bloc.entity?.topics?.length}', 68 title: '${bloc.currentPage}/${bloc.entity?.topics?.length}',
72 onTap: () { 69 onTap: () {
73 - popPage(  
74 - data:{  
75 - 'currentStep':bloc.currentPage,  
76 - 'courseLessonId':bloc.courseLessonId,  
77 - 'isCompleted': bloc.isLastPage(),  
78 - }); 70 + popPage(data: {
  71 + 'currentStep': bloc.currentPage,
  72 + 'courseLessonId': bloc.courseLessonId,
  73 + 'isCompleted': bloc.isLastPage(),
  74 + });
79 // Navigator.pop(context); 75 // Navigator.pop(context);
80 - }, 76 + },
81 ), 77 ),
82 Expanded( 78 Expanded(
83 child: PageView.builder( 79 child: PageView.builder(
@@ -87,17 +83,27 @@ class _TopicPicturePage extends StatelessWidget { @@ -87,17 +83,27 @@ class _TopicPicturePage extends StatelessWidget {
87 onPageChanged: (int index) { 83 onPageChanged: (int index) {
88 bloc.add(CurrentPageIndexChangeEvent(index)); 84 bloc.add(CurrentPageIndexChangeEvent(index));
89 }, 85 },
90 - itemBuilder: (BuildContext context,int index){  
91 - CourseProcessTopics? topics = bloc.entity?.topics![index];  
92 - if (topics?.type == TopicType.audioImageSelect.value) {//听音选图 86 + itemBuilder: (BuildContext context, int index) {
  87 + CourseProcessTopics? topics =
  88 + bloc.entity?.topics![index];
  89 + if (topics?.type ==
  90 + TopicType.audioImageSelect.value) {
  91 + //听音选图
93 return _pageViewVoicePictureItemWidget(topics); 92 return _pageViewVoicePictureItemWidget(topics);
94 - } else if (topics?.type == TopicType.audioCharSelect.value) {//听音选字 93 + } else if (topics?.type ==
  94 + TopicType.audioCharSelect.value) {
  95 + //听音选字
95 return _pageViewVoiceWordItemWidget(topics); 96 return _pageViewVoiceWordItemWidget(topics);
96 - } else if (topics?.type == TopicType.questionCharSelect.value) {//看题选字 97 + } else if (topics?.type ==
  98 + TopicType.questionCharSelect.value) {
  99 + //看题选字
97 return _pageViewWordItemWidget(topics); 100 return _pageViewWordItemWidget(topics);
98 - } else if (topics?.type == TopicType.questionImageSelect.value) {//看题选图 101 + } else if (topics?.type ==
  102 + TopicType.questionImageSelect.value) {
  103 + //看题选图
99 return _pageViewItemWidget(topics); 104 return _pageViewItemWidget(topics);
100 - } else {//语音问答 105 + } else {
  106 + //语音问答
101 return _voiceAnswerItem(topics); 107 return _voiceAnswerItem(topics);
102 } 108 }
103 }), 109 }),
@@ -108,37 +114,34 @@ class _TopicPicturePage extends StatelessWidget { @@ -108,37 +114,34 @@ class _TopicPicturePage extends StatelessWidget {
108 left: 0, 114 left: 0,
109 right: 0, 115 right: 0,
110 bottom: 0, 116 bottom: 0,
111 - child: Image.asset('bottom_grass'.assetPng)  
112 - ) 117 + child: Image.asset('bottom_grass'.assetPng))
113 ], 118 ],
114 ), 119 ),
115 ); 120 );
116 }); 121 });
117 122
118 ///看题选图 123 ///看题选图
119 - Widget _pageViewItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
120 - builder: (context, state){ 124 + Widget _pageViewItemWidget(CourseProcessTopics? topics) =>
  125 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  126 + builder: (context, state) {
121 return SafeArea( 127 return SafeArea(
122 child: Column( 128 child: Column(
123 children: [ 129 children: [
124 - Text(  
125 - topics?.word??'', 130 + Text(topics?.word ?? '',
126 softWrap: true, 131 softWrap: true,
127 style: TextStyle( 132 style: TextStyle(
128 - fontSize: 21.sp,  
129 - color: const Color(0xFF333333)  
130 - )  
131 - ), 133 + fontSize: 21.sp, color: const Color(0xFF333333))),
132 26.verticalSpace, 134 26.verticalSpace,
133 SizedBox( 135 SizedBox(
134 height: 143.h, 136 height: 143.h,
135 - width: 143.w * (topics?.topicAnswerList?.length??0), 137 + width: 143.w * (topics?.topicAnswerList?.length ?? 0),
136 child: ListView.builder( 138 child: ListView.builder(
137 scrollDirection: Axis.horizontal, 139 scrollDirection: Axis.horizontal,
138 physics: const NeverScrollableScrollPhysics(), 140 physics: const NeverScrollableScrollPhysics(),
139 - itemCount: topics?.topicAnswerList?.length??0,  
140 - itemBuilder: (context,index){  
141 - return _decodeImageWidget(index,topics?.topicAnswerList?[index]); 141 + itemCount: topics?.topicAnswerList?.length ?? 0,
  142 + itemBuilder: (context, index) {
  143 + return _decodeImageWidget(
  144 + index, topics?.topicAnswerList?[index]);
142 }), 145 }),
143 ), 146 ),
144 ], 147 ],
@@ -146,65 +149,63 @@ class _TopicPicturePage extends StatelessWidget { @@ -146,65 +149,63 @@ class _TopicPicturePage extends StatelessWidget {
146 ); 149 );
147 }); 150 });
148 151
149 - Widget _decodeImageWidget(int index,CourseProcessTopicsTopicAnswerList? answerLis) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
150 - buildWhen: (_, s) => s is SelectItemChangeState,  
151 - builder: (context,state){  
152 - final bloc = BlocProvider.of<TopicPictureBloc>(context);  
153 - return Container(  
154 - padding: EdgeInsets.symmetric(horizontal: 10.w),  
155 - child: GestureDetector(  
156 - onTap: () => bloc.add(SelectItemEvent(index)),  
157 - child: Container(  
158 - padding: const EdgeInsets.all(4.5),  
159 - decoration: BoxDecoration(  
160 - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white,  
161 - borderRadius: BorderRadius.circular(15),  
162 - ),  
163 - height: 143.h,  
164 - width: 143.w,  
165 - child: Container(  
166 - decoration: BoxDecoration(  
167 - color: Colors.white, 152 + Widget _decodeImageWidget(
  153 + int index, CourseProcessTopicsTopicAnswerList? answerLis) =>
  154 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  155 + buildWhen: (_, s) => s is SelectItemChangeState,
  156 + builder: (context, state) {
  157 + final bloc = BlocProvider.of<TopicPictureBloc>(context);
  158 + return Container(
  159 + padding: EdgeInsets.symmetric(horizontal: 10.w),
  160 + child: GestureDetector(
  161 + onTap: () => bloc.add(SelectItemEvent(index)),
  162 + child: Container(
  163 + padding: const EdgeInsets.all(4.5),
  164 + decoration: BoxDecoration(
  165 + color: bloc.selectItem == index
  166 + ? const Color(0xFF00B6F1)
  167 + : Colors.white,
168 borderRadius: BorderRadius.circular(15), 168 borderRadius: BorderRadius.circular(15),
169 - border: Border.all(  
170 - width: 1.0,  
171 - color: const Color(0xFF140C10)  
172 - ),  
173 - image: DecorationImage(  
174 - fit: BoxFit.fitWidth,  
175 - image: NetworkImage(answerLis?.picUrl??'')  
176 - ) 169 + ),
  170 + height: 143.h,
  171 + width: 143.w,
  172 + child: Container(
  173 + decoration: BoxDecoration(
  174 + color: Colors.white,
  175 + borderRadius: BorderRadius.circular(15),
  176 + border: Border.all(
  177 + width: 1.0, color: const Color(0xFF140C10)),
  178 + image: DecorationImage(
  179 + fit: BoxFit.fitWidth,
  180 + image: NetworkImage(answerLis?.picUrl ?? ''))),
  181 + ),
177 ), 182 ),
178 ), 183 ),
179 - ),  
180 - ),  
181 - );  
182 - }); 184 + );
  185 + });
183 186
184 ///看题选字 187 ///看题选字
185 - Widget _pageViewWordItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
186 - builder: (context, state){ 188 + Widget _pageViewWordItemWidget(CourseProcessTopics? topics) =>
  189 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  190 + builder: (context, state) {
187 return SafeArea( 191 return SafeArea(
188 child: Column( 192 child: Column(
189 children: [ 193 children: [
190 - Text(  
191 - topics?.word??'', 194 + Text(topics?.word ?? '',
192 softWrap: true, 195 softWrap: true,
193 style: TextStyle( 196 style: TextStyle(
194 - fontSize: 21.sp,  
195 - color: const Color(0xFF333333)  
196 - )  
197 - ), 197 + fontSize: 21.sp, color: const Color(0xFF333333))),
198 26.verticalSpace, 198 26.verticalSpace,
199 SizedBox( 199 SizedBox(
200 height: 143.h, 200 height: 143.h,
201 - width: 143.w * (topics?.topicAnswerList?.length??0), 201 + width: 143.w * (topics?.topicAnswerList?.length ?? 0),
202 child: ListView.builder( 202 child: ListView.builder(
203 scrollDirection: Axis.horizontal, 203 scrollDirection: Axis.horizontal,
204 - itemCount: topics?.topicAnswerList?.length??0, 204 + itemCount: topics?.topicAnswerList?.length ?? 0,
205 physics: const NeverScrollableScrollPhysics(), 205 physics: const NeverScrollableScrollPhysics(),
206 - itemBuilder: (context,index){  
207 - return _decodeWordWidget(index,topics?.topicAnswerList?[index]); 206 + itemBuilder: (context, index) {
  207 + return _decodeWordWidget(
  208 + index, topics?.topicAnswerList?[index]);
208 }), 209 }),
209 ), 210 ),
210 ], 211 ],
@@ -212,65 +213,64 @@ class _TopicPicturePage extends StatelessWidget { @@ -212,65 +213,64 @@ class _TopicPicturePage extends StatelessWidget {
212 ); 213 );
213 }); 214 });
214 215
215 - Widget _decodeWordWidget(int index,CourseProcessTopicsTopicAnswerList? answerLis) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
216 - buildWhen: (_, s) => s is SelectItemChangeState,  
217 - builder: (context,state){  
218 - final bloc = BlocProvider.of<TopicPictureBloc>(context);  
219 - return Container(  
220 - padding: EdgeInsets.symmetric(horizontal: 10.w),  
221 - child: GestureDetector(  
222 - onTap: () => bloc.add(SelectItemEvent(index)),  
223 - child: Container(  
224 - width: 143.w,  
225 - height: 143.h,  
226 - padding: EdgeInsets.only(left: 13.w,right: 13.w,top: 13.h,bottom: 13.h),  
227 - decoration: BoxDecoration(  
228 - color: Colors.white,  
229 - borderRadius: BorderRadius.circular(15),  
230 - border: Border.all(  
231 - width: 1.0,  
232 - color: const Color(0xFF140C10)  
233 - ),  
234 - ),  
235 - child: Column(  
236 - mainAxisAlignment: MainAxisAlignment.end,  
237 - children: [  
238 - Expanded(  
239 - child: Container(  
240 - alignment: Alignment.center,  
241 - child: Text(  
242 - answerLis?.word??'',  
243 - style: TextStyle(  
244 - fontSize: 20.sp,  
245 - color: const Color(0xFF333333)  
246 - )  
247 - ),  
248 - ), 216 + Widget _decodeWordWidget(
  217 + int index, CourseProcessTopicsTopicAnswerList? answerLis) =>
  218 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  219 + buildWhen: (_, s) => s is SelectItemChangeState,
  220 + builder: (context, state) {
  221 + final bloc = BlocProvider.of<TopicPictureBloc>(context);
  222 + return Container(
  223 + padding: EdgeInsets.symmetric(horizontal: 10.w),
  224 + child: GestureDetector(
  225 + onTap: () => bloc.add(SelectItemEvent(index)),
  226 + child: Container(
  227 + width: 143.w,
  228 + height: 143.h,
  229 + padding: EdgeInsets.only(
  230 + left: 13.w, right: 13.w, top: 13.h, bottom: 13.h),
  231 + decoration: BoxDecoration(
  232 + color: Colors.white,
  233 + borderRadius: BorderRadius.circular(15),
  234 + border:
  235 + Border.all(width: 1.0, color: const Color(0xFF140C10)),
249 ), 236 ),
250 - Container(  
251 - height: 30.h,  
252 - width: double.infinity,  
253 - decoration: BoxDecoration(  
254 - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white,  
255 - borderRadius: BorderRadius.circular(15.r),  
256 - border: Border.all(  
257 - width: 1.5,  
258 - color: const Color(0xFF140C10) 237 + child: Column(
  238 + mainAxisAlignment: MainAxisAlignment.end,
  239 + children: [
  240 + Expanded(
  241 + child: Container(
  242 + alignment: Alignment.center,
  243 + child: Text(answerLis?.word ?? '',
  244 + style: TextStyle(
  245 + fontSize: 20.sp,
  246 + color: const Color(0xFF333333))),
  247 + ),
259 ), 248 ),
260 - ),  
261 - alignment: Alignment.center,  
262 - child: Image.asset('choose'.assetPng),  
263 - )  
264 - ], 249 + Container(
  250 + height: 30.h,
  251 + width: double.infinity,
  252 + decoration: BoxDecoration(
  253 + color: bloc.selectItem == index
  254 + ? const Color(0xFF00B6F1)
  255 + : Colors.white,
  256 + borderRadius: BorderRadius.circular(15.r),
  257 + border: Border.all(
  258 + width: 1.5, color: const Color(0xFF140C10)),
  259 + ),
  260 + alignment: Alignment.center,
  261 + child: Image.asset('choose'.assetPng),
  262 + )
  263 + ],
  264 + ),
  265 + ),
265 ), 266 ),
266 - ),  
267 - ),  
268 - );  
269 - }); 267 + );
  268 + });
270 269
271 ///听音选图 270 ///听音选图
272 - Widget _pageViewVoicePictureItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
273 - builder: (context, state){ 271 + Widget _pageViewVoicePictureItemWidget(CourseProcessTopics? topics) =>
  272 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  273 + builder: (context, state) {
274 final bloc = BlocProvider.of<TopicPictureBloc>(context); 274 final bloc = BlocProvider.of<TopicPictureBloc>(context);
275 return SafeArea( 275 return SafeArea(
276 child: Column( 276 child: Column(
@@ -283,101 +283,101 @@ class _TopicPicturePage extends StatelessWidget { @@ -283,101 +283,101 @@ class _TopicPicturePage extends StatelessWidget {
283 bloc.add(VoicePlayEvent()); 283 bloc.add(VoicePlayEvent());
284 }, 284 },
285 child: Image.asset( 285 child: Image.asset(
286 - bloc.voicePlayState == VoicePlayState.playing?'reade_answer'.assetGif:'voice'.assetPng, 286 + bloc.voicePlayState == VoicePlayState.playing
  287 + ? 'reade_answer'.assetGif
  288 + : 'voice'.assetPng,
287 height: 33.h, 289 height: 33.h,
288 width: 30.w, 290 width: 30.w,
289 ), 291 ),
290 ), 292 ),
291 10.horizontalSpace, 293 10.horizontalSpace,
292 - Text(  
293 - topics?.word??'', 294 + Text(topics?.word ?? '',
294 style: TextStyle( 295 style: TextStyle(
295 - fontSize: 20.sp,  
296 - color: const Color(0xFF333333)  
297 - )  
298 - ) 296 + fontSize: 20.sp, color: const Color(0xFF333333)))
299 ], 297 ],
300 ), 298 ),
301 26.verticalSpace, 299 26.verticalSpace,
302 SizedBox( 300 SizedBox(
303 height: 143.h, 301 height: 143.h,
304 - width: 163.w * (topics?.topicAnswerList?.length??0), 302 + width: 163.w * (topics?.topicAnswerList?.length ?? 0),
305 child: ListView.builder( 303 child: ListView.builder(
306 scrollDirection: Axis.horizontal, 304 scrollDirection: Axis.horizontal,
307 physics: const NeverScrollableScrollPhysics(), 305 physics: const NeverScrollableScrollPhysics(),
308 - itemCount: topics?.topicAnswerList?.length??0,  
309 - itemBuilder: (BuildContext context,int index){  
310 - return _decodeVoiceImageWidget(index,topics?.topicAnswerList?[index]);  
311 - })  
312 - , 306 + itemCount: topics?.topicAnswerList?.length ?? 0,
  307 + itemBuilder: (BuildContext context, int index) {
  308 + return _decodeVoiceImageWidget(
  309 + index, topics?.topicAnswerList?[index]);
  310 + }),
313 ) 311 )
314 ], 312 ],
315 ), 313 ),
316 ); 314 );
317 }); 315 });
318 316
319 - Widget _decodeVoiceImageWidget(int index,CourseProcessTopicsTopicAnswerList? answerList) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
320 - buildWhen: (_, s) => s is SelectItemChangeState,  
321 - builder: (context,state){  
322 - final bloc = BlocProvider.of<TopicPictureBloc>(context);  
323 - return Container(  
324 - padding: EdgeInsets.symmetric(horizontal: 10.w),  
325 - child: GestureDetector(  
326 - onTap: () => bloc.add(SelectItemEvent(index)),  
327 - child: Container(  
328 - padding: const EdgeInsets.all(4.5),  
329 - decoration: BoxDecoration(  
330 - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white,  
331 - borderRadius: BorderRadius.circular(15),  
332 - ),  
333 - height: 143.h,  
334 - width: 143.w,  
335 - child: Container(  
336 - decoration: BoxDecoration(  
337 - color: Colors.white, 317 + Widget _decodeVoiceImageWidget(
  318 + int index, CourseProcessTopicsTopicAnswerList? answerList) =>
  319 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  320 + buildWhen: (_, s) => s is SelectItemChangeState,
  321 + builder: (context, state) {
  322 + final bloc = BlocProvider.of<TopicPictureBloc>(context);
  323 + return Container(
  324 + padding: EdgeInsets.symmetric(horizontal: 10.w),
  325 + child: GestureDetector(
  326 + onTap: () => bloc.add(SelectItemEvent(index)),
  327 + child: Container(
  328 + padding: const EdgeInsets.all(4.5),
  329 + decoration: BoxDecoration(
  330 + color: bloc.selectItem == index
  331 + ? const Color(0xFF00B6F1)
  332 + : Colors.white,
338 borderRadius: BorderRadius.circular(15), 333 borderRadius: BorderRadius.circular(15),
339 - border: Border.all(  
340 - width: 1.0,  
341 - color: const Color(0xFF140C10)  
342 - ),  
343 - image: DecorationImage(  
344 - fit: BoxFit.fitWidth,  
345 - image: NetworkImage(answerList?.picUrl??'')  
346 - ) 334 + ),
  335 + height: 143.h,
  336 + width: 143.w,
  337 + child: Container(
  338 + decoration: BoxDecoration(
  339 + color: Colors.white,
  340 + borderRadius: BorderRadius.circular(15),
  341 + border: Border.all(
  342 + width: 1.0, color: const Color(0xFF140C10)),
  343 + image: DecorationImage(
  344 + fit: BoxFit.fitWidth,
  345 + image: NetworkImage(answerList?.picUrl ?? ''))),
  346 + ),
347 ), 347 ),
348 ), 348 ),
349 - ),  
350 - ),  
351 - );  
352 - }); 349 + );
  350 + });
353 351
354 ///听音选字 352 ///听音选字
355 - Widget _pageViewVoiceWordItemWidget(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
356 - builder: (context, state){ 353 + Widget _pageViewVoiceWordItemWidget(CourseProcessTopics? topics) =>
  354 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  355 + builder: (context, state) {
357 final bloc = BlocProvider.of<TopicPictureBloc>(context); 356 final bloc = BlocProvider.of<TopicPictureBloc>(context);
358 return SafeArea( 357 return SafeArea(
359 child: Column( 358 child: Column(
360 children: [ 359 children: [
361 GestureDetector( 360 GestureDetector(
362 - onTap: () {  
363 - bloc.add(VoicePlayEvent());  
364 - },  
365 - child: Image.asset(  
366 - bloc.voicePlayState == VoicePlayState.playing?'reade_answer'.assetGif:'voice'.assetPng,  
367 - height: 33.h,  
368 - width: 30.w  
369 - )  
370 - ), 361 + onTap: () {
  362 + bloc.add(VoicePlayEvent());
  363 + },
  364 + child: Image.asset(
  365 + bloc.voicePlayState == VoicePlayState.playing
  366 + ? 'reade_answer'.assetGif
  367 + : 'voice'.assetPng,
  368 + height: 33.h,
  369 + width: 30.w)),
371 26.verticalSpace, 370 26.verticalSpace,
372 SizedBox( 371 SizedBox(
373 - width: 163.w * (topics?.topicAnswerList?.length??0), 372 + width: 163.w * (topics?.topicAnswerList?.length ?? 0),
374 height: 143.h, 373 height: 143.h,
375 child: ListView.builder( 374 child: ListView.builder(
376 scrollDirection: Axis.horizontal, 375 scrollDirection: Axis.horizontal,
377 itemCount: topics?.topicAnswerList?.length, 376 itemCount: topics?.topicAnswerList?.length,
378 physics: const NeverScrollableScrollPhysics(), 377 physics: const NeverScrollableScrollPhysics(),
379 - itemBuilder: (BuildContext context,int index){  
380 - return _decodeVoiceWordImageWidget(index, topics!.topicAnswerList![index]); 378 + itemBuilder: (BuildContext context, int index) {
  379 + return _decodeVoiceWordImageWidget(
  380 + index, topics!.topicAnswerList![index]);
381 }), 381 }),
382 ), 382 ),
383 ], 383 ],
@@ -385,73 +385,72 @@ class _TopicPicturePage extends StatelessWidget { @@ -385,73 +385,72 @@ class _TopicPicturePage extends StatelessWidget {
385 ); 385 );
386 }); 386 });
387 387
388 - Widget _decodeVoiceWordImageWidget(int index,CourseProcessTopicsTopicAnswerList answerList) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
389 - buildWhen: (_, s) => s is SelectItemChangeState,  
390 - builder: (context,state){  
391 - final bloc = BlocProvider.of<TopicPictureBloc>(context);  
392 - return GestureDetector(  
393 - onTap: () => bloc.add(SelectItemEvent(index)),  
394 - child: Container(  
395 - width: 163.w,  
396 - height: 143.h,  
397 - padding: EdgeInsets.symmetric(horizontal: 10.w),  
398 - child: Container(  
399 - width: 143.w,  
400 - height: 143.h,  
401 - padding: EdgeInsets.only(left: 13.w,right: 13.w,top: 13.h,bottom: 13.h),  
402 - decoration: BoxDecoration(  
403 - color: Colors.white,  
404 - borderRadius: BorderRadius.circular(15),  
405 - border: Border.all(  
406 - width: 1.0,  
407 - color: const Color(0xFF140C10)  
408 - ),  
409 - ),  
410 - child: Column(  
411 - mainAxisAlignment: MainAxisAlignment.end,  
412 - children: [  
413 - Expanded(  
414 - child: Container(  
415 - alignment: Alignment.center,  
416 - child: Text(  
417 - answerList.word??'',  
418 - style: TextStyle(  
419 - fontSize: 20.sp,  
420 - color: const Color(0xFF333333)  
421 - )  
422 - ),  
423 - ), 388 + Widget _decodeVoiceWordImageWidget(
  389 + int index, CourseProcessTopicsTopicAnswerList answerList) =>
  390 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  391 + buildWhen: (_, s) => s is SelectItemChangeState,
  392 + builder: (context, state) {
  393 + final bloc = BlocProvider.of<TopicPictureBloc>(context);
  394 + return GestureDetector(
  395 + onTap: () => bloc.add(SelectItemEvent(index)),
  396 + child: Container(
  397 + width: 163.w,
  398 + height: 143.h,
  399 + padding: EdgeInsets.symmetric(horizontal: 10.w),
  400 + child: Container(
  401 + width: 143.w,
  402 + height: 143.h,
  403 + padding: EdgeInsets.only(
  404 + left: 13.w, right: 13.w, top: 13.h, bottom: 13.h),
  405 + decoration: BoxDecoration(
  406 + color: Colors.white,
  407 + borderRadius: BorderRadius.circular(15),
  408 + border:
  409 + Border.all(width: 1.0, color: const Color(0xFF140C10)),
424 ), 410 ),
425 - Container(  
426 - height: 30.h,  
427 - width: double.infinity,  
428 - decoration: BoxDecoration(  
429 - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white,  
430 - borderRadius: BorderRadius.circular(15.r),  
431 - border: Border.all(  
432 - width: 1.5,  
433 - color: const Color(0xFF140C10) 411 + child: Column(
  412 + mainAxisAlignment: MainAxisAlignment.end,
  413 + children: [
  414 + Expanded(
  415 + child: Container(
  416 + alignment: Alignment.center,
  417 + child: Text(answerList.word ?? '',
  418 + style: TextStyle(
  419 + fontSize: 20.sp,
  420 + color: const Color(0xFF333333))),
  421 + ),
434 ), 422 ),
435 - ),  
436 - alignment: Alignment.center,  
437 - child: Image.asset('choose'.assetPng),  
438 - )  
439 - ], 423 + Container(
  424 + height: 30.h,
  425 + width: double.infinity,
  426 + decoration: BoxDecoration(
  427 + color: bloc.selectItem == index
  428 + ? const Color(0xFF00B6F1)
  429 + : Colors.white,
  430 + borderRadius: BorderRadius.circular(15.r),
  431 + border: Border.all(
  432 + width: 1.5, color: const Color(0xFF140C10)),
  433 + ),
  434 + alignment: Alignment.center,
  435 + child: Image.asset('choose'.assetPng),
  436 + )
  437 + ],
  438 + ),
  439 + ),
440 ), 440 ),
441 - ),  
442 - ),  
443 - );  
444 - }); 441 + );
  442 + });
445 443
446 ///语音问答 444 ///语音问答
447 - Widget _voiceAnswerItem(CourseProcessTopics? topics) => BlocBuilder<TopicPictureBloc,TopicPictureState>(  
448 - builder: (context, state) { 445 + Widget _voiceAnswerItem(CourseProcessTopics? topics) =>
  446 + BlocBuilder<TopicPictureBloc, TopicPictureState>(
  447 + builder: (context, state) {
449 final bloc = BlocProvider.of<TopicPictureBloc>(context); 448 final bloc = BlocProvider.of<TopicPictureBloc>(context);
450 return Row( 449 return Row(
451 mainAxisAlignment: MainAxisAlignment.center, 450 mainAxisAlignment: MainAxisAlignment.center,
452 children: [ 451 children: [
453 OwImageWidget( 452 OwImageWidget(
454 - name:topics?.picUrl??'', 453 + name: topics?.picUrl ?? '',
455 height: 186.h, 454 height: 186.h,
456 width: 186.w, 455 width: 186.w,
457 ), 456 ),
@@ -470,12 +469,14 @@ class _TopicPicturePage extends StatelessWidget { @@ -470,12 +469,14 @@ class _TopicPicturePage extends StatelessWidget {
470 child: Row( 469 child: Row(
471 children: [ 470 children: [
472 Image.asset( 471 Image.asset(
473 - bloc.voicePlayState == VoicePlayState.playing?'reade_answer'.assetGif:'voice'.assetPng, 472 + bloc.voicePlayState == VoicePlayState.playing
  473 + ? 'reade_answer'.assetGif
  474 + : 'voice'.assetPng,
474 height: 52.h, 475 height: 52.h,
475 width: 46.w, 476 width: 46.w,
476 ), 477 ),
477 10.horizontalSpace, 478 10.horizontalSpace,
478 - Text(topics?.word??'') 479 + Text(topics?.word ?? '')
479 ], 480 ],
480 ), 481 ),
481 ), 482 ),
@@ -494,13 +495,17 @@ class _TopicPicturePage extends StatelessWidget { @@ -494,13 +495,17 @@ class _TopicPicturePage extends StatelessWidget {
494 } 495 }
495 if (topics?.type == TopicType.voiceQuestion.value || 496 if (topics?.type == TopicType.voiceQuestion.value ||
496 topics?.type == TopicType.voiceWord.value) { 497 topics?.type == TopicType.voiceWord.value) {
497 - bloc.add(XSVoiceStartEvent(topics?.keyWord??'', '0',UserUtil.getUser()!.id.toString())); 498 + bloc.add(XSVoiceStartEvent(topics?.keyWord ?? '', '0',
  499 + UserUtil.getUser()!.id.toString()));
498 } else { 500 } else {
499 - bloc.add(XSVoiceStartEvent(topics?.word??'', '0',UserUtil.getUser()!.id.toString())); 501 + bloc.add(XSVoiceStartEvent(topics?.word ?? '', '0',
  502 + UserUtil.getUser()!.id.toString()));
500 } 503 }
501 }, 504 },
502 child: Image.asset( 505 child: Image.asset(
503 - bloc.isVoicing?'micro_phone'.assetGif:'micro_phone'.assetPng, 506 + bloc.isVoicing
  507 + ? 'micro_phone'.assetGif
  508 + : 'micro_phone'.assetPng,
504 height: 75.w, 509 height: 75.w,
505 width: 75.w, 510 width: 75.w,
506 ), 511 ),
lib/pages/practice/widgets/practice_header_widget.dart
@@ -13,35 +13,35 @@ class PracticeHeaderWidget extends StatelessWidget { @@ -13,35 +13,35 @@ class PracticeHeaderWidget extends StatelessWidget {
13 Widget build(BuildContext context) { 13 Widget build(BuildContext context) {
14 return Container( 14 return Container(
15 color: Colors.white, 15 color: Colors.white,
16 - height: kToolbarHeight, 16 + height: kToolbarHeight + 3.h,
17 child: AppBar( 17 child: AppBar(
18 - leading: IconButton(  
19 - icon: Image.asset( 18 + leading: GestureDetector(
  19 + child: Image.asset(
20 'back_around'.assetPng, 20 'back_around'.assetPng,
21 - width: 40,  
22 - height: 40, 21 + width: 40.w,
  22 + height: 40.h,
23 ), 23 ),
24 - onPressed: () {  
25 - onTap();  
26 - }, 24 + onTap: () => {onTap()},
27 ), 25 ),
28 centerTitle: true, 26 centerTitle: true,
29 title: Container( 27 title: Container(
30 - height: 40.h,  
31 - padding: EdgeInsets.symmetric(horizontal: 27.w, vertical: 6.h),  
32 - decoration: BoxDecoration(  
33 - color: const Color(0xFF00B6F1),  
34 - borderRadius: BorderRadius.circular(20.r),  
35 - border: Border.all(  
36 - width: 1.0,  
37 - color: const Color(0xFF333333),  
38 - ),  
39 - ),  
40 - child: Text(  
41 - title,  
42 - style: TextStyle(fontSize: 15.sp, color: Colors.white),  
43 - ), 28 + height: 40.h,
  29 + width: 100.w, // 容器宽度
  30 + // padding: EdgeInsets.symmetric(horizontal: 27.w, vertical: 10.h),
  31 + alignment: Alignment.center,
  32 + decoration: BoxDecoration(
  33 + color: const Color(0xFF00B6F1),
  34 + borderRadius: BorderRadius.circular(20.r),
  35 + border: Border.all(
  36 + width: 1.0,
  37 + color: const Color(0xFF333333),
44 ), 38 ),
  39 + ),
  40 + child: Text(
  41 + title,
  42 + style: TextStyle(fontSize: 15.sp, color: Colors.white),
  43 + ),
  44 + ),
45 )); 45 ));
46 } 46 }
47 } 47 }