aboutsummaryrefslogtreecommitdiffstats
path: root/lib/presentation/screens/media/play_list_table.dart
blob: 1159f68fe302ed1339a2ec46aebf7e02672cade9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter_ics_homescreen/core/utils/helpers.dart';
import 'package:flutter_ics_homescreen/export.dart';

class PlayListTable extends ConsumerStatefulWidget {
  const PlayListTable({super.key});

  @override
  ConsumerState<PlayListTable> createState() => _PlayListTableState();
}

class _PlayListTableState extends ConsumerState<PlayListTable> {
  bool isAudioSettingsEnabled = false;

  //@override
  //void initState() {
  //  super.initState();
  //}

  @override
  Widget build(BuildContext context) {
    final controller = ScrollController();
    var playlist = ref.watch(playlistProvider);
    var selectedPosition = ref.watch(mediaPlayerStateProvider
        .select((mediaplayer) => mediaplayer.playlistPosition));
    late String tableName = "USB";

    return Material(
        color: Colors.transparent,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Row(
                  children: [
                    Text(
                      tableName,
                      style: const TextStyle(
                          color: Colors.white,
                          fontWeight: FontWeight.w400,
                          fontSize: 40),
                    ),
                    InkWell(
                        customBorder: const CircleBorder(),
                        onTap: () {},
                        child: Opacity(
                          opacity: 0.5,
                          child: Padding(
                              padding: const EdgeInsets.all(8.0),
                              child: SvgPicture.asset(
                                "assets/AppleMusic.svg",
                                width: 32,
                              )),
                        )),
                  ],
                ),
                InkWell(
                    customBorder: const CircleBorder(),
                    onTap: () {
                      setState(() {
                        isAudioSettingsEnabled = !isAudioSettingsEnabled;
                        ref
                            .read(appProvider.notifier)
                            .update(AppState.audioSettings);
                      });
                    },
                    child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: SvgPicture.asset(
                          "assets/${isAudioSettingsEnabled ? "AudioSettingsPressed.svg" : "AudioSettings.svg"}",
                          width: 48,
                        )))
              ],
            ),
            Padding(
                padding: const EdgeInsets.only(right: 12),
                child: SizedBox(
                    height: 500,
                    child: RawScrollbar(
                        controller: controller,
                        thickness: 32,
                        thumbVisibility: true,
                        radius: const Radius.circular(10),
                        thumbColor: AGLDemoColors.periwinkleColor,
                        minThumbLength: 60,
                        interactive: true,
                        child: ScrollConfiguration(
                            behavior: ScrollConfiguration.of(context).copyWith(
                              scrollbars: false,
                              overscroll: false,
                            ),
                            child: CustomScrollView(
                                controller: controller,
                                physics: const ClampingScrollPhysics(),
                                slivers: <Widget>[
                                  SliverList.separated(
                                    itemCount: playlist.length,
                                    itemBuilder: (_, int index) {
                                      return Container(
                                        height: 92,
                                        margin:
                                            const EdgeInsets.only(right: 44),
                                        decoration: BoxDecoration(
                                            border: Border(
                                                left: selectedPosition ==
                                                        playlist[index].position
                                                    ? const BorderSide(
                                                        color: Colors.white,
                                                        width: 4)
                                                    : BorderSide.none),
                                            gradient: LinearGradient(
                                                colors: selectedPosition ==
                                                        playlist[index].position
                                                    ? [
                                                        AGLDemoColors
                                                            .neonBlueColor,
                                                        AGLDemoColors
                                                            .neonBlueColor
                                                            .withOpacity(0.15)
                                                      ]
                                                    : [
                                                        Colors.black,
                                                        Colors.black
                                                            .withOpacity(0.20)
                                                      ])),
                                        child: InkWell(
                                          onTap: () {
                                            setState(() {
                                              selectedPosition =
                                                  playlist[index].position;
                                              ref
                                                  .read(mpdClientProvider)
                                                  .pickTrack(
                                                      playlist[index].position);
                                            });
                                          },
                                          child: Padding(
                                            padding: const EdgeInsets.symmetric(
                                                vertical: 17, horizontal: 24),
                                            child: Column(
                                              children: [
                                                Expanded(
                                                    flex: 6,
                                                    child: Align(
                                                        alignment: Alignment
                                                            .centerLeft,
                                                        child: AutoSizeText(
                                                          playlist[index].title,
                                                          maxLines: 1,
                                                          style: TextStyle(
                                                              color:
                                                                  Colors.white,
                                                              fontSize: 40,
                                                              shadows: [
                                                                Helpers
                                                                    .dropShadowRegular
                                                              ]),
                                                        ))),
                                                Expanded(
                                                    flex: 4,
                                                    child: Align(
                                                        alignment: Alignment
                                                            .centerLeft,
                                                        child: Text(
                                                          playlist[index]
                                                              .artist,
                                                          style: TextStyle(
                                                              color:
                                                                  Colors.white,
                                                              fontSize: 22,
                                                              shadows: [
                                                                Helpers
                                                                    .dropShadowRegular
                                                              ]),
                                                        )))
                                              ],
                                            ),
                                          ),
                                        ),
                                      );
                                    },
                                    separatorBuilder: (_, __) {
                                      return const SizedBox(height: 8);
                                    },
                                  ),
                                ]))))),
          ],
        ));
  }
}