Merge branch 'master' into WORK-EKA

WORK-EKA
root 2 years ago
commit 26569808b6

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.6.10'
ext.kotlin_version = '1.9.0'
repositories {
google()
mavenCentral()

@ -0,0 +1,120 @@
import 'package:flutter/Material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:ionicons/ionicons.dart';
import '../values/constants.dart';
class PhotoPostComponent extends StatelessWidget {
final bool empty;
const PhotoPostComponent({Key? key, required this.empty}) : super(key: key);
@override
Widget build(BuildContext context) {
return empty
? Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: postbutton, borderRadius: BorderRadius.circular(8)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Ionicons.camera,
size: 15,
color: Colors.white,
),
SizedBox(
width: 10,
),
Text(
'Prendre un selfie',
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontSize: 12),
)
]),
)
: Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: fillButton, borderRadius: BorderRadius.circular(8)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Selfie enregistré",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontSize: 12),
),
SizedBox(
width: 10,
),
Icon(
Icons.close,
size: 12,
color: Colors.white,
),
]),
);
}
}
class LocationPostComponent extends StatelessWidget {
final bool empty;
const LocationPostComponent({Key? key, required this.empty})
: super(key: key);
@override
Widget build(BuildContext context) {
return empty
? Container(
width: double.infinity,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: postbutton, borderRadius: BorderRadius.circular(8)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.location_on,
size: 15,
color: Colors.white,
),
SizedBox(
width: 10,
),
Text(
'Ajouter un lieu',
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontSize: 12),
)
]),
)
: Container(
width: double.infinity,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: fillButton, borderRadius: BorderRadius.circular(8)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Lieu enregistré",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontSize: 12),
),
SizedBox(
width: 10,
),
Icon(
Icons.close,
size: 12,
color: Colors.white,
),
]),
);
}
}

