Bonne avancée sur le refactoring du menu evenements

This commit is contained in:
DahoudG
2024-08-28 15:23:51 +00:00
parent 6059f64999
commit 7e1cb85160
10 changed files with 682 additions and 149 deletions

View File

@@ -30,6 +30,10 @@
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75"/>
</application>
<!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and

View File

@@ -4,4 +4,6 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

View File

@@ -0,0 +1,304 @@
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class AddEventDialog extends StatefulWidget {
const AddEventDialog({super.key});
@override
_AddEventDialogState createState() => _AddEventDialogState();
}
class _AddEventDialogState extends State<AddEventDialog> {
final _formKey = GlobalKey<FormState>();
String _title = '';
String _description = '';
DateTime? _selectedDate;
String? _imagePath;
String _location = '';
String _category = '';
String _link = '';
LatLng? _selectedLatLng;
@override
Widget build(BuildContext context) {
return Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
backgroundColor: const Color(0xFF2C2C3E),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_buildTitleField(),
const SizedBox(height: 10),
_buildDescriptionField(),
const SizedBox(height: 10),
_buildDatePicker(),
const SizedBox(height: 10),
_buildLocationField(context),
const SizedBox(height: 10),
_buildCategoryField(),
const SizedBox(height: 10),
_buildImagePicker(),
const SizedBox(height: 10),
_buildLinkField(),
const SizedBox(height: 20),
_buildSubmitButton(),
],
),
),
),
);
}
Widget _buildTitleField() {
return TextFormField(
decoration: InputDecoration(
labelText: 'Titre',
labelStyle: const TextStyle(color: Colors.white70),
filled: true,
fillColor: Colors.white.withOpacity(0.1),
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide.none,
),
prefixIcon: const Icon(Icons.title, color: Colors.white70),
),
style: const TextStyle(color: Colors.white),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Veuillez entrer un titre';
}
return null;
},
onSaved: (value) {
_title = value ?? '';
},
);
}
Widget _buildDescriptionField() {
return TextFormField(
decoration: InputDecoration(
labelText: 'Description',
labelStyle: const TextStyle(color: Colors.white70),
filled: true,
fillColor: Colors.white.withOpacity(0.1),
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide.none,
),
prefixIcon: const Icon(Icons.description, color: Colors.white70),
),
style: const TextStyle(color: Colors.white),
maxLines: 3,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Veuillez entrer une description';
}
return null;
},
onSaved: (value) {
_description = value ?? '';
},
);
}
Widget _buildDatePicker() {
return GestureDetector(
onTap: () async {
final DateTime? picked = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime.now(),
lastDate: DateTime(2101),
);
if (picked != null && picked != _selectedDate) {
setState(() {
_selectedDate = picked;
});
}
},
child: Container(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.1),
borderRadius: BorderRadius.circular(10.0),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
_selectedDate == null
? 'Sélectionnez une date'
: '${_selectedDate!.day}/${_selectedDate!.month}/${_selectedDate!.year}',
style: const TextStyle(color: Colors.white70),
),
const Icon(Icons.calendar_today, color: Colors.white70),
],
),
),
);
}
Widget _buildLocationField(BuildContext context) {
return GestureDetector(
onTap: () async {
final LatLng? pickedLocation = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const LocationPickerScreen(),
),
);
if (pickedLocation != null) {
setState(() {
_selectedLatLng = pickedLocation;
_location = '${pickedLocation.latitude}, ${pickedLocation.longitude}';
});
}
},
child: Container(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.1),
borderRadius: BorderRadius.circular(10.0),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
_selectedLatLng == null
? 'Sélectionnez une localisation'
: 'Localisation: $_location',
style: const TextStyle(color: Colors.white70),
),
const Icon(Icons.location_on, color: Colors.white70),
],
),
),
);
}
Widget _buildCategoryField() {
return TextFormField(
decoration: InputDecoration(
labelText: 'Catégorie',
labelStyle: const TextStyle(color: Colors.white70),
filled: true,
fillColor: Colors.white.withOpacity(0.1),
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide.none,
),
prefixIcon: const Icon(Icons.category, color: Colors.white70),
),
style: const TextStyle(color: Colors.white),
onSaved: (value) {
_category = value ?? '';
},
);
}
Widget _buildImagePicker() {
return GestureDetector(
onTap: () {
// Logique pour sélectionner une image
},
child: Container(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.1),
borderRadius: BorderRadius.circular(10.0),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
_imagePath == null ? 'Sélectionnez une image' : 'Image sélectionnée',
style: const TextStyle(color: Colors.white70),
),
const Icon(Icons.image, color: Colors.white70),
],
),
),
);
}
Widget _buildLinkField() {
return TextFormField(
decoration: InputDecoration(
labelText: 'Lien (optionnel)',
labelStyle: const TextStyle(color: Colors.white70),
filled: true,
fillColor: Colors.white.withOpacity(0.1),
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide.none,
),
prefixIcon: const Icon(Icons.link, color: Colors.white70),
),
style: const TextStyle(color: Colors.white),
onSaved: (value) {
_link = value ?? '';
},
);
}
Widget _buildSubmitButton() {
return ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
// Logique pour soumettre les données
Navigator.of(context).pop();
}
},
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF1DBF73),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
),
padding: const EdgeInsets.symmetric(vertical: 12.0),
minimumSize: const Size(double.infinity, 40),
),
child: const Text('Ajouter l\'événement', style: TextStyle(color: Colors.white)),
);
}
}
class LocationPickerScreen extends StatelessWidget {
const LocationPickerScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Sélectionnez une localisation'),
backgroundColor: const Color(0xFF1E1E2C),
),
body: GoogleMap(
initialCameraPosition: const CameraPosition(
target: LatLng(48.8566, 2.3522), // Paris par défaut
zoom: 12.0,
),
markers: Set<Marker>.of(<Marker>[
Marker(
markerId: const MarkerId('selectedLocation'),
position: LatLng(48.8566, 2.3522), // Position par défaut
draggable: true,
onDragEnd: (newPosition) {
Navigator.of(context).pop(newPosition);
},
)
]),
onTap: (position) {
Navigator.of(context).pop(position);
},
),
);
}
}

