video_appbar 0.0.1+2
video_appbar: ^0.0.1+2 copied to clipboard
This package allows the creation of AppBar with customizable embedded videos.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:video_appbar/video_appbar.dart';
void main() {
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
routes: {
'home': (context) => const HomeScreen(),
'second': (context) => const SecondScreen()
},
initialRoute: 'home',
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
static const characters = [
'brimstone',
'phoenix',
'sage',
'sova',
'vyper',
'cypher'
];
static const mainColor = Color(0xFFff4655);
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return SafeArea(
child: Scaffold(
backgroundColor: Colors.black87,
appBar: VideoAppBar(
source: VideoAppBarSource.asset(dataSource: 'res/video/video_01.mp4'),
height: 260,
actions: [
IconButton(
onPressed: null,
icon: Container(
padding: const EdgeInsets.all(6),
decoration: BoxDecoration(
color: mainColor,
borderRadius: BorderRadius.circular(25)),
child: const Icon(
Icons.person,
size: 22,
color: Colors.white,
),
))
],
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.black.withOpacity(0.25), Colors.black]),
body: Center(
child: Text(
'VideoAppBar body',
style: TextStyle(
fontSize: 26,
color: mainColor.withOpacity(0.6),
fontWeight: FontWeight.bold),
),
),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Expanded(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: size.height * 0.3,
mainAxisExtent: size.height * 0.38,
mainAxisSpacing: 10,
crossAxisSpacing: 10),
itemCount: characters.length,
itemBuilder: (_, index) {
return CharacterItem(character: characters[index]);
},
)),
],
),
),
),
);
}
}
class SecondScreen extends StatelessWidget {
const SecondScreen({super.key});
static const characters = [
'brimstone',
'phoenix',
'sage',
'sova',
'vyper',
'cypher'
];
static const mainColor = Color(0xFFff4655);
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: Colors.black87,
appBar: VideoAppBar(
source: VideoAppBarSource.asset(dataSource: 'res/video/video_02.mp4'),
height: 54,
),
body: Center(
child: TextButton(
onPressed: () => Navigator.pop(context),
child: const Text(
'Go to home',
style: TextStyle(fontSize: 16),
))),
),
);
}
}
class CharacterItem extends StatelessWidget {
const CharacterItem({
super.key,
required this.character,
});
final String character;
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
Navigator.pushNamed(context, 'second');
},
child: Column(
children: [
Expanded(
child: Image.asset(
'res/img/$character.webp',
fit: BoxFit.cover,
),
),
Row(
children: [
Expanded(
child: Container(
color: Colors.grey[200],
child: Text(
character.toUpperCase(),
style: const TextStyle(
fontSize: 16, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
],
)
],
),
);
}
}