Add message notification snackbar

This commit is contained in:
Thomas Fransolet 2021-05-06 20:55:52 +02:00
parent 69664c4bec
commit 6b0f3145c1
9 changed files with 55 additions and 84 deletions

View File

@ -1,30 +1,22 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class MessageNotification extends StatelessWidget { showNotification (Color backgroundColor, Color textColor, String text, BuildContext context) {
final VoidCallback onReplay; final snackBar = SnackBar(
behavior: SnackBarBehavior.floating,
const MessageNotification({Key key, this.onReplay}) : super(key: key); duration: const Duration(milliseconds: 1500),
width: 280.0, // Width of the SnackBar.
@override backgroundColor: backgroundColor,
Widget build(BuildContext context) { shape: RoundedRectangleBorder(
return Card( borderRadius: BorderRadius.circular(10.0),
margin: const EdgeInsets.symmetric(horizontal: 4),
child: SafeArea(
child: ListTile(
leading: SizedBox.fromSize(
size: const Size(40, 40),
child: Text("YOLO")),
title: Text('Lily MacDonald'),
subtitle: Text('Do you want to see a movie?'),
trailing: IconButton(
icon: Icon(Icons.reply),
onPressed: () {
///TODO i'm not sure it should be use this widget' BuildContext to create a Dialog
///maybe i will give the answer in the future
if (onReplay != null) onReplay();
}),
), ),
padding: const EdgeInsets.symmetric(
horizontal: 8.0, // Inner padding for SnackBar content.
), ),
content: Text(
text,
textAlign: TextAlign.center,
style: TextStyle(color: textColor),
)
); );
} ScaffoldMessenger.of(context).showSnackBar(snackBar);
} }

View File

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:manager_app/Components/confirmation_dialog.dart'; import 'package:manager_app/Components/confirmation_dialog.dart';
import 'package:manager_app/Components/fetch_section_icon.dart'; import 'package:manager_app/Components/fetch_section_icon.dart';
import 'package:manager_app/Components/message_notification.dart';
import 'package:manager_app/Components/multi_select_container.dart'; import 'package:manager_app/Components/multi_select_container.dart';
import 'package:manager_app/Components/multi_string_input_container.dart'; import 'package:manager_app/Components/multi_string_input_container.dart';
import 'package:manager_app/Components/rounded_button.dart'; import 'package:manager_app/Components/rounded_button.dart';
@ -10,7 +11,6 @@ import 'package:manager_app/app_context.dart';
import 'package:manager_app/client.dart'; import 'package:manager_app/client.dart';
import 'package:manager_app/constants.dart'; import 'package:manager_app/constants.dart';
import 'package:managerapi/api.dart'; import 'package:managerapi/api.dart';
import 'package:overlay_support/overlay_support.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -259,14 +259,7 @@ class _SectionDetailScreenState extends State<SectionDetailScreen> {
managerAppContext.selectedSection = section; managerAppContext.selectedSection = section;
appContext.setContext(managerAppContext); appContext.setContext(managerAppContext);
// popup a toast. showNotification(Colors.green, kWhite, 'La section a été sauvegardée avec succès', context);
toast('La section a été sauvegardée avec succès');
// show a notification at top of screen.
/*showSimpleNotification(
Text("La configuration a été sauvegardée avec succès"),
position: NotificationPosition.bottom,
background: Colors.green);*/
} }
getSpecificData(SectionDTO sectionDTO, AppContext appContext) { getSpecificData(SectionDTO sectionDTO, AppContext appContext) {

View File

@ -5,6 +5,7 @@ import 'package:flutter/painting.dart';
import 'package:manager_app/Components/color_picker_input_container.dart'; import 'package:manager_app/Components/color_picker_input_container.dart';
import 'package:manager_app/Components/confirmation_dialog.dart'; import 'package:manager_app/Components/confirmation_dialog.dart';
import 'package:manager_app/Components/fetch_section_icon.dart'; import 'package:manager_app/Components/fetch_section_icon.dart';
import 'package:manager_app/Components/message_notification.dart';
import 'package:manager_app/Components/multi_select_container.dart'; import 'package:manager_app/Components/multi_select_container.dart';
import 'package:manager_app/Components/rounded_button.dart'; import 'package:manager_app/Components/rounded_button.dart';
import 'package:manager_app/Components/string_input_container.dart'; import 'package:manager_app/Components/string_input_container.dart';
@ -14,7 +15,6 @@ import 'package:manager_app/app_context.dart';
import 'package:manager_app/client.dart'; import 'package:manager_app/client.dart';
import 'package:manager_app/constants.dart'; import 'package:manager_app/constants.dart';
import 'package:managerapi/api.dart'; import 'package:managerapi/api.dart';
import 'package:overlay_support/overlay_support.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -361,14 +361,7 @@ class _ConfigurationDetailScreenState extends State<ConfigurationDetailScreen> {
managerAppContext.selectedConfiguration = configuration; managerAppContext.selectedConfiguration = configuration;
appContext.setContext(managerAppContext); appContext.setContext(managerAppContext);
// popup a toast. showNotification(Colors.green, kWhite, 'La configuration a été sauvegardée avec succès', context);
toast('La configuration a été sauvegardée avec succès');
// show a notification at top of screen.
/*showSimpleNotification(
Text("La configuration a été sauvegardée avec succès"),
position: NotificationPosition.bottom,
background: Colors.green);*/
} }
Future<ConfigurationDTO> getConfiguration(ConfigurationDetailScreen widget, Client client) async { Future<ConfigurationDTO> getConfiguration(ConfigurationDetailScreen widget, Client client) async {

View File

@ -1,11 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:manager_app/Components/message_notification.dart';
import 'package:manager_app/Components/rounded_button.dart'; import 'package:manager_app/Components/rounded_button.dart';
import 'package:manager_app/Components/string_input_container.dart'; import 'package:manager_app/Components/string_input_container.dart';
import 'package:manager_app/Models/managerContext.dart'; import 'package:manager_app/Models/managerContext.dart';
import 'package:manager_app/app_context.dart'; import 'package:manager_app/app_context.dart';
import 'package:manager_app/constants.dart'; import 'package:manager_app/constants.dart';
import 'package:managerapi/api.dart'; import 'package:managerapi/api.dart';
import 'package:overlay_support/overlay_support.dart';
void showNewConfiguration(AppContext appContext, BuildContext context) { void showNewConfiguration(AppContext appContext, BuildContext context) {
ConfigurationDTO configurationDTO = new ConfigurationDTO(); ConfigurationDTO configurationDTO = new ConfigurationDTO();
@ -83,7 +83,6 @@ void create(ConfigurationDTO configurationDTO, AppContext appContext, context) a
managerAppContext.selectedConfiguration = null; managerAppContext.selectedConfiguration = null;
appContext.setContext(managerAppContext); appContext.setContext(managerAppContext);
// popup a toast. showNotification(Colors.green, kWhite, 'La configuration a été créée avec succès', context);
toast('La configuration a été créée avec succès');
} }
} }

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:manager_app/Components/message_notification.dart';
import 'package:manager_app/Components/multi_select_container.dart'; import 'package:manager_app/Components/multi_select_container.dart';
import 'package:manager_app/Components/rounded_button.dart'; import 'package:manager_app/Components/rounded_button.dart';
import 'package:manager_app/Components/string_input_container.dart'; import 'package:manager_app/Components/string_input_container.dart';
@ -6,7 +7,6 @@ import 'package:manager_app/Models/managerContext.dart';
import 'package:manager_app/app_context.dart'; import 'package:manager_app/app_context.dart';
import 'package:manager_app/constants.dart'; import 'package:manager_app/constants.dart';
import 'package:managerapi/api.dart'; import 'package:managerapi/api.dart';
import 'package:overlay_support/overlay_support.dart';
void showNewSection(ConfigurationDTO configurationDTO, AppContext appContext, BuildContext context) { void showNewSection(ConfigurationDTO configurationDTO, AppContext appContext, BuildContext context) {
SectionDTO sectionDTO = new SectionDTO(); SectionDTO sectionDTO = new SectionDTO();
@ -100,7 +100,6 @@ void create(SectionDTO sectionDTO, AppContext appContext, BuildContext context)
managerAppContext.selectedConfiguration.sectionIds.add(newSection.id); managerAppContext.selectedConfiguration.sectionIds.add(newSection.id);
appContext.setContext(managerAppContext); appContext.setContext(managerAppContext);
// popup a toast. showNotification(Colors.green, kWhite, 'La section a été créée avec succès !', context);
toast('La section a été créée avec succès');
} }
} }