View File

@@ -0,0 +1,209 @@
import 'package:flutter/material.dart';
class EventCard extends StatelessWidget {
final String profileImage;
final String name;
final String datePosted;
final String eventTitle;
final String eventDescription;
final String eventImageUrl;
final int reactionsCount;
final int commentsCount;
final int sharesCount;
final VoidCallback onReact;
final VoidCallback onComment;
final VoidCallback onShare;
final VoidCallback onParticipate;
final VoidCallback onCloseEvent;
final VoidCallback onMoreOptions;
const EventCard({
Key? key,
required this.profileImage,
required this.name,
required this.datePosted,
required this.eventTitle,
required this.eventDescription,
required this.eventImageUrl,
required this.reactionsCount,
required this.commentsCount,
required this.sharesCount,
required this.onReact,
required this.onComment,
required this.onShare,
required this.onParticipate,
required this.onCloseEvent,
required this.onMoreOptions, required String assetImage,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Card(
color: const Color(0xFF2C2C3E),
margin: const EdgeInsets.symmetric(vertical: 10.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildHeader(),
const SizedBox(height: 10),
_buildEventDetails(),
const SizedBox(height: 10),
_buildEventImage(),
const SizedBox(height: 10),
Divider(color: Colors.white.withOpacity(0.2)),
_buildInteractionRow(),
const SizedBox(height: 10),
_buildParticipateButton(),
],
),
),
);
}
Widget _buildHeader() {
return Row(
children: [
CircleAvatar(
backgroundImage: AssetImage(profileImage),
radius: 25,
),
const SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
name,
style: const TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
Text(
datePosted,
style: const TextStyle(color: Colors.white70, fontSize: 14),
),
],
),
),
IconButton(
icon: const Icon(Icons.more_vert, color: Colors.white),
onPressed: onMoreOptions,
),
IconButton(
icon: const Icon(Icons.close, color: Colors.white),
onPressed: onCloseEvent,
),
],
);
}
Widget _buildEventDetails() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
eventTitle,
style: const TextStyle(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 5),
Text(
eventDescription,
style: const TextStyle(color: Colors.white70, fontSize: 14),
),
],
);
}
Widget _buildEventImage() {
return ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child: Image.network(
eventImageUrl,
height: 180,
width: double.infinity,
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'lib/assets/images/placeholder.png',
height: 180,
width: double.infinity,
fit: BoxFit.cover,
);
},
),
);
}
Widget _buildInteractionRow() {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildIconButton(
icon: Icons.thumb_up_alt_outlined,
label: 'Réagir',
count: reactionsCount,
onPressed: onReact,
),
_buildIconButton(
icon: Icons.comment_outlined,
label: 'Commenter',
count: commentsCount,
onPressed: onComment,
),
_buildIconButton(
icon: Icons.share_outlined,
label: 'Partager',
count: sharesCount,
onPressed: onShare,
),
],
),
);
}
Widget _buildIconButton({
required IconData icon,
required String label,
required int count,
required VoidCallback onPressed,
}) {
return Expanded(
child: TextButton.icon(
onPressed: onPressed,
icon: Icon(icon, color: const Color(0xFF1DBF73), size: 20),
label: Text(
'$label ($count)',
style: const TextStyle(color: Colors.white70, fontSize: 12),
),
),
);
}
Widget _buildParticipateButton() {
return ElevatedButton(
onPressed: onParticipate,
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF1DBF73),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
),
padding: const EdgeInsets.symmetric(vertical: 12.0),
minimumSize: const Size(double.infinity, 40),
),
child: const Text('Participer', style: TextStyle(color: Colors.white)),
);
}
}

