Pop-up is like a dialog box that gains complete focus when it appears on the screen. Pop-up is usually used to show some additional information or something a user wants to know after an event takes place.
In this tutorial, we will create a pop-up widget with Flutter framework. It will show some normal and clickable text. The final widget will look like this.
If you haven't installed and set-up Flutter. I suggest you do it and read base of Flutter from here:- Flutter - Introduction and setup
As we know, everything in flutter is a widget. So, we going to create a widget that will display a pop-up alert with an image and clickable text. Let's start it.
1. Create a flutter project as I have explained here:- Flutter - Introduction, and setup.
2. Open main.dart file and start building widget.
3. To build a pop-up, we going to use the stateful widget.
4. After that create state class that will manage a state of the widget.
5. Now, start modifying the build method.
6. Create a RaisedButton widget that will show a pop-up when we click on it.
It will look like:-
7. Now, Let's create the main part of the tutorial that is a pop-up widget.
above is a container for our pop-up. It contains other widget and a FloatButton. We use it for the close pop-up.
As you can see, we have created _buildAboutText() and _buildLogoAttribution() widgets. Here, _buildAboutText() show some text information of pop and _buildLogoAttribution() will show image on pop-up.
8. To manage clickable content. We have to add url_launcher: ^3.0.0 dependency as I have used.
It will help us to navigate to other Application of OS. Like here, we will move on chrome to open a website.
9. After that create TapGestureRecognizer for those content where you want to click.
10. Create assets folder on the root of the project and put any png file as i have put flutter.png.
At the end, let's see complete main.dart file.
Put above main.dart file in your project and resource. Now, run it and view the pop-up action.In this tutorial, we will create a pop-up widget with Flutter framework. It will show some normal and clickable text. The final widget will look like this.
If you haven't installed and set-up Flutter. I suggest you do it and read base of Flutter from here:- Flutter - Introduction and setup
As we know, everything in flutter is a widget. So, we going to create a widget that will display a pop-up alert with an image and clickable text. Let's start it.
1. Create a flutter project as I have explained here:- Flutter - Introduction, and setup.
2. Open main.dart file and start building widget.
3. To build a pop-up, we going to use the stateful widget.
class Home extends StatefulWidget { StatefulWidget
const Home();
@override
_HomeState createState() => new _HomeState();
}
4. After that create state class that will manage a state of the widget.
class _HomeState extends State<Home> { Widget State Class
}
5. Now, start modifying the build method.
@override Main build
Widget build(BuildContext context) {
return new Container(
//We have set padding from top of screen.
padding: const EdgeInsets.only(top: 100.0),
//Screen Theme.
color: Theme.of(context).scaffoldBackgroundColor,
// It will display a button. Will will display pop-up on click here.
child: new Column(
children: <Widget>[
home(context),
],
),
);
}
6. Create a RaisedButton widget that will show a pop-up when we click on it.
Widget home(BuildContext context) {
return new Material(
child: new RaisedButton(
child: const Text('Show'),
color: Theme.of(context).accentColor,
elevation: 4.0,
splashColor: Colors.amberAccent,
textColor: const Color(0xFFFFFFFF),
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) => _buildAboutDialog(context),
);
// Perform some action
},
),
);
}
FF),It will look like:-
7. Now, Let's create the main part of the tutorial that is a pop-up widget.
Widget _buildAboutDialog(BuildContext context) {
return new AlertDialog(
title: const Text('About Pop up'),
content: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
_buildAboutText(),
_buildLogoAttribution(),
],
)
actions: <Widget>[
new FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
textColor: Theme.of(context).primaryColor,
child: const Text('Okay, got it!'),
),
],
);
}
rimaryColor,above is a container for our pop-up. It contains other widget and a FloatButton. We use it for the close pop-up.
As you can see, we have created _buildAboutText() and _buildLogoAttribution() widgets. Here, _buildAboutText() show some text information of pop and _buildLogoAttribution() will show image on pop-up.
8. To manage clickable content. We have to add url_launcher: ^3.0.0 dependency as I have used.
It will help us to navigate to other Application of OS. Like here, we will move on chrome to open a website.
9. After that create TapGestureRecognizer for those content where you want to click.
TapGestureRecognizer _flutterTapRecognizer;
TapGestureRecognizer _githubTapRecognizer;
@override
void initState() {
super.initState();
_flutterTapRecognizer = new TapGestureRecognizer()..onTap = () => _openUrl(flutterUrl);
_githubTapRecognizer = new TapGestureRecognizer()..onTap = () => _openUrl(githubUrl);
}
10. Create assets folder on the root of the project and put any png file as i have put flutter.png.
At the end, let's see complete main.dart file.
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Home(),
);
}
}
class Home extends StatefulWidget {
const Home();
@override
_HomeState createState() => new _HomeState();
}
class _HomeState extends State<Home> {
static const String flutterUrl = 'https://flutter.io/';
static const String githubUrl = 'http://www.codesnippettalk.com';
static const TextStyle linkStyle = const TextStyle(
color: Colors.blue,
decoration: TextDecoration.underline,
);
TapGestureRecognizer _flutterTapRecognizer;
TapGestureRecognizer _githubTapRecognizer;
@override
void initState() {
super.initState();
_flutterTapRecognizer = new TapGestureRecognizer()..onTap = () => _openUrl(flutterUrl);
_githubTapRecognizer = new TapGestureRecognizer()..onTap = () => _openUrl(githubUrl);
}
@override
void dispose() {
_flutterTapRecognizer.dispose();
_githubTapRecognizer.dispose();
super.dispose();
}
void _openUrl(String url) async {
// Close the about dialog.
Navigator.pop(context);
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
Widget home(BuildContext context) {
return new Material(
child: new RaisedButton(
child: const Text('Show Pop-up'),
color: Theme.of(context).accentColor,
elevation: 4.0,
splashColor: Colors.amberAccent,
textColor: const Color(0xFFFFFFFF),
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) => _buildAboutDialog(context),
);
// Perform some action
},
),
);
}
Widget _buildAboutDialog(BuildContext context) {
return new AlertDialog(
title: const Text('About Pop up'),
content: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
_buildAboutText(),
_buildLogoAttribution(),
],
),
actions: <Widget>[
new FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
textColor: Theme.of(context).primaryColor,
child: const Text('Okay, got it!'),
),
],
);
}
Widget _buildAboutText() {
return new RichText(
text: new TextSpan(
text: 'Android Popup Menu displays the menu below the anchor text if space is available otherwise above the anchor text. It disappears if you click outside the popup menu.\n\n',
style: const TextStyle(color: Colors.black87),
children: <TextSpan>[
const TextSpan(text: 'The app was developed with '),
new TextSpan(
text: 'Flutter',
recognizer: _flutterTapRecognizer,
style: linkStyle,
),
const TextSpan(
text: ' and it\'s open source; check out the source '
'code yourself from ',
),
new TextSpan(
text: 'www.codesnippettalk.com',
recognizer: _githubTapRecognizer,
style: linkStyle,
),
const TextSpan(text: '.'),
],
),
);
}
Widget _buildLogoAttribution() {
return new Padding(
padding: const EdgeInsets.only(top: 16.0),
child: new Row(
children: <Widget>[
new Padding(
padding: const EdgeInsets.only(top: 0.0),
child: new Image.asset(
"assets/flutter.png",
width: 32.0,
),
),
const Expanded(
child: const Padding(
padding: const EdgeInsets.only(left: 12.0),
child: const Text(
'Popup window is like a dialog box that gains complete focus when it appears on screen.',
style: const TextStyle(fontSize: 12.0),
),
),
),
],
),
);
}
@override
Widget build(BuildContext context) {
return new Container(
padding: const EdgeInsets.only(top: 100.0),
color: Theme.of(context).scaffoldBackgroundColor,
child: new Column(
children: <Widget>[
home(context),
],
),
);
}
}








