Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mono0926/snack_bar_presenter
Provide easy and flexible way to show SnackBar. Simple text, undo, and error style are supported.
https://github.com/mono0926/snack_bar_presenter
banner dart flutter material material-design material-ui notification snackbar toast
Last synced: 3 months ago
JSON representation
Provide easy and flexible way to show SnackBar. Simple text, undo, and error style are supported.
- Host: GitHub
- URL: https://github.com/mono0926/snack_bar_presenter
- Owner: mono0926
- License: mit
- Created: 2020-07-12T01:28:55.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-09-14T05:40:18.000Z (over 4 years ago)
- Last Synced: 2024-10-07T07:56:24.116Z (4 months ago)
- Topics: banner, dart, flutter, material, material-design, material-ui, notification, snackbar, toast
- Language: Dart
- Homepage: https://pub.dev/packages/snack_bar_presenter
- Size: 176 KB
- Stars: 8
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# snack_bar_presenter
Provide easy and flexible way to show SnackBar. Simple text, undo, and error style are supported.
. | . | .
--- | --- | ---
![Screenshot_1594537088](https://user-images.githubusercontent.com/1255062/87240896-8a057100-c458-11ea-9343-9855868f723b.png) | ![Screenshot_1594537095](https://user-images.githubusercontent.com/1255062/87240897-8c67cb00-c458-11ea-958a-cbe70134903c.png) | ![Screenshot_1594537100](https://user-images.githubusercontent.com/1255062/87240899-8eca2500-c458-11ea-9efa-c23e4e386ec3.png)## Usage
```dart
import 'package:example/providers/providers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:snack_bar_presenter/snack_bar_presenter.dart';class BasicPage extends HookWidget {
const BasicPage({
Key key,
this.index = 0,
}) : super(key: key);final int index;
static const routeName = '/basic';
@override
Widget build(BuildContext context) {
final controller = useProvider(_controllers(index));
final canPop = useProvider(navigatorKeyProvider).currentState.canPop();
return Scaffold(
key: controller.scaffoldKey,
appBar: AppBar(title: Text('index: $index')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
RaisedButton(
child: const Text('Show SnackBar'),
onPressed: () => controller.showSnackBarMessage('Hey( ´・‿・`)'),
),
RaisedButton(
child: const Text('👉 Navigate to next page'),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => BasicPage(
index: index + 1,
),
),
);
},
),
if (canPop)
RaisedButton(
child: const Text('👈 Pop and show SnackBar'),
onPressed: controller.popAndShowSnackBar,
),
],
),
),
bottomNavigationBar: BottomAppBar(
child: Row(
children: [
IconButton(
icon: const Icon(Icons.add),
onPressed: () {},
)
],
),
),
);
}
}final _controllers = Provider.autoDispose.family<_Controller, int>(
(ref, __) {
final controller = _Controller(ref);
ref.onDispose(controller.dispose);
return controller;
},
);class _Controller with SnackBarMixin {
_Controller(this._ref) {
registerToStackBarPresenter();
}final ProviderReference _ref;
@override
SnackBarPresenter get snackBarPresenter =>
_ref.read(snackBarPresenterProvider);void popAndShowSnackBar() {
_ref.read(navigatorKeyProvider).currentState.pop();
// Remove registration before showing SnackBar
unregisterFromStackBarPresenter();
showSnackBarMessage('Came back( ´・‿・`)');
}void dispose() {
unregisterFromStackBarPresenter();
}
}
```