lovoj_video_editor 0.1.0
lovoj_video_editor: ^0.1.0 copied to clipboard
Custom short video recording & editing SDK for Flutter — CameraX/MediaCodec (Android) + AVFoundation (iOS).
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:lovoj_video_editor/lovoj_video_editor.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await VideoEditorSdk.initialize();
runApp(const ExampleApp());
}
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Lovoj Video Editor Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Lovoj Video Editor')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.videocam, size: 80, color: Colors.deepPurple),
const SizedBox(height: 24),
const Text('lovoj_video_editor', style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold)),
const SizedBox(height: 48),
FilledButton.icon(
onPressed: () => _openRecording(context),
icon: const Icon(Icons.fiber_manual_record),
label: const Text('Start Recording'),
),
],
),
),
);
}
void _openRecording(BuildContext context) {
Navigator.of(context).push<String>(
MaterialPageRoute(
builder: (_) => RecordingScreen(
config: const RecordingConfig(
countdownSec: 3,
enableCountdown: true,
autoMergeClips: true,
),
onRecordingComplete: (path) {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => EditorScreen(videoPath: path)),
);
},
),
),
);
}
}