| 119ba920  liangchengyou
 
feat:视频播放器 | 1
2
3
4 |   import 'package:flutter/material.dart';
  import 'package:flutter_screenutil/flutter_screenutil.dart';
  import 'package:wow_english/common/extension/string_extension.dart';
  
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 5
6
7
8
9
10
11
12
13
14
15 |   enum OperationType {
    //返回
    back,
    //字幕
    subtitlesState,
    //静音
    audioState,
    //暂停/播放
    playState,
  }
  
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 16 |   class VideoOperaWidget extends StatefulWidget {
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 17
18
19
20
21 |     const VideoOperaWidget({super.key,
      this.currentTime = '00:00',
      this.totalTime = '00:00',
      this.degree = 0.0,
      this.actionEvent,
 | 
| 95e3448c  liangchengyou
 
feat:听音选图/选字 | 22 |       this.sliderChangeEvent,
 | 
| 842b7132  liangchengyou
 
feat:磨耳朵/练习页面调整 | 23
24 |       this.isPlay = true,
      this.title = 'song',
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 25 |     });
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 26
27
28
29
30 |     //当前播放时间
    final String currentTime;
    //总时间
    final String totalTime;
    final double degree;
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 31 |     final bool isPlay;
 | 
| 842b7132  liangchengyou
 
feat:磨耳朵/练习页面调整 | 32 |     final String title;
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 33 |     final Function(OperationType type)? actionEvent;
 | 
| 95e3448c  liangchengyou
 
feat:听音选图/选字 | 34 |     final Function(double degree)? sliderChangeEvent;
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 35
36
37
38
39
40
41
42 |   
    @override
    State<StatefulWidget> createState() {
      return _VideoOperaWidgetState();
    }
  }
  
  class _VideoOperaWidgetState extends State<VideoOperaWidget> {
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 43
44
45
46
47
48
49
50
51
52
53
54 |   
    //是否在滑动
    late bool isSlider;
    late double sliderValue;
  
    @override
    void initState() {
      super.initState();
      isSlider = false;
      sliderValue = 0.0;
    }
  
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 55
56 |     @override
    Widget build(BuildContext context) {
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 57
58
59
60
61
62
63
64
65 |       return SizedBox(
        width: double.infinity,
        height: double.infinity,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            SafeArea(
              child: Padding(
                padding: EdgeInsets.only(top: 11.h),
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 66
67
68
69
70 |                 child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Row(
                      children: [
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 71
72
73
74
75
76 |                         GestureDetector(
                          onTap: (){
                            widget.actionEvent?.call(OperationType.back);
                          },
                          child: Image.asset(
                              'back_around'.assetPng,
 | 
| 5b923179  吴启风
 
feat:导航栏优化 | 77
78 |                               height: 40.h,
                              width: 40.w
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 79 |                           ),
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 |                         ),
                        18.horizontalSpace,
                        Container(
                          height: 40.h,
                          alignment: Alignment.center,
                          decoration: BoxDecoration(
                              color: Colors.white,
                              borderRadius: BorderRadius.circular(6.r),
                              border: Border.all(
                                  width: 1.5,
                                  color: const Color(0xFF140C10)
                              )
                          ),
                          padding: EdgeInsets.symmetric(horizontal: 10.w),
                          child: Text(
 | 
| 842b7132  liangchengyou
 
feat:磨耳朵/练习页面调整 | 95 |                             widget.title,
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 96 |                             textAlign: TextAlign.center,
 | 
| 3c1d5c64  liangchengyou
 
feat:练习功能完成 | 97 |                             overflow: TextOverflow.clip,
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 98
99
100
101
102
103
104
105 |                             style: TextStyle(
                              fontSize: 20.sp,
                              color: const Color(0xFF333333),
                            ),
                          ),
                        )
                      ],
                    ),
 | 
| 842b7132  liangchengyou
 
feat:磨耳朵/练习页面调整 | 106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 |                     // GestureDetector(
                    //   onTap: () {
                    //     widget.actionEvent?.call(OperationType.subtitlesState);
                    //   },
                    //   child: Container(
                    //     height: 40.h,
                    //     alignment: Alignment.center,
                    //     decoration: BoxDecoration(
                    //         color: Colors.white,
                    //         borderRadius: BorderRadius.circular(6.r),
                    //         border: Border.all(
                    //             width: 1.5,
                    //             color: const Color(0xFF140C10)
                    //         )
                    //     ),
                    //     padding: EdgeInsets.symmetric(horizontal: 10.w),
                    //     child: Text(
                    //       '中/英',
                    //       style: TextStyle(
                    //         fontSize: 20.sp,
                    //         color: const Color(0xFF333333),
                    //       ),
                    //     ),
                    //   ),
                    // )
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 131
132 |                   ],
                ),
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148 |               ),
            ),
            Container(
              color: Colors.white10,
              height: 47.h+ScreenUtil().bottomBarHeight,
              padding: EdgeInsets.symmetric(horizontal: 11.w),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  Row(
                    children: [
                      IconButton(onPressed: (){
                        widget.actionEvent?.call(OperationType.playState);
                      }, icon: widget.isPlay?const Icon(Icons.pause,color: Colors.white,):const Icon(Icons.play_arrow,color: Colors.white),),
                      Expanded(
                        child: Slider(
 | 
| bff5c18b  liangchengyou
 
feat:修复滑动错误问题 | 149
150 |                           min:0,
                          max: 1.0,
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 151
152
153
154
155
156
157
158
159
160
161
162
163 |                           activeColor: Colors.blue,
                          inactiveColor: Colors.white,
                          value: isSlider?sliderValue:widget.degree,
                          onChangeStart: (value) {
                           setState(() {
                             isSlider = true;
                             sliderValue = value;
                           });
                          },
                          onChangeEnd: (value) {
                            setState(() {
                              isSlider = false;
                            });
 | 
| 95e3448c  liangchengyou
 
feat:听音选图/选字 | 164 |                             widget.sliderChangeEvent?.call(value);
 | 
| 91fe517a  liangchengyou
 
feat:看视频功能开发 | 165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185 |                           },
                          onChanged: (value) {
                            setState(() {
                              sliderValue = value;
                            });
                          },
                        ),
                      ),
                      Text(
                        '${widget.currentTime}/${widget.totalTime}',
                        style: TextStyle(
                          color: Colors.white,
                          fontSize: 12.sp
                        ),
                      )
                    ],
                  ),
                ],
              ),
            )
          ],
 | 
| 119ba920  liangchengyou
 
feat:视频播放器 | 186
187
188
189 |         ),
      );
    }
  }
 |