@ -1,26 +1,76 @@
import 'dart:io';
import 'package:animated_appear/animated_appear.dart';
import 'package:auto_size_text/auto_size_text.dart';
import 'package:circular_reveal_animation/circular_reveal_animation.dart';
import 'package:flutter/Material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:image_picker/image_picker.dart';
import 'package:insta_image_viewer/insta_image_viewer.dart';
import 'package:justmusic/values/constants.dart';
import 'package:text_scroll/text_scroll.dart';
import '../model/Music.dart';
import 'buttonPostComponent.dart';
class EditablePostComponent extends StatefulWidget {
const EditablePostComponent({Key? key}) : super(key: key);
final Music? music;
const EditablePostComponent({Key? key, this.music}) : super(key: key);
@override
State<EditablePostComponent> createState() => _EditablePostComponentState();
}
class _EditablePostComponentState extends State<EditablePostComponent> {
class _EditablePostComponentState extends State<EditablePostComponent>
with TickerProviderStateMixin {
final ImagePicker picker = ImagePicker();
late Animation<double> animation;
late AnimationController animationController;
File? image;
Future pickImage() async {
try {
final image = await ImagePicker().pickImage(source: ImageSource.gallery);
if (image == null) return;
final imageTemp = File(image.path);
setState(() {
this.image = imageTemp;
});
} on PlatformException catch (e) {
print('Failed to pick image: $e');
}
}
@override
void initState() {
animationController = AnimationController(
vsync: this,
duration: Duration(milliseconds: 400),
);
animation = CurvedAnimation(
parent: animationController,
curve: Curves.easeInOutSine,
);
animationController.forward();
super.initState();
}
@override
Widget build(BuildContext context) {
return ClipRRect(
borderRadius: BorderRadius.circular(25),
child: Container(
constraints: BoxConstraints(maxWidth: 400),
constraints: BoxConstraints(maxWidth: 400, minHeight: 500),
width: double.infinity,
color: warningBttnColor,
child: Column(
children: [
CircularRevealAnimation(
animation: animation,
centerOffset: Offset(30.w, -100),
child: Stack(
children: [
AspectRatio(
aspectRatio: 1 / 1,
@ -34,37 +84,147 @@ class _EditablePostComponentState extends State<EditablePostComponent> {
child: ClipRRect(
borderRadius: BorderRadius.circular(18),
// implement image
child: const Image(
image: AssetImage("assets/images/exemple_cover.png"),
child: widget.music == null
? Container(
color: grayColor,
width: double.infinity,
)
: Image(
image:
NetworkImage(widget.music?.cover ?? ""),
fit: BoxFit.cover,
width: double.infinity,
),
),
),
),
Padding(
padding: EdgeInsets.fromLTRB(15, 25, 15, 25),
image != null
? Positioned(
top: 10,
right: 10,
child: AnimatedAppear(
delay: Duration(milliseconds: 500),
duration: Duration(milliseconds: 400),
child: Container(
width: 110,
height: 110,
decoration: BoxDecoration(
image: DecorationImage(
image: FileImage(image!),
fit: BoxFit.cover,
),
color: grayColor,
borderRadius: BorderRadius.circular(20),
border: Border.all(
style: BorderStyle.solid,
color: Colors.white,
width: 4)),
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: InstaImageViewer(
backgroundIsTransparent: true,
child: Image(
image: FileImage(image!),
fit: BoxFit.cover,
),
),
),
),
))
: Container()
],
)),
widget.music != null
? Padding(
padding: const EdgeInsets.all(10),
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AutoSizeText(
"France, Lyon",
Flexible(
flex: 8,
child: TextScroll(
(widget.music?.title)!,
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontSize: 13.sp),
maxFontSize: 20,
height: 1,
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 26.h),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 500),
velocity:
Velocity(pixelsPerSecond: Offset(20, 0)),
)),
Padding(
padding: EdgeInsets.only(
bottom: 10.h, right: 5.w, left: 5.w),
child: ClipOval(
child: Container(
width: 5.h,
height: 5.h,
color: Colors.white,
),
Image(
image: AssetImage("assets/images/camera_icon.png"),
width: 30,
),
),
Flexible(
flex: 6,
child: Padding(
padding: EdgeInsets.only(bottom: 2),
child: TextScroll(
(widget.music?.artists[0].name)!,
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w300,
fontSize: 16.h),
mode: TextScrollMode.endless,
velocity:
Velocity(pixelsPerSecond: Offset(50, 20)),
pauseBetween: Duration(milliseconds: 500),
),
)),
Container(width: 10),
AutoSizeText(
"10 Juil. 2023",
"2013",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontSize: 13.sp),
color: Colors.white.withOpacity(0.5),
fontWeight: FontWeight.w300,
fontSize: 16.h),
textAlign: TextAlign.end,
maxFontSize: 20,
),
],
),
)
: Container(),
Container(
padding: EdgeInsets.fromLTRB(15, 15, 15, 25),
width: double.infinity,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 5,
child: GestureDetector(
onTap: () {
manageImage();
},
child: PhotoPostComponent(
empty: image == null,
),
),
),
SizedBox(
width: 15,
),
Expanded(
flex: 5,
child: LocationPostComponent(
empty: true,
),
),
],
),
),
Padding(
padding: EdgeInsets.fromLTRB(15, 0, 10, 25),
@ -110,4 +270,14 @@ class _EditablePostComponentState extends State<EditablePostComponent> {
),
));
}
void manageImage() {
if (image != null) {
setState(() {
image = null;
});
} else {
pickImage();
}
}
}

