flet-audio 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flet-audio might be problematic. Click here for more details.
- flet_audio-0.1.0/PKG-INFO +43 -0
- flet_audio-0.1.0/README.md +29 -0
- flet_audio-0.1.0/pyproject.toml +36 -0
- flet_audio-0.1.0/setup.cfg +4 -0
- flet_audio-0.1.0/src/flet_audio/__init__.py +7 -0
- flet_audio-0.1.0/src/flet_audio/audio.py +294 -0
- flet_audio-0.1.0/src/flet_audio.egg-info/PKG-INFO +43 -0
- flet_audio-0.1.0/src/flet_audio.egg-info/SOURCES.txt +18 -0
- flet_audio-0.1.0/src/flet_audio.egg-info/dependency_links.txt +1 -0
- flet_audio-0.1.0/src/flet_audio.egg-info/requires.txt +1 -0
- flet_audio-0.1.0/src/flet_audio.egg-info/top_level.txt +2 -0
- flet_audio-0.1.0/src/flutter/flet_audio/CHANGELOG.md +3 -0
- flet_audio-0.1.0/src/flutter/flet_audio/LICENSE +201 -0
- flet_audio-0.1.0/src/flutter/flet_audio/README.md +3 -0
- flet_audio-0.1.0/src/flutter/flet_audio/analysis_options.yaml +4 -0
- flet_audio-0.1.0/src/flutter/flet_audio/lib/flet_audio.dart +3 -0
- flet_audio-0.1.0/src/flutter/flet_audio/lib/src/audio.dart +246 -0
- flet_audio-0.1.0/src/flutter/flet_audio/lib/src/create_control.dart +20 -0
- flet_audio-0.1.0/src/flutter/flet_audio/pubspec.lock +831 -0
- flet_audio-0.1.0/src/flutter/flet_audio/pubspec.yaml +18 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: flet-audio
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Audio control for Flet
|
|
5
|
+
Author-email: Flet contributors <hello@flet.dev>
|
|
6
|
+
Project-URL: Homepage, https://flet.dev
|
|
7
|
+
Project-URL: Documentation, https://flet.dev/docs/controls/audio
|
|
8
|
+
Project-URL: Repository, https://github.com/flet-dev/flet-audio
|
|
9
|
+
Project-URL: Issues, https://github.com/flet-dev/flet-audio/issues
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Requires-Python: >=3.8
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: flet>=0.25.1
|
|
14
|
+
|
|
15
|
+
# Flet Audio control
|
|
16
|
+
|
|
17
|
+
`Audio` control for Flet.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Add `flet-audio` as dependency (`pyproject.toml` or `requirements.txt`) to your Flet project.
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
```py
|
|
26
|
+
|
|
27
|
+
import flet as ft
|
|
28
|
+
|
|
29
|
+
import flet_audio as fta
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def main(page: ft.Page):
|
|
33
|
+
audio1 = fta.Audio(
|
|
34
|
+
src="https://luan.xyz/files/audio/ambient_c_motion.mp3", autoplay=True
|
|
35
|
+
)
|
|
36
|
+
page.overlay.append(audio1)
|
|
37
|
+
page.add(
|
|
38
|
+
ft.Text("This is an app with background audio."),
|
|
39
|
+
ft.ElevatedButton("Stop playing", on_click=lambda _: audio1.pause()),
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
ft.app(main)
|
|
43
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Flet Audio control
|
|
2
|
+
|
|
3
|
+
`Audio` control for Flet.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Add `flet-audio` as dependency (`pyproject.toml` or `requirements.txt`) to your Flet project.
|
|
8
|
+
|
|
9
|
+
## Example
|
|
10
|
+
|
|
11
|
+
```py
|
|
12
|
+
|
|
13
|
+
import flet as ft
|
|
14
|
+
|
|
15
|
+
import flet_audio as fta
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main(page: ft.Page):
|
|
19
|
+
audio1 = fta.Audio(
|
|
20
|
+
src="https://luan.xyz/files/audio/ambient_c_motion.mp3", autoplay=True
|
|
21
|
+
)
|
|
22
|
+
page.overlay.append(audio1)
|
|
23
|
+
page.add(
|
|
24
|
+
ft.Text("This is an app with background audio."),
|
|
25
|
+
ft.ElevatedButton("Stop playing", on_click=lambda _: audio1.pause()),
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
ft.app(main)
|
|
29
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "flet-audio"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Audio control for Flet"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "Flet contributors", email = "hello@flet.dev" }
|
|
8
|
+
]
|
|
9
|
+
classifiers = [
|
|
10
|
+
"License :: OSI Approved :: Apache Software License",
|
|
11
|
+
]
|
|
12
|
+
requires-python = ">=3.8"
|
|
13
|
+
dependencies = [
|
|
14
|
+
"flet>=0.25.1",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[project.urls]
|
|
18
|
+
Homepage = "https://flet.dev"
|
|
19
|
+
Documentation = "https://flet.dev/docs/controls/audio"
|
|
20
|
+
Repository = "https://github.com/flet-dev/flet-audio"
|
|
21
|
+
Issues = "https://github.com/flet-dev/flet-audio/issues"
|
|
22
|
+
|
|
23
|
+
[tool.setuptools.package-data]
|
|
24
|
+
"flutter.flet_audio" = ["**/*"]
|
|
25
|
+
|
|
26
|
+
[tool.uv]
|
|
27
|
+
dev-dependencies = [
|
|
28
|
+
"flet[all]>=0.25.1",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
[tool.setuptools]
|
|
32
|
+
license-files = []
|
|
33
|
+
|
|
34
|
+
[build-system]
|
|
35
|
+
requires = ["setuptools"]
|
|
36
|
+
build-backend = "setuptools.build_meta"
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Any, Optional
|
|
3
|
+
|
|
4
|
+
from flet.core.control import Control, OptionalNumber
|
|
5
|
+
from flet.core.control_event import ControlEvent
|
|
6
|
+
from flet.core.event_handler import EventHandler
|
|
7
|
+
from flet.core.ref import Ref
|
|
8
|
+
from flet.core.types import OptionalControlEventCallable, OptionalEventCallable
|
|
9
|
+
from flet.utils import deprecated
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ReleaseMode(Enum):
|
|
13
|
+
RELEASE = "release"
|
|
14
|
+
LOOP = "loop"
|
|
15
|
+
STOP = "stop"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AudioState(Enum):
|
|
19
|
+
STOPPED = "stopped"
|
|
20
|
+
PLAYING = "playing"
|
|
21
|
+
PAUSED = "paused"
|
|
22
|
+
COMPLETED = "completed"
|
|
23
|
+
DISPOSED = "disposed"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AudioStateChangeEvent(ControlEvent):
|
|
27
|
+
def __init__(self, e: ControlEvent):
|
|
28
|
+
super().__init__(e.target, e.name, e.data, e.control, e.page)
|
|
29
|
+
self.state: AudioState = AudioState(e.data)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class AudioPositionChangeEvent(ControlEvent):
|
|
33
|
+
def __init__(self, e: ControlEvent):
|
|
34
|
+
super().__init__(e.target, e.name, e.data, e.control, e.page)
|
|
35
|
+
self.position: int = int(e.data)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class AudioDurationChangeEvent(ControlEvent):
|
|
39
|
+
def __init__(self, e: ControlEvent):
|
|
40
|
+
super().__init__(e.target, e.name, e.data, e.control, e.page)
|
|
41
|
+
self.duration: int = int(e.data)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class Audio(Control):
|
|
45
|
+
"""
|
|
46
|
+
A control to simultaneously play multiple audio files. Works on macOS, Linux, Windows, iOS, Android and web. Based on audioplayers Flutter widget (https://pub.dev/packages/audioplayers).
|
|
47
|
+
|
|
48
|
+
Audio control is non-visual and should be added to `page.overlay` list.
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
```
|
|
52
|
+
import flet as ft
|
|
53
|
+
|
|
54
|
+
import flet_audio as fta
|
|
55
|
+
|
|
56
|
+
def main(page: ft.Page):
|
|
57
|
+
audio1 = fta.Audio(
|
|
58
|
+
src="https://luan.xyz/files/audio/ambient_c_motion.mp3", autoplay=True
|
|
59
|
+
)
|
|
60
|
+
page.overlay.append(audio1)
|
|
61
|
+
page.add(
|
|
62
|
+
ft.Text("This is an app with background audio."),
|
|
63
|
+
ft.ElevatedButton("Stop playing", on_click=lambda _: audio1.pause()),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
ft.app(target=main)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
-----
|
|
70
|
+
|
|
71
|
+
Online docs: https://flet.dev/docs/controls/audio
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
def __init__(
|
|
75
|
+
self,
|
|
76
|
+
src: Optional[str] = None,
|
|
77
|
+
src_base64: Optional[str] = None,
|
|
78
|
+
autoplay: Optional[bool] = None,
|
|
79
|
+
volume: OptionalNumber = None,
|
|
80
|
+
balance: OptionalNumber = None,
|
|
81
|
+
playback_rate: OptionalNumber = None,
|
|
82
|
+
release_mode: Optional[ReleaseMode] = None,
|
|
83
|
+
on_loaded: OptionalControlEventCallable = None,
|
|
84
|
+
on_duration_changed: OptionalEventCallable[AudioDurationChangeEvent] = None,
|
|
85
|
+
on_state_changed: OptionalEventCallable[AudioStateChangeEvent] = None,
|
|
86
|
+
on_position_changed: OptionalEventCallable[AudioPositionChangeEvent] = None,
|
|
87
|
+
on_seek_complete: OptionalControlEventCallable = None,
|
|
88
|
+
#
|
|
89
|
+
# Control
|
|
90
|
+
#
|
|
91
|
+
ref: Optional[Ref] = None,
|
|
92
|
+
data: Any = None,
|
|
93
|
+
):
|
|
94
|
+
Control.__init__(
|
|
95
|
+
self,
|
|
96
|
+
ref=ref,
|
|
97
|
+
data=data,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
self.__on_state_changed = EventHandler(lambda e: AudioStateChangeEvent(e))
|
|
101
|
+
self._add_event_handler("state_changed", self.__on_state_changed.get_handler())
|
|
102
|
+
|
|
103
|
+
self.__on_position_changed = EventHandler(lambda e: AudioPositionChangeEvent(e))
|
|
104
|
+
self._add_event_handler(
|
|
105
|
+
"position_changed", self.__on_position_changed.get_handler()
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
self.__on_duration_changed = EventHandler(lambda e: AudioDurationChangeEvent(e))
|
|
109
|
+
self._add_event_handler(
|
|
110
|
+
"duration_changed", self.__on_duration_changed.get_handler()
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
self.src = src
|
|
114
|
+
self.src_base64 = src_base64
|
|
115
|
+
self.autoplay = autoplay
|
|
116
|
+
self.volume = volume
|
|
117
|
+
self.balance = balance
|
|
118
|
+
self.playback_rate = playback_rate
|
|
119
|
+
self.release_mode = release_mode
|
|
120
|
+
self.on_loaded = on_loaded
|
|
121
|
+
self.on_duration_changed = on_duration_changed
|
|
122
|
+
self.on_state_changed = on_state_changed
|
|
123
|
+
self.on_position_changed = on_position_changed
|
|
124
|
+
self.on_seek_complete = on_seek_complete
|
|
125
|
+
|
|
126
|
+
def _get_control_name(self):
|
|
127
|
+
return "audio"
|
|
128
|
+
|
|
129
|
+
def play(self):
|
|
130
|
+
self.invoke_method("play")
|
|
131
|
+
|
|
132
|
+
def pause(self):
|
|
133
|
+
self.invoke_method("pause")
|
|
134
|
+
|
|
135
|
+
def resume(self):
|
|
136
|
+
self.invoke_method("resume")
|
|
137
|
+
|
|
138
|
+
def release(self):
|
|
139
|
+
self.invoke_method("release")
|
|
140
|
+
|
|
141
|
+
def seek(self, position_milliseconds: int):
|
|
142
|
+
self.invoke_method("seek", {"position": str(position_milliseconds)})
|
|
143
|
+
|
|
144
|
+
def get_duration(self, wait_timeout: Optional[float] = 5) -> Optional[int]:
|
|
145
|
+
sr = self.invoke_method(
|
|
146
|
+
"get_duration",
|
|
147
|
+
wait_for_result=True,
|
|
148
|
+
wait_timeout=wait_timeout,
|
|
149
|
+
)
|
|
150
|
+
return int(sr) if sr else None
|
|
151
|
+
|
|
152
|
+
async def get_duration_async(
|
|
153
|
+
self, wait_timeout: Optional[float] = 5
|
|
154
|
+
) -> Optional[int]:
|
|
155
|
+
sr = await self.invoke_method_async(
|
|
156
|
+
"get_duration",
|
|
157
|
+
wait_for_result=True,
|
|
158
|
+
wait_timeout=wait_timeout,
|
|
159
|
+
)
|
|
160
|
+
return int(sr) if sr else None
|
|
161
|
+
|
|
162
|
+
def get_current_position(self, wait_timeout: Optional[float] = 5) -> Optional[int]:
|
|
163
|
+
sr = self.invoke_method(
|
|
164
|
+
"get_current_position",
|
|
165
|
+
wait_for_result=True,
|
|
166
|
+
wait_timeout=wait_timeout,
|
|
167
|
+
)
|
|
168
|
+
return int(sr) if sr else None
|
|
169
|
+
|
|
170
|
+
async def get_current_position_async(
|
|
171
|
+
self, wait_timeout: Optional[float] = 5
|
|
172
|
+
) -> Optional[int]:
|
|
173
|
+
sr = await self.invoke_method_async(
|
|
174
|
+
"get_current_position",
|
|
175
|
+
wait_for_result=True,
|
|
176
|
+
wait_timeout=wait_timeout,
|
|
177
|
+
)
|
|
178
|
+
return int(sr) if sr else None
|
|
179
|
+
|
|
180
|
+
# src
|
|
181
|
+
@property
|
|
182
|
+
def src(self):
|
|
183
|
+
return self._get_attr("src")
|
|
184
|
+
|
|
185
|
+
@src.setter
|
|
186
|
+
def src(self, value):
|
|
187
|
+
self._set_attr("src", value)
|
|
188
|
+
|
|
189
|
+
# src_base64
|
|
190
|
+
@property
|
|
191
|
+
def src_base64(self):
|
|
192
|
+
return self._get_attr("srcBase64")
|
|
193
|
+
|
|
194
|
+
@src_base64.setter
|
|
195
|
+
def src_base64(self, value):
|
|
196
|
+
self._set_attr("srcBase64", value)
|
|
197
|
+
|
|
198
|
+
# autoplay
|
|
199
|
+
@property
|
|
200
|
+
def autoplay(self) -> bool:
|
|
201
|
+
return self._get_attr("autoplay", data_type="bool", def_value=False)
|
|
202
|
+
|
|
203
|
+
@autoplay.setter
|
|
204
|
+
def autoplay(self, value: Optional[bool]):
|
|
205
|
+
self._set_attr("autoplay", value)
|
|
206
|
+
|
|
207
|
+
# volume
|
|
208
|
+
@property
|
|
209
|
+
def volume(self) -> OptionalNumber:
|
|
210
|
+
return self._get_attr("volume")
|
|
211
|
+
|
|
212
|
+
@volume.setter
|
|
213
|
+
def volume(self, value: OptionalNumber):
|
|
214
|
+
if value is None or (0 <= value <= 1):
|
|
215
|
+
self._set_attr("volume", value)
|
|
216
|
+
|
|
217
|
+
# balance
|
|
218
|
+
@property
|
|
219
|
+
def balance(self) -> OptionalNumber:
|
|
220
|
+
return self._get_attr("balance")
|
|
221
|
+
|
|
222
|
+
@balance.setter
|
|
223
|
+
def balance(self, value: OptionalNumber):
|
|
224
|
+
if value is None or (-1 <= value <= 1):
|
|
225
|
+
self._set_attr("balance", value)
|
|
226
|
+
|
|
227
|
+
# playback_rate
|
|
228
|
+
@property
|
|
229
|
+
def playback_rate(self) -> OptionalNumber:
|
|
230
|
+
return self._get_attr("playbackRate")
|
|
231
|
+
|
|
232
|
+
@playback_rate.setter
|
|
233
|
+
def playback_rate(self, value: OptionalNumber):
|
|
234
|
+
if value is None or (0 <= value <= 2):
|
|
235
|
+
self._set_attr("playbackRate", value)
|
|
236
|
+
|
|
237
|
+
# release_mode
|
|
238
|
+
@property
|
|
239
|
+
def release_mode(self):
|
|
240
|
+
return self._get_attr("releaseMode")
|
|
241
|
+
|
|
242
|
+
@release_mode.setter
|
|
243
|
+
def release_mode(self, value: Optional[ReleaseMode]):
|
|
244
|
+
self._set_enum_attr("releaseMode", value, ReleaseMode)
|
|
245
|
+
|
|
246
|
+
# on_loaded
|
|
247
|
+
@property
|
|
248
|
+
def on_loaded(self):
|
|
249
|
+
return self._get_event_handler("loaded")
|
|
250
|
+
|
|
251
|
+
@on_loaded.setter
|
|
252
|
+
def on_loaded(self, handler: OptionalControlEventCallable):
|
|
253
|
+
self._add_event_handler("loaded", handler)
|
|
254
|
+
|
|
255
|
+
# on_duration_changed
|
|
256
|
+
@property
|
|
257
|
+
def on_duration_changed(self):
|
|
258
|
+
return self.__on_duration_changed.handler
|
|
259
|
+
|
|
260
|
+
@on_duration_changed.setter
|
|
261
|
+
def on_duration_changed(
|
|
262
|
+
self, handler: OptionalEventCallable[AudioDurationChangeEvent]
|
|
263
|
+
):
|
|
264
|
+
self.__on_duration_changed.handler = handler
|
|
265
|
+
|
|
266
|
+
# on_state_changed
|
|
267
|
+
@property
|
|
268
|
+
def on_state_changed(self):
|
|
269
|
+
return self.__on_state_changed.handler
|
|
270
|
+
|
|
271
|
+
@on_state_changed.setter
|
|
272
|
+
def on_state_changed(self, handler: OptionalEventCallable[AudioStateChangeEvent]):
|
|
273
|
+
self.__on_state_changed.handler = handler
|
|
274
|
+
|
|
275
|
+
# on_position_changed
|
|
276
|
+
@property
|
|
277
|
+
def on_position_changed(self):
|
|
278
|
+
return self.__on_position_changed.handler
|
|
279
|
+
|
|
280
|
+
@on_position_changed.setter
|
|
281
|
+
def on_position_changed(
|
|
282
|
+
self, handler: OptionalEventCallable[AudioPositionChangeEvent]
|
|
283
|
+
):
|
|
284
|
+
self.__on_position_changed.handler = handler
|
|
285
|
+
self._set_attr("onPositionChanged", True if handler is not None else None)
|
|
286
|
+
|
|
287
|
+
# on_seek_complete
|
|
288
|
+
@property
|
|
289
|
+
def on_seek_complete(self):
|
|
290
|
+
return self._get_event_handler("seek_complete")
|
|
291
|
+
|
|
292
|
+
@on_seek_complete.setter
|
|
293
|
+
def on_seek_complete(self, handler: OptionalControlEventCallable):
|
|
294
|
+
self._add_event_handler("seek_complete", handler)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: flet-audio
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Audio control for Flet
|
|
5
|
+
Author-email: Flet contributors <hello@flet.dev>
|
|
6
|
+
Project-URL: Homepage, https://flet.dev
|
|
7
|
+
Project-URL: Documentation, https://flet.dev/docs/controls/audio
|
|
8
|
+
Project-URL: Repository, https://github.com/flet-dev/flet-audio
|
|
9
|
+
Project-URL: Issues, https://github.com/flet-dev/flet-audio/issues
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Requires-Python: >=3.8
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: flet>=0.25.1
|
|
14
|
+
|
|
15
|
+
# Flet Audio control
|
|
16
|
+
|
|
17
|
+
`Audio` control for Flet.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Add `flet-audio` as dependency (`pyproject.toml` or `requirements.txt`) to your Flet project.
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
```py
|
|
26
|
+
|
|
27
|
+
import flet as ft
|
|
28
|
+
|
|
29
|
+
import flet_audio as fta
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def main(page: ft.Page):
|
|
33
|
+
audio1 = fta.Audio(
|
|
34
|
+
src="https://luan.xyz/files/audio/ambient_c_motion.mp3", autoplay=True
|
|
35
|
+
)
|
|
36
|
+
page.overlay.append(audio1)
|
|
37
|
+
page.add(
|
|
38
|
+
ft.Text("This is an app with background audio."),
|
|
39
|
+
ft.ElevatedButton("Stop playing", on_click=lambda _: audio1.pause()),
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
ft.app(main)
|
|
43
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
src/flet_audio/__init__.py
|
|
4
|
+
src/flet_audio/audio.py
|
|
5
|
+
src/flet_audio.egg-info/PKG-INFO
|
|
6
|
+
src/flet_audio.egg-info/SOURCES.txt
|
|
7
|
+
src/flet_audio.egg-info/dependency_links.txt
|
|
8
|
+
src/flet_audio.egg-info/requires.txt
|
|
9
|
+
src/flet_audio.egg-info/top_level.txt
|
|
10
|
+
src/flutter/flet_audio/CHANGELOG.md
|
|
11
|
+
src/flutter/flet_audio/LICENSE
|
|
12
|
+
src/flutter/flet_audio/README.md
|
|
13
|
+
src/flutter/flet_audio/analysis_options.yaml
|
|
14
|
+
src/flutter/flet_audio/pubspec.lock
|
|
15
|
+
src/flutter/flet_audio/pubspec.yaml
|
|
16
|
+
src/flutter/flet_audio/lib/flet_audio.dart
|
|
17
|
+
src/flutter/flet_audio/lib/src/audio.dart
|
|
18
|
+
src/flutter/flet_audio/lib/src/create_control.dart
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
flet>=0.25.1
|