Flutter仿网易云音乐:播放界面
warning:
这篇文章距离上次修改已过200天,其中的内容可能已经有所变动。
为了创建一个Flutter仿网易云音乐的播放界面,你可以使用Stack
和CustomPainter
来自定义控件。以下是一个简化的播放界面示例:
import 'package:flutter/material.dart';
class NeteaseMusicPlayPage extends StatefulWidget {
@override
_NeteaseMusicPlayPageState createState() => _NeteaseMusicPlayPageState();
}
class _NeteaseMusicPlayPageState extends State<NeteaseMusicPlayPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
// 背景图片或颜色
Image.asset(
'assets/music_bg.jpg',
fit: BoxFit.cover,
width: double.infinity,
height: double.infinity,
),
// 遮罩效果
AnimatedContainer(
duration: Duration(milliseconds: 300),
color: Colors.black.withOpacity(0.7),
width: double.infinity,
height: double.infinity,
),
// 中间播放器控件
CenterPlayControls(),
],
),
);
}
}
class CenterPlayControls extends StatefulWidget {
@override
_CenterPlayControlsState createState() => _CenterPlayControlsState();
}
class _CenterPlayControlsState extends State<CenterPlayControls> {
@override
Widget build(BuildContext context) {
return Container(
width: 300,
height: 300,
child: Stack(
children: <Widget>[
// 圆形播放进度条
CustomPaint(
painter: CircleProgressPainter(
progress: 0.5, // 播放进度 0.0 到 1.0
),
),
// 中心播放按钮
Center(
child: IconButton(
icon: Icon(Icons.play_circle_filled),
iconSize: 60,
onPressed: () {},
),
),
// 歌曲信息和播放控件
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(
'歌曲名称',
style: TextStyle(color: Colors.white, fontSize: 16),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
Text(
'歌手名称',
style: TextStyle(color: Colors.white, fontSize: 14),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
// 播放控件(上一曲、播放、下一曲)
评论已关闭