@ -9,7 +9,7 @@ class MusicListComponent extends StatelessWidget {
final bool playing;
final int index;
final Function(int) callback;
const MusicListComponent({
MusicListComponent({
Key? key,
required this.music,
required this.playing,

@ -10,8 +10,8 @@ class PlayButtonComponent extends StatefulWidget {
final Music music;
final Function callback;
final int index;
bool playing;
PlayButtonComponent(
final bool playing;
const PlayButtonComponent(
{Key? key,
required this.music,
required this.callback,
@ -63,7 +63,9 @@ class _PlayButtonComponentState extends State<PlayButtonComponent> {
child: AnimatedPlayButton(
stopped: false,
color: Colors.grey.withOpacity(0.3),
onPressed: () {},
onPressed: () {
print("cc");
},
),
));
}

@ -7,7 +7,6 @@ import 'package:google_fonts/google_fonts.dart';
import '../components/comment_component.dart';
import '../components/post_component.dart';
import '../components/top_nav_bar_component.dart';
import '../main.dart';
import '../values/constants.dart';
class FeedScreen extends StatefulWidget {
@ -123,6 +122,8 @@ class _FeedScreenState extends State<FeedScreen>
padding: EdgeInsets.only(
left: defaultPadding, right: defaultPadding),
child: SingleChildScrollView(
physics: BouncingScrollPhysics(
decelerationRate: ScrollDecelerationRate.fast),
child: Wrap(
// to apply margin in the main axis of the wrap
runSpacing: 10,
@ -236,10 +237,6 @@ class _FeedScreenState extends State<FeedScreen>
);
}
void _onModalClosed() {
print("modal closed");
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -251,6 +248,8 @@ class _FeedScreenState extends State<FeedScreen>
animation: animation,
centerOffset: Offset(30.w, -100),
child: SingleChildScrollView(
physics: const BouncingScrollPhysics(
decelerationRate: ScrollDecelerationRate.fast),
child: SizedBox(
width: double.infinity,
child: Align(

@ -5,6 +5,7 @@ import 'package:justmusic/components/back_button.dart';
import 'package:justmusic/screens/search_song_screen.dart';
import '../components/editable_post_component.dart';
import '../components/post_button_component.dart';
import '../model/Music.dart';
import '../values/constants.dart';
class PostScreen extends StatefulWidget {
@ -18,7 +19,8 @@ class _PostScreenState extends State<PostScreen>
with SingleTickerProviderStateMixin {
final scrollController = ScrollController();
late AnimationController _controller;
late Animation<double> _animation;
Music? selectedMusic;
@override
void initState() {
@ -27,15 +29,16 @@ class _PostScreenState extends State<PostScreen>
duration: const Duration(milliseconds: 400),
);
_animation = Tween<double>(begin: 0.0, end: 400.0).animate(
CurvedAnimation(
parent: _controller,
curve: Curves.easeOut,
),
);
super.initState();
}
void _selectMusic(Music music) {
Navigator.pop(context);
setState(() {
selectedMusic = music;
});
}
void openDetailPost() {
showModalBottomSheet(
transitionAnimationController: _controller,
@ -51,10 +54,10 @@ class _PostScreenState extends State<PostScreen>
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20), topRight: Radius.circular(20))),
builder: ((context) {
return const ClipRRect(
return ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20), topRight: Radius.circular(20)),
child: SearchSongScreen());
child: SearchSongScreen(callback: _selectMusic));
}),
);
}
@ -90,10 +93,7 @@ class _PostScreenState extends State<PostScreen>
fit: BoxFit.cover,
),
),
child: Stack(
alignment: Alignment.topCenter,
children: [
ScrollConfiguration(
child: ScrollConfiguration(
behavior: ScrollBehavior().copyWith(scrollbars: false),
child: SingleChildScrollView(
controller: scrollController,
@ -105,8 +105,7 @@ class _PostScreenState extends State<PostScreen>
),
GestureDetector(
onTap: openDetailPost,
child: EditablePostComponent(),
),
child: EditablePostComponent(music: selectedMusic)),
SizedBox(
height: 40.h,
),
@ -118,8 +117,6 @@ class _PostScreenState extends State<PostScreen>
),
),
),
],
),
),
);
}

@ -60,6 +60,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
height: double.infinity,
color: bgColor,
child: SingleChildScrollView(
physics: const BouncingScrollPhysics(
decelerationRate: ScrollDecelerationRate.fast),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: settingPadding),
child: Column(

@ -11,7 +11,8 @@ import '../values/constants.dart';
import '../main.dart';
class SearchSongScreen extends StatefulWidget {
const SearchSongScreen({Key? key}) : super(key: key);
final Function callback;
const SearchSongScreen({Key? key, required this.callback}) : super(key: key);
@override
State<SearchSongScreen> createState() => _SearchSongScreenState();
@ -165,29 +166,41 @@ class _SearchSongScreenState extends State<SearchSongScreen> {
child: ScrollConfiguration(
behavior: ScrollBehavior().copyWith(scrollbars: true),
child: ListView.builder(
physics: const BouncingScrollPhysics(
decelerationRate: ScrollDecelerationRate.fast),
controller: _scrollController,
itemCount: filteredData.length,
itemBuilder: (context, index) {
if (playingIndex == index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
return InkWell(
onTap: () {
widget.callback(filteredData[index]);
},
child: Padding(
padding:
const EdgeInsets.symmetric(horizontal: 20),
child: MusicListComponent(
music: filteredData[index],
playing: true,
callback: playMusic,
index: index,
),
);
));
}
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
return InkWell(
onTap: () {
widget.callback(filteredData[index]);
},
child: Padding(
padding:
const EdgeInsets.symmetric(horizontal: 20),
child: MusicListComponent(
music: filteredData[index],
playing: false,
callback: playMusic,
index: index,
),
);
));
}),
))
],