View File

@ -1,13 +1,10 @@
import 'package:manager_app/Models/managerContext.dart'; import 'package:manager_app/Models/managerContext.dart';
import 'package:manager_app/Screens/Main/main_screen.dart'; import 'package:manager_app/Screens/Main/main_screen.dart';
import 'package:managerapi/api.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'Screens/login_screen.dart'; import 'Screens/login_screen.dart';
import 'app_context.dart'; import 'app_context.dart';
import 'client.dart';
import 'constants.dart'; import 'constants.dart';
import 'package:overlay_support/overlay_support.dart';
void main() { void main() {
String initialRoute; String initialRoute;
@ -37,7 +34,6 @@ class _MyAppState extends State<MyApp> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ChangeNotifierProvider<AppContext>( return ChangeNotifierProvider<AppContext>(
create: (_) => AppContext(widget.managerAppContext), create: (_) => AppContext(widget.managerAppContext),
child: OverlaySupport(
child: MaterialApp( child: MaterialApp(
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
title: 'Manager App Demo', title: 'Manager App Demo',
@ -58,7 +54,6 @@ class _MyAppState extends State<MyApp> {
'/main': (context) => MainScreen() '/main': (context) => MainScreen()
} }
), ),
),
); );
} }
} }

View File

@ -56,7 +56,7 @@ packages:
name: cupertino_icons name: cupertino_icons
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.2" version: "1.0.3"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@ -116,6 +116,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.10" version: "0.12.10"
material_segmented_control:
dependency: "direct main"
description:
name: material_segmented_control
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.2"
meta: meta:
dependency: transitive dependency: transitive
description: description:
@ -137,13 +144,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0" version: "1.0.0"
overlay_support:
dependency: "direct main"
description:
name: overlay_support
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5-hotfix1"
path: path:
dependency: transitive dependency: transitive
description: description:

View File

@ -26,10 +26,10 @@ dependencies:
rxdart: 0.22.0 rxdart: 0.22.0
provider: ^5.0.0 provider: ^5.0.0
overlay_support: 1.0.5-hotfix1
auto_size_text: ^2.1.0 auto_size_text: ^2.1.0
flutter_colorpicker: ^0.4.0 flutter_colorpicker: ^0.4.0
multiselect_formfield: ^0.1.6 multiselect_formfield: ^0.1.6
material_segmented_control: ^3.1.2
managerapi: managerapi:
path: manager_api path: manager_api