View File

@@ -1,4 +1,6 @@
import 'package:flutter/material.dart';
import '../dialogs/add_event_dialog.dart';
import 'event_card.dart';
class EventScreen extends StatelessWidget {
const EventScreen({super.key});
@@ -13,130 +15,44 @@ class EventScreen extends StatelessWidget {
IconButton(
icon: const Icon(Icons.add_circle_outline, size: 28, color: Color(0xFF1DBF73)),
onPressed: () {
// Logique pour ajouter un nouvel événement
_showAddEventDialog(context);
},
),
],
),
body: ListView.builder(
padding: const EdgeInsets.all(16.0),
itemCount: 10, // Remplacez par le nombre réel d'événements
itemCount: 10,
itemBuilder: (context, index) {
return Card(
color: const Color(0xFF2C2C3E),
margin: const EdgeInsets.symmetric(vertical: 10.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Row(
children: [
CircleAvatar(
backgroundImage: NetworkImage(
'https://example.com/profile_picture.png', // Remplacez par l'URL réelle de l'image de profil
),
radius: 25,
),
SizedBox(width: 10),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Nom Prénom', // Remplacez par le nom réel
style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold),
),
Text(
'Posté le 24/08/2024', // Remplacez par la date réelle
style: TextStyle(color: Colors.white70, fontSize: 14),
),
],
),
],
),
const SizedBox(height: 10),
const Text(
'Titre de l\'événement', // Remplacez par le titre réel
style: TextStyle(color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 5),
const Text(
'Description détaillée de l\'événement...', // Remplacez par la description réelle
style: TextStyle(color: Colors.white70, fontSize: 14),
),
const SizedBox(height: 10),
ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child: Image.network(
'https://example.com/event_image.png', // Remplacez par l'URL réelle de l'image de l'événement
height: 180,
width: double.infinity,
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'lib/assets/images/placeholder.png', // Chemin vers une image de remplacement locale
height: 180,
width: double.infinity,
fit: BoxFit.cover,
);
},
),
),
const SizedBox(height: 10),
Divider(color: Colors.white.withOpacity(0.2)), // Ligne de séparation discrète
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildIconButton(
icon: Icons.thumb_up_alt_outlined,
label: 'Réagir',
count: 120, // Remplacez par le nombre réel de j'aimes
onPressed: () {
// Logique pour réagir à l'événement
},
),
_buildIconButton(
icon: Icons.comment_outlined,
label: 'Commenter',
count: 45, // Remplacez par le nombre réel de commentaires
onPressed: () {
// Logique pour commenter l'événement
},
),
_buildIconButton(
icon: Icons.share_outlined,
label: 'Partager',
count: 30, // Remplacez par le nombre réel de partages
onPressed: () {
// Logique pour partager l'événement
},
),
],
),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
// Logique pour participer à l'événement
},
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF1DBF73),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
),
padding: const EdgeInsets.symmetric(vertical: 12.0),
minimumSize: const Size(double.infinity, 40),
),
child: const Text('Participer', style: TextStyle(color: Colors.white)),
),
],
),
),
return EventCard(
profileImage: 'lib/assets/images/profile_picture.png',
name: 'Nom Prénom',
datePosted: 'Posté le 24/08/2024',
eventTitle: 'Titre de l\'événement',
eventDescription: 'Description détaillée de l\'événement...',
eventImageUrl: 'lib/assets/images/profile_picture.png',
reactionsCount: 120,
commentsCount: 45,
sharesCount: 30,
onReact: () {
// Logique pour réagir à l'événement
},
onComment: () {
// Logique pour commenter l'événement
},
onShare: () {
// Logique pour partager l'événement
},
onParticipate: () {
// Logique pour participer à l'événement
},
onCloseEvent: () {
// Logique pour fermer l'événement
},
onMoreOptions: () {
// Logique pour afficher plus d'options
},
assetImage: 'lib/assets/images/placeholder.png', // Ajoutez ce paramètre requis
);
},
),
@@ -144,26 +60,12 @@ class EventScreen extends StatelessWidget {
);
}
Widget _buildIconButton({
required IconData icon,
required String label,
required int count,
required VoidCallback onPressed,
}) {
return Container(
margin: const EdgeInsets.only(right: 8.0), // Espacement entre les boutons
child: Column(
children: [
IconButton(
icon: Icon(icon, color: const Color(0xFF1DBF73), size: 20),
onPressed: onPressed,
),
Text(
'$label ($count)',
style: const TextStyle(color: Colors.white70, fontSize: 12),
),
],
),
void _showAddEventDialog(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return const AddEventDialog();
},
);
}
}

