diff --git a/android/app/build.gradle b/android/app/build.gradle index 1acbe75..7241931 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -61,7 +61,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.akuhome.recook" - minSdkVersion 21 + minSdkVersion 24 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/lib/pages/live/live_stream/crop_video_page.dart b/lib/pages/live/live_stream/crop_video_page.dart index ecdbf59..f315384 100644 --- a/lib/pages/live/live_stream/crop_video_page.dart +++ b/lib/pages/live/live_stream/crop_video_page.dart @@ -4,6 +4,9 @@ import 'package:flutter/material.dart'; import 'package:recook/constants/constants.dart'; import 'package:recook/widgets/custom_app_bar.dart'; import 'package:recook/widgets/recook_back_button.dart'; +import 'package:video_trimmer/trim_editor.dart'; +import 'package:video_trimmer/video_trimmer.dart'; +import 'package:video_trimmer/video_viewer.dart'; class CropVideoPage extends StatefulWidget { final File file; @@ -14,9 +17,22 @@ class CropVideoPage extends StatefulWidget { } class _CropVideoPageState extends State { + Trimmer _trimmer = Trimmer(); + + double _startValue = 0.0; + double _endValue = 0.0; + + bool _isPlaying = false; + + bool _loading = true; @override void initState() { super.initState(); + _trimmer.loadVideo(videoFile: widget.file).then((_) { + setState(() { + _loading = false; + }); + }); } @override @@ -24,6 +40,7 @@ class _CropVideoPageState extends State { return Scaffold( backgroundColor: Color(0xFF232323), appBar: CustomAppBar( + elevation: 0, appBackground: Color(0xFF232323), leading: RecookBackButton(white: true), actions: [ @@ -44,6 +61,34 @@ class _CropVideoPageState extends State { SizedBox(width: rSize(15)), ], ), + body: _loading + ? Center(child: CircularProgressIndicator()) + : Column( + children: [ + Expanded( + child: VideoViewer(), + ), + Container( + margin: EdgeInsets.only(bottom: rSize(35)), + child: TrimEditor( + viewerWidth: MediaQuery.of(context).size.width, + fit: BoxFit.cover, + viewerHeight: rSize(68), + onChangeStart: (value) { + _startValue = value; + }, + onChangeEnd: (value) { + _endValue = value; + }, + onChangePlaybackState: (value) { + setState(() { + _isPlaying = value; + }); + }, + ), + ), + ], + ), ); } } diff --git a/lib/pages/live/sub_page/live_host_center_page.dart b/lib/pages/live/sub_page/live_host_center_page.dart index ad3faaf..3b75f55 100644 --- a/lib/pages/live/sub_page/live_host_center_page.dart +++ b/lib/pages/live/sub_page/live_host_center_page.dart @@ -1,11 +1,10 @@ import 'package:flutter/material.dart'; import 'package:recook/constants/header.dart'; +import 'package:recook/manager/user_manager.dart'; import 'package:recook/pages/live/sub_page/data_manager_page.dart'; -import 'package:recook/pages/user/order/order_return_status_page.dart'; import 'package:recook/utils/custom_route.dart'; import 'package:recook/widgets/recook_back_button.dart'; import 'package:recook/widgets/recook_indicator.dart'; -import 'package:recook/widgets/sc_tile.dart'; class LiveHostCenterPage extends StatefulWidget { LiveHostCenterPage({Key key}) : super(key: key); @@ -75,7 +74,7 @@ class _LiveHostCenterPageState extends State crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '吕贝贝', + UserManager.instance.user.info.nickname, style: TextStyle( color: Color(0xFF333333), fontSize: rSP(18), diff --git a/lib/pages/live/sub_page/user_home_page.dart b/lib/pages/live/sub_page/user_home_page.dart index e5b9c4e..95c9b6d 100644 --- a/lib/pages/live/sub_page/user_home_page.dart +++ b/lib/pages/live/sub_page/user_home_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:recook/constants/api.dart'; import 'package:recook/constants/constants.dart'; import 'package:recook/constants/styles.dart'; import 'package:recook/manager/user_manager.dart'; @@ -70,7 +71,17 @@ class _UserHomePageState extends State children: [ Row( children: [ - CircleAvatar(radius: rSize(54 / 2.0)), + widget.selfFlag + ? CircleAvatar( + radius: rSize(54 / 2.0), + backgroundImage: NetworkImage( + Api.getImgUrl(UserManager + .instance.user.info.headImgUrl), + ), + ) + : CircleAvatar( + radius: rSize(54 / 2.0), + ), SizedBox(width: rSize(10)), Expanded( child: Text( diff --git a/pubspec.lock b/pubspec.lock index bfc0505..c1590d4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -309,6 +309,20 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "5.2.1" + file_picker: + dependency: transitive + description: + name: file_picker + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.13.3" + file_picker_platform_interface: + dependency: transitive + description: + name: file_picker_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.1" fixnum: dependency: transitive description: @@ -342,6 +356,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" + flutter_ffmpeg: + dependency: transitive + description: + name: flutter_ffmpeg + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.10" flutter_gifimage: dependency: "direct main" description: @@ -1066,6 +1087,20 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.1.4" + video_thumbnail: + dependency: transitive + description: + name: video_thumbnail + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.2" + video_trimmer: + dependency: "direct main" + description: + name: video_trimmer + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.7" wakelock: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 36c34fd..a050f49 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -185,6 +185,8 @@ dependencies: camera: ^0.5.8+7 #工具类库 common_utils: ^1.2.1 + #视频剪辑 + video_trimmer: ^0.2.7 dev_dependencies: flutter_test: