💄 Adjust UI
This commit is contained in:
@@ -23,6 +23,11 @@ class MyApp extends StatelessWidget {
|
|||||||
brightness: Brightness.light,
|
brightness: Brightness.light,
|
||||||
),
|
),
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
|
border: OutlineInputBorder(
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(12)),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
darkTheme: ThemeData(
|
darkTheme: ThemeData(
|
||||||
colorScheme: ColorScheme.fromSeed(
|
colorScheme: ColorScheme.fromSeed(
|
||||||
@@ -30,6 +35,11 @@ class MyApp extends StatelessWidget {
|
|||||||
brightness: Brightness.dark,
|
brightness: Brightness.dark,
|
||||||
),
|
),
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
|
border: OutlineInputBorder(
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(12)),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
themeMode: ThemeMode.system,
|
themeMode: ThemeMode.system,
|
||||||
home: const Shell(),
|
home: const Shell(),
|
||||||
|
|||||||
@@ -458,6 +458,7 @@ class LibraryScreen extends HookConsumerWidget {
|
|||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: const Text('Edit Track'),
|
title: const Text('Edit Track'),
|
||||||
content: Column(
|
content: Column(
|
||||||
|
spacing: 16,
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
TextField(
|
TextField(
|
||||||
|
|||||||
@@ -23,11 +23,7 @@ class PlayerScreen extends HookConsumerWidget {
|
|||||||
final tabController = useTabController(initialLength: 2);
|
final tabController = useTabController(initialLength: 2);
|
||||||
final isMobile = MediaQuery.sizeOf(context).width <= 640;
|
final isMobile = MediaQuery.sizeOf(context).width <= 640;
|
||||||
|
|
||||||
return Scaffold(
|
return StreamBuilder<Playlist>(
|
||||||
body: Stack(
|
|
||||||
children: [
|
|
||||||
// Main content (StreamBuilder)
|
|
||||||
StreamBuilder<Playlist>(
|
|
||||||
stream: player.stream.playlist,
|
stream: player.stream.playlist,
|
||||||
initialData: player.state.playlist,
|
initialData: player.state.playlist,
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
@@ -37,11 +33,15 @@ class PlayerScreen extends HookConsumerWidget {
|
|||||||
return const Center(child: Text('No media selected'));
|
return const Center(child: Text('No media selected'));
|
||||||
}
|
}
|
||||||
final media = medias[index];
|
final media = medias[index];
|
||||||
final path = Uri.decodeFull(Uri.parse(media.uri).path);
|
|
||||||
|
|
||||||
|
final path = Uri.decodeFull(Uri.parse(media.uri).path);
|
||||||
final metadataAsync = ref.watch(trackMetadataProvider(path));
|
final metadataAsync = ref.watch(trackMetadataProvider(path));
|
||||||
|
|
||||||
return Builder(
|
return Scaffold(
|
||||||
|
body: Stack(
|
||||||
|
children: [
|
||||||
|
// Main content (StreamBuilder)
|
||||||
|
Builder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
if (isMobile) {
|
if (isMobile) {
|
||||||
return Padding(
|
return Padding(
|
||||||
@@ -65,8 +65,6 @@ class PlayerScreen extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
// IconButton
|
// IconButton
|
||||||
Positioned(
|
Positioned(
|
||||||
@@ -85,6 +83,8 @@ class PlayerScreen extends HookConsumerWidget {
|
|||||||
top: MediaQuery.of(context).padding.top + 14,
|
top: MediaQuery.of(context).padding.top + 14,
|
||||||
left: 54,
|
left: 54,
|
||||||
right: 54,
|
right: 54,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 24),
|
||||||
child: TabBar(
|
child: TabBar(
|
||||||
controller: tabController,
|
controller: tabController,
|
||||||
tabAlignment: TabAlignment.fill,
|
tabAlignment: TabAlignment.fill,
|
||||||
@@ -98,9 +98,13 @@ class PlayerScreen extends HookConsumerWidget {
|
|||||||
splashFactory: NoSplash.splashFactory,
|
splashFactory: NoSplash.splashFactory,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
_LyricsRefreshButton(trackPath: path),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,21 +374,14 @@ class _PlayerLyrics extends HookConsumerWidget {
|
|||||||
final lyricsData = LyricsData.fromJsonString(track.lyrics!);
|
final lyricsData = LyricsData.fromJsonString(track.lyrics!);
|
||||||
|
|
||||||
if (lyricsData.type == 'timed') {
|
if (lyricsData.type == 'timed') {
|
||||||
return Stack(
|
return _TimedLyricsView(
|
||||||
children: [
|
|
||||||
_TimedLyricsView(
|
|
||||||
lyrics: lyricsData,
|
lyrics: lyricsData,
|
||||||
player: player,
|
player: player,
|
||||||
trackPath: trackPath!,
|
trackPath: trackPath!,
|
||||||
),
|
|
||||||
_LyricsRefreshButton(trackPath: trackPath!),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// Plain text lyrics
|
// Plain text lyrics
|
||||||
return Stack(
|
return ListView.builder(
|
||||||
children: [
|
|
||||||
ListView.builder(
|
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
itemCount: lyricsData.lines.length,
|
itemCount: lyricsData.lines.length,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
@@ -397,9 +394,6 @@ class _PlayerLyrics extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
|
||||||
_LyricsRefreshButton(trackPath: trackPath!),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user