@ -20,6 +20,8 @@ const bgAppBar = Color(0xFF181818);
const grayText = Color(0xFF898989);
const settingColor = Color(0xFF232323);
const searchBarColor = Color(0xFF161616);
const postbutton = Color(0xFF1B1B1B);
const fillButton = Color(0xFF633AF4);
// All constants important too us
const defaultPadding = 30.0;

@ -1,14 +1,22 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
animated_appear:
dependency: "direct main"
description:
name: animated_appear
sha256: "53097d7bb6d5e4a1a3a74c8f3028c47c87101c6ec8903f2002372d1eb5aee991"
url: "https://pub.dev"
source: hosted
version: "0.0.4"
async:
dependency: transitive
description:
name: async
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.10.0"
version: "2.11.0"
audioplayers:
dependency: "direct main"
description:
@ -85,10 +93,10 @@ packages:
dependency: transitive
description:
name: characters
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.3.0"
circular_reveal_animation:
dependency: "direct main"
description:
@ -109,18 +117,26 @@ packages:
dependency: transitive
description:
name: collection
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
url: "https://pub.dev"
source: hosted
version: "1.17.0"
version: "1.17.1"
cross_file:
dependency: transitive
description:
name: cross_file
sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9"
url: "https://pub.dev"
source: hosted
version: "0.3.3+4"
crypto:
dependency: transitive
description:
name: crypto
sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.0.3"
cupertino_icons:
dependency: "direct main"
description:
@ -161,6 +177,38 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.1.4"
file_selector_linux:
dependency: transitive
description:
name: file_selector_linux
sha256: "770eb1ab057b5ae4326d1c24cc57710758b9a46026349d021d6311bd27580046"
url: "https://pub.dev"
source: hosted
version: "0.9.2"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "4ada532862917bf16e3adb3891fe3a5917a58bae03293e497082203a80909412"
url: "https://pub.dev"
source: hosted
version: "0.9.3+1"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: "412705a646a0ae90f33f37acfae6a0f7cbc02222d6cd34e479421c3e74d3853c"
url: "https://pub.dev"
source: hosted
version: "2.6.0"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: "1372760c6b389842b77156203308940558a2817360154084368608413835fc26"
url: "https://pub.dev"
source: hosted
version: "0.9.3"
flutter:
dependency: "direct main"
description: flutter
@ -182,14 +230,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.2"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "950e77c2bbe1692bc0874fc7fb491b96a4dc340457f4ea1641443d0a6c1ea360"
url: "https://pub.dev"
source: hosted
version: "2.0.15"
flutter_screenutil:
dependency: "direct main"
description:
name: flutter_screenutil
sha256: "0a122936b450324cbdfd51be0819cc6fcebb093eb65585e9cd92263f7a1a8a39"
sha256: "1b61f8c4cbf965104b6ca7160880ff1af6755aad7fec70b58444245132453745"
url: "https://pub.dev"
source: hosted
version: "5.7.0"
version: "5.8.4"
flutter_signin_button:
dependency: "direct main"
description:
@ -244,10 +300,10 @@ packages:
dependency: "direct main"
description:
name: http
sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2"
url: "https://pub.dev"
source: hosted
version: "0.13.5"
version: "0.13.6"
http_parser:
dependency: transitive
description:
@ -256,6 +312,78 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.2"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: "6296e98782726d37f59663f0727d0e978eee1ced1ffed45ccaba591786a7f7b3"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "8179b54039b50eee561676232304f487602e2950ffb3e8995ed9034d6505ca34"
url: "https://pub.dev"
source: hosted
version: "0.8.7+4"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "869fe8a64771b7afbc99fc433a5f7be2fea4d1cb3d7c11a48b6b579eb9c797f0"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: b3e2f21feb28b24dd73a35d7ad6e83f568337c70afab5eabac876e23803f264b
url: "https://pub.dev"
source: hosted
version: "0.8.8"
image_picker_linux:
dependency: transitive
description:
name: image_picker_linux
sha256: "02cbc21fe1706b97942b575966e5fbbeaac535e76deef70d3a242e4afb857831"
url: "https://pub.dev"
source: hosted
version: "0.2.1"
image_picker_macos:
dependency: transitive
description:
name: image_picker_macos
sha256: cee2aa86c56780c13af2c77b5f2f72973464db204569e1ba2dd744459a065af4
url: "https://pub.dev"
source: hosted
version: "0.2.1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: c1134543ae2187e85299996d21c526b2f403854994026d575ae4cf30d7bb2a32
url: "https://pub.dev"
source: hosted
version: "2.9.0"
image_picker_windows:
dependency: transitive
description:
name: image_picker_windows
sha256: c3066601ea42113922232c7b7b3330a2d86f029f685bba99d82c30e799914952
url: "https://pub.dev"
source: hosted
version: "0.2.1"
insta_image_viewer:
dependency: "direct main"
description:
name: insta_image_viewer
sha256: "9a81432b1ab907ea91c255ec079440afe43f999533422badffaa482dfb7fdfbb"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
ionicons:
dependency: "direct main"
description:
@ -268,26 +396,26 @@ packages:
dependency: transitive
description:
name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev"
source: hosted
version: "0.6.5"
version: "0.6.7"
lints:
dependency: transitive
description:
name: lints
sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
version: "2.1.1"
matcher:
dependency: transitive
description:
name: matcher
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
url: "https://pub.dev"
source: hosted
version: "0.12.13"
version: "0.12.15"
material_color_utilities:
dependency: transitive
description:
@ -300,10 +428,18 @@ packages:
dependency: transitive
description:
name: meta
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
version: "1.9.1"
mime:
dependency: transitive
description:
name: mime
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
url: "https://pub.dev"
source: hosted
version: "1.0.4"
modal_bottom_sheet:
dependency: "direct main"
description:
@ -316,10 +452,10 @@ packages:
dependency: transitive
description:
name: path
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev"
source: hosted
version: "1.8.2"
version: "1.8.3"
path_provider:
dependency: transitive
description:
@ -368,6 +504,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.7"
pinch_zoom:
dependency: "direct main"
description:
name: pinch_zoom
sha256: ad12872281742726afaf03438d99a4572c584a612630768953beb6dfd6f9389a
url: "https://pub.dev"
source: hosted
version: "1.0.0"
platform:
dependency: transitive
description:
@ -397,6 +541,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
smooth_list_view:
dependency: "direct main"
description:
name: smooth_list_view
sha256: d6eb3bed78881c50d4574b0dd466ed3321972477688c1c021178f3132155112a
url: "https://pub.dev"
source: hosted
version: "1.0.4"
source_span:
dependency: transitive
description:
@ -449,10 +601,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
url: "https://pub.dev"
source: hosted
version: "0.4.16"
version: "0.5.1"
text_scroll:
dependency: "direct main"
description:
@ -497,10 +649,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c"
sha256: f2add6fa510d3ae152903412227bda57d0d5a8da61d2c39c1fb022c9429a41c0
url: "https://pub.dev"
source: hosted
version: "4.1.4"
version: "5.0.6"
xdg_directories:
dependency: transitive
description:
@ -518,5 +670,5 @@ packages:
source: hosted
version: "1.1.0"
sdks:
dart: ">=2.18.2 <3.0.0"
flutter: ">=3.3.0"
dart: ">=3.0.0 <4.0.0"
flutter: ">=3.10.0"

@ -53,6 +53,11 @@ dependencies:
audioplayers: ^4.1.0
ionicons: ^0.2.2
top_snackbar_flutter: ^3.1.0
image_picker: ^1.0.1
insta_image_viewer: ^1.0.2
pinch_zoom: ^1.0.0
smooth_list_view: ^1.0.4
animated_appear: ^0.0.4
dev_dependencies:
flutter_test:

Loading…
Cancel
Save