bubble_showcase 0.1.0 bubble_showcase: ^0.1.0 copied to clipboard
BubbleShowcase is a small but powerful flutter package that allows you to highlight specific parts of your app to explain them to the user or to show your app new features.
import 'package:bubble_showcase/bubble_showcase.dart';
import 'package:flutter/material.dart';
import 'package:speech_bubble/speech_bubble.dart';
/// First plugin test method.
void main() => runApp(_BubbleShowcaseDemoApp());
/// The demo material app.
class _BubbleShowcaseDemoApp extends StatelessWidget {
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Bubble Showcase Demo',
home: Scaffold(
appBar: AppBar(
title: Text('Bubble Showcase Demo'),
),
body: _BubbleShowcaseDemoWidget(),
),
);
}
/// The main demo widget.
class _BubbleShowcaseDemoWidget extends StatelessWidget {
/// The title text global key.
final GlobalKey _titleKey = GlobalKey();
/// The first button global key.
final GlobalKey _firstButtonKey = GlobalKey();
@override
Widget build(BuildContext context) {
TextStyle textStyle = Theme.of(context).textTheme.body1.copyWith(
color: Colors.white,
);
return BubbleShowcase(
bubbleShowCaseId: 'my_bubble_showcase',
bubbleShowCaseVersion: 1,
bubbleSlides: [
_firstSlide(textStyle),
_secondSlide(textStyle),
_thirdSlide(textStyle),
],
child: _BubbleShowcaseDemoChild(_titleKey, _firstButtonKey),
);
}
/// Creates the first slide.
BubbleSlide _firstSlide(TextStyle textStyle) => RelativeBubbleSlide(
widgetKey: _titleKey,
child: RelativeBubbleSlideChild(
widget: Padding(
padding: EdgeInsets.only(top: 2),
child: SpeechBubble(
nipLocation: NipLocation.TOP,
color: Colors.blue,
child: Padding(
padding: EdgeInsets.all(10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
'That\'s cool !',
style: textStyle.copyWith(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
Text(
'This is my brand new title !',
style: textStyle,
),
],
),
),
),
),
),
);
/// Creates the second slide.
BubbleSlide _secondSlide(TextStyle textStyle) => AbsoluteBubbleSlide(
calculateHighlightPosition: (size) => Position(
top: 0,
right: 0,
left: 0,
bottom: size.height,
),
child: RelativeBubbleSlideChild(
widget: SpeechBubble(
nipLocation: NipLocation.LEFT,
color: Colors.teal,
child: Padding(
padding: EdgeInsets.all(10),
child: Text(
'Look at me pointing absolutely nothing.\n(Or maybe that\'s an hidden navigation bar !)',
style: textStyle,
),
),
),
direction: AxisDirection.right,
),
);
/// Creates the third slide.
BubbleSlide _thirdSlide(TextStyle textStyle) => RelativeBubbleSlide(
widgetKey: _firstButtonKey,
shape: Oval(
spreadRadius: 15,
),
child: RelativeBubbleSlideChild(
widget: Padding(
padding: EdgeInsets.only(top: 10),
child: SpeechBubble(
nipLocation: NipLocation.TOP,
color: Colors.purple,
child: Padding(
padding: EdgeInsets.all(10),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.only(right: 5),
child: Icon(
Icons.info_outline,
color: Colors.white,
),
),
Expanded(
child: Text(
'As said, this button is new.\nOh, and this one is oval by the way.',
style: textStyle,
),
),
],
),
),
),
),
),
);
}
/// The main demo widget child.
class _BubbleShowcaseDemoChild extends StatelessWidget {
/// The title text global key.
final GlobalKey _titleKey;
/// The first button global key.
final GlobalKey _firstButtonKey;
/// Creates a new bubble showcase demo child instance.
_BubbleShowcaseDemoChild(this._titleKey, this._firstButtonKey);
@override
Widget build(BuildContext context) => Padding(
padding: EdgeInsets.symmetric(
vertical: 40,
horizontal: 20,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
child: Text(
'Bubble Showcase',
key: _titleKey,
style: Theme.of(context).textTheme.display1,
textAlign: TextAlign.center,
),
width: MediaQuery.of(context).size.width,
),
Padding(
padding: EdgeInsets.only(top: 30),
child: RaisedButton(
child: Text('This button is NEW !'),
key: _firstButtonKey,
onPressed: () {},
),
),
RaisedButton(
child: Text('This button is old, please don\'t take care.'),
onPressed: () {},
)
],
),
);
}