Skip to main content

Flutter: How to take Screenshot of the screen or widget and save as image

Introduction:

In this post, we will discuss how to take a screenshot of the widget and save it as an image. Let’s take a use case where we need this functionality.

Here is an app to read quotes in a beautiful background.

quote app
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Quote> _quotes = [
Quote(
content: "Friendship is Love without his wings!",
author: "Lord Byron",
image: 'quote-1.jpeg')
];
String _currentImage = 'assets/img/image1.jpeg';
initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/img/placeholder.jpeg'),
fit: BoxFit.cover,
),
),
),
PageView.builder(
scrollDirection: Axis.vertical,
itemCount: _quotes.length,
itemBuilder: (context, position) {
return Container(
width: double.infinity,
child: Column(
children: <Widget>[
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: new EdgeInsets.all(25.0),
child: Text(
_quotes[position].content,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: 24.0,
fontWeight: FontWeight.bold),
),
),
Padding(
padding: new EdgeInsets.all(25.0),
child: Text(
'- ' + _quotes[position].author,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: 16.0,
fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic),
),
),
],
),
),
],
),
);
},
),
],
));
}
}

Users might want to share it with friends and family. So adding a download button there will download the screenshot of the screen and save it into the user's mobile.

Let’s add a save/download button.

So we have added a button that should take the screenshot and save it as an image.

Code for adding the download button.

Positioned(
right: 15.0,
bottom: 12.0,
child: InkWell(
onTap: () {
download();
},
child: Icon(Icons.download_sharp, color:Colors.white70),
),
),

On click on the download button onTap function will call the download function.

Prepare and Download the Image:

We will use RepaintBoundary Flutter class to achieve this.

Wrap the widgets you want to take screenshot of inside RepaintBoundary(..)

RepaintBoundary needs to be specified with Global key so lets set that.

static GlobalKey _globalKey = GlobalKey();

Finally, now we need to covert the RepaintBoundary widget to an image. Remember the download function that we defined on download button click.

Lets add magic in that function.

Future<Null> download() async {
RenderRepaintBoundary boundary =
_globalKey.currentContext.findRenderObject();
ui.Image image = await boundary.toImage();
final directory = (await getExternalStorageDirectory()).path;
ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
Uint8List pngBytes = byteData.buffer.asUint8List();
final now = new DateTime.now();File imgFile = new File('$directory/Sher_$now.png');
imgFile.writeAsBytes(pngBytes);
Toast.show('Saved to $directory', context,
duration: Toast.LENGTH_SHORT, gravity: Toast.BOTTOM);
}
}

This function will convert the widget to image and will store the byte data as image in device storage.

Thanks for reading. If you have some feedback, please reach out to me on Twitter or Github.



Comments

Popular posts from this blog

Track stock market information right in your Terminal.

     Introduction: As a developer, I love working with the terminal. The plain, simple, and in my opinion the best way to interact with the computer (also it makes you look geeky). I spent most of my time in the terminal. By now you must have guessed I am a huge fan of the terminal and terminal-based applications. Recently I developed an interest in stock markets and started tracking the stock markets. Since I love working with the terminal I decided to build a terminal oriented application that can help me to track the stock market. Inspir e d by  wttr.in  I build  terminal-stocks  which can provide the stock's current prices, historical prices, and global market summary. How to use terminal-stocks terminal-stocks  is available and can be used without installation. Get the current price of the stock. curl terminal-stocks.dev/ITC.NS Current price of stocks You need to provide the ticker of the stock and terminal-stocks will give you the price inf...

PrivateGPT: A Step-by-Step Guide to Installation and Use

In this blog post, we will explore the ins and outs of PrivateGPT, from installation steps to its versatile use cases and best practices for unleashing its full potential. What is PrivateGPT? PrivateGPT is a cutting-edge program that utilizes a pre-trained GPT (Generative Pre-trained Transformer) model to generate high-quality and customizable text. Built on OpenAI's GPT architecture, PrivateGPT introduces additional privacy measures by enabling you to use your own hardware and data. This ensures that your content creation process remains secure and private. Installation Steps Before we dive into the powerful features of PrivateGPT, let's go through the quick installation process. PrivateGPT is a command line tool that requires familiarity with terminal commands. Let's get started: 1. Clone the Repository: Begin by cloning the PrivateGPT repository from GitHub using the following command: ``` git clone https://github.com/imartinez/privateGPT.git ``` 2.Navigate to the Direc...

Visualising Your Google Location History

Step 1: Download Your Google Location History First, you need to download your location history data from Google. Follow these steps to get started: Go to Google Takeout : Visit Google Takeout to begin the process. Select Location History (Timeline) : Make sure to select the “Location History (Timeline)” option. 3. Export Your Data : Google will compile your data, which might take some time. You will receive an email once your data is ready to be downloaded. 4. Download the Data : Follow the instructions in the email to download your data. Step 2: Extract the Downloaded File Once you’ve downloaded your data, locate the file and extract it. The location data will be in a JSON file at the following path: takeout-202XXXXXTXXXXXXZ-001/Takout/Location History (Timeline)/Records.json Step 3: Convert JSON to CSV To make the location data usable, we need to convert it from JSON to CSV format. Although you can convert it to KML or geoJSON formats, we’ll focus on CSV for this post. 1.  Clon...