View File

@@ -50,25 +50,25 @@ class ProfileScreen extends StatelessWidget {
}
Widget _buildUserInfoSection(BuildContext context) {
return Column(
return const Column(
children: [
const CircleAvatar(
CircleAvatar(
radius: 50,
backgroundImage: AssetImage('lib/assets/images/profile_picture.png'), // Remplacer par la photo de profil
backgroundImage: AssetImage('lib/assets/images/profile_picture.png'), //Photo de profil
),
const SizedBox(height: 10),
const Text(
'Nom Prénom',
SizedBox(height: 10),
Text(
'GBANE Dahoud',
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold, color: Colors.white),
),
const SizedBox(height: 5),
const Text(
SizedBox(height: 5),
Text(
'pseudo',
style: TextStyle(fontSize: 16, color: Colors.grey),
),
const SizedBox(height: 5),
const Text(
'email@example.com',
SizedBox(height: 5),
Text(
'gbanedahoud@lions.dev',
style: TextStyle(fontSize: 14, color: Colors.grey),
),
],

View File

@@ -49,6 +49,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.18.0"
csslib:
dependency: transitive
description:
name: csslib
sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
cupertino_icons:
dependency: "direct main"
description:
@@ -102,11 +110,24 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda"
url: "https://pub.dev"
source: hosted
version: "2.0.22"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
get_it:
dependency: "direct main"
description:
@@ -115,6 +136,62 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.7.0"
google_maps:
dependency: transitive
description:
name: google_maps
sha256: "463b38e5a92a05cde41220a11fd5eef3847031fef3e8cf295ac76ec453246907"
url: "https://pub.dev"
source: hosted
version: "8.0.0"
google_maps_flutter:
dependency: "direct main"
description:
name: google_maps_flutter
sha256: "2e302fa3aaf4e2a297f0342d83ebc5e8e9f826e9a716aef473fe7f404ec630a7"
url: "https://pub.dev"
source: hosted
version: "2.9.0"
google_maps_flutter_android:
dependency: transitive
description:
name: google_maps_flutter_android
sha256: "60a005bf1ba8d178144e442f6e2d734b0ffc2cc800a05415388472f934ad6d6a"
url: "https://pub.dev"
source: hosted
version: "2.14.4"
google_maps_flutter_ios:
dependency: transitive
description:
name: google_maps_flutter_ios
sha256: "3a484846fc56f15e47e3de1f5ea80a7ff2b31721d2faa88f390f3b3cf580c953"
url: "https://pub.dev"
source: hosted
version: "2.13.0"
google_maps_flutter_platform_interface:
dependency: transitive
description:
name: google_maps_flutter_platform_interface
sha256: "4f6930fd668bf5d40feb2695d5695dbc0c35e5542b557a34ad35be491686d2ba"
url: "https://pub.dev"
source: hosted
version: "2.9.0"
google_maps_flutter_web:
dependency: transitive
description:
name: google_maps_flutter_web
sha256: ff39211bd25d7fad125d19f757eba85bd154460907cd4d135e07e3d0f98a4130
url: "https://pub.dev"
source: hosted
version: "0.5.10"
html:
dependency: transitive
description:
name: html
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
url: "https://pub.dev"
source: hosted
version: "0.15.4"
http:
dependency: "direct main"
description:
@@ -203,6 +280,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.9.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
provider:
dependency: transitive
description:
@@ -211,6 +296,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.1.2"
sanitize_html:
dependency: transitive
description:
name: sanitize_html
sha256: "12669c4a913688a26555323fb9cec373d8f9fbe091f2d01c40c723b33caa8989"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
sky_engine:
dependency: transitive
description: flutter
@@ -240,6 +333,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.2"
stream_transform:
dependency: transitive
description:
name: stream_transform
sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
@@ -288,6 +389,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "14.2.5"
web:
dependency: transitive
description:
name: web
sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
url: "https://pub.dev"
source: hosted
version: "1.0.0"
sdks:
dart: ">=3.5.1 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"
flutter: ">=3.22.0"

View File

@@ -11,6 +11,7 @@ dependencies:
flutter:
sdk: flutter
google_maps_flutter: ^2.0.10
cupertino_icons: ^1.0.8
# State management with flutter_bloc
@@ -40,6 +41,8 @@ flutter:
assets:
- lib/assets/images/logo.png
- lib/assets/images/background.webp
- lib/assets/images/profile_picture.png
- lib/assets/images/placeholder.png
# To add assets to your application, add an assets section, like this:
# assets: