In the digital age, screenshots are an essential component of daily routine life. They is an efficient part to collect and share the data. that can be very useful in a variety of circumstances. Mobile application screenshots can be used for a variety of the purposes including testing, debugging, documentation etc.. This blog main topic will be how to take a screenshot in a Flutter app.
When testing, debugging, or showcasing the user interface of your Flutter application, the ability to take screenshots is a useful feature. Flutter’s straightforward API makes taking screenshots a breeze. In this blog, we’ll look at how to screenshot in Flutter.
Flutter is a well liked and lightweight framework for building mobile applications . That provides a quick and simple way to create visually appealing, powerful mobile apps for the iOS and Android operating systems. Developers can easily create original interfaces and layouts with Flutter’s high variety of widgets and tools.
How to Programmatically take a Screenshot in flutter
Get started…
Step 1) : Add the Screenshot Package
You must first include the Screenshot package in your project in order to take screenshots in Flutter. In your pubspec.yaml file, open the dependencies section, and then add the following code:
screenshot: ^any
Step 2) : After saving the file launch flutter pub. enter your terminal and start the package download.
flutter pub get
Step 3) : import the file
import 'package:screenshot/screenshot.dart';
Step 4) :Make a screenshot controller
The creation of a Screenshot Controller instance is the next step. You can use this controller to take a screenshot of your widget.
final _screenshotController = ScreenshotController();
Step 5) :Wrap the screenshot of your widget
You must wrap your widget in the Screenshot widget in order to take a screenshot of it. following code should be included in the build method :
Screenshot( controller: _screenshotController, child: //your widget here, ),
The child property holds the widget that we want to screenshot , and the controller property gives us access to the Screenshot Controller object we previously set up.
Step 6) : Taking a Screenshot
By calling the capture() method on the Screenshot Controller instance, you can finally take a screenshot. Here is an illustration of how to use a floating action button to invoke the capture() method:
FloatingActionButton( onPressed: () async { final image = await _screenshotController.capture(); /// do something with the image }, child: Icon(Icons.camera_alt), ),
Step 7) :How to Show or Save a Screenshot
After taking the screenshot you have the option of viewing it or saving it to as a file. An example of how to show the screenshot that was taken is provided here below :
Image.memory( image, fit:BoxFit.cover, ),
here,…. you can save screenshot image data to a file use writeAsBytes function in flutter framework .
final directory = await getApplicationDocumentsDirectory(); final imagePath = '${directory.path}/screenshot.png'; final file = File(imagePath); await file.writeAsBytes(image);
Step 8) :Reduce the Controller Widget and Screenshot Widget.
It’s critical to remove the Screenshot widget and the Screenshot Controller instance from your code after the screenshot has been taken in order to avoid any performance impact. To accomplish this, set the controller property of the Screenshot widget to null:
Screenshot( controller: null, child: //your widget here, ), Additionally, by removing the Screenshot Controller instance: @override void dispose() { ///Controller dispose here super.dispose(); }
It’s over now! These easy steps will help you take screenshots of your Flutter app.
screenshot of a widget using RepaintBoundary in Flutter
Video Tutorial
i) : order to take the screenshots of widgets . we will use RepaintBoundary widget as the parent widget. Global key must be used to specify RepaintBoundary.
Visit Flutter RepaintBoundary for more information.
static GlobalKey screen = new GlobalKey(); RepaintBoundary( key: screen, child: ChildWidgets( )
So that it can be quickly saved in device local storage and transformed into an image bites, the RepaintBoundary widget must then be converted to an image.
Step 1) :Use RepaintBoundary to create widget.
Make widget in your file called MyWidget or any name :
import 'package:flutter/material.dart'; class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { return RepaintBoundary( child: Container( color: Colors.blue, width: 200, height: 200, child: Center( child: Text( 'Hello World!', style: TextStyle( color: Colors.white, fontSize: 30, fontWeight: FontWeight.bold, ), ), ), ), ); } }
This widget has a 300 pixel wide by 300 pixel high container with a white background a font size of 30 bold font weight blue background.
We must first create a GlobalKey object to identify the widget from which we want to take the screenshot. There will also be developed a function called captureScreenshot that will take a screenshot and store it on the device storage.
/// here Define the function to capture the screenshot Future<void> captureScreenshot() async { try { /// Find boundary of the RepaintBoundary widget RenderRepaintBoundary boundary = _globalKey.currentContext.findRenderObject(); /// Convert the widget to image ui.Image image = await boundary.toImage(pixelRatio: 3.0); // Convert image to a byte data ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png); /// Convert byte data to an Uint8List Uint8List pngBytes = byteData.buffer.asUint8List(); /// Get the application documents directory to save the screenshot widget final directory = (await getApplicationDocumentsDirectory()).path; /// Create file object and save the screenshot File imgFile = File('$directory/screenshot.png'); await imgFile.writeAsBytes(pngBytes); /// Print message indicating that the screenshot has been taken print('Screenshot taken successfully' ); } catch (e) { // Handle the error if there is any print(e); } }
This code creates a Flutter application that use RepaintBoundary to take screenshot of a widget in flutter . The widget that needs to be captured is wrap in the RepaintBoundary widget .the widget is identified by a global key in flutter.
When the user selects the Take Screenshot button the screenshot is saved to the device local storage .The RepaintBoundary widget boundary is located the captureScreenshot function is invoked and the widget is converted to an image. the image is converted to byte data. byte data is converted to an Uint8List and screenshot is saved in local storage.
For , get this screenshots code , click here…..
Conclusion 👍
I hope you can put this to use.To take a screenshot. use the Flutter screenshot package. With the help of this package we can take screenshot in a specific widget or the entire application screen. In this blog post, we will look at using this package to take screenshot in Flutter application. This example code can be changed to suit your requirements.
Thanks for reading this article……
Have a beautiful day…..