Orientação gerada a partir de informações públicas. Apenas para referência.
O pacote de captura de tela permite a captura em tempo de execução de qualquer widget Flutter como imagem em múltiplas plataformas. Permite que os desenvolvedores façam capturas de tela de widgets durante a execução do aplicativo, útil para depuração, testes ou compartilhamento de conteúdo visual. O pacote suporta Android, iOS, Web, macOS, Windows e Linux, tornando-o altamente versátil. Integra-se perfeitamente ao pipeline de renderização do Flutter e fornece uma API simples para gerar imagens a partir de árvores de widgets. Ideal para aplicativos que exigem geração dinâmica de imagens ou feedback visual.
Casos de uso
Depuração de problemas de interface
Gerando imagens compartilháveis
Testes automatizados
documentação visual
Tutoriais do aplicativo
Recursos de visualização
Principais recursos
Captura de tela do widget em tempo de execução
Suporte multiplataforma
Integração simples da API
Saída de imagem de alta qualidade
Suporta todas as principais plataformas
Sem dependências externas
Indicado para
Desenvolvedores que precisam de capturas dinâmicas
Equipes de testes e QA
Aplicativos com recursos de compartilhamento visual
Aplicativos educacionais ou tutoriais
Ferramentas de prototipagem de UI
Depuração de layouts complexos
Considerações
Impacto no desempenho em widgets grandes
Uso de memória para imagens de alta resolução
Requer permissões adequadas em plataformas móveis
Não adequado para captura de vídeo em tempo real
Limitado a instantâneos estáticos de widgets
Pode exigir configuração específica da plataforma
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
A simple package to capture widgets as Images. Now you can also capture the widgets that are not rendered on the screen!
You can capture a long Invisible widgets by using captureFromLongWidget function.
var randomItemCount = Random().nextInt(100);
////// Step 1: Create Long widget using Column.///var myLongWidget = Builder(builder: (context) {
returnContainer(
padding: constEdgeInsets.all(30.0),
decoration: BoxDecoration(
border:
Border.all(color: Colors.blueAccent, width: 5.0),
color: Colors.redAccent,
),
////// Note: Do not use Scrolling widget, instead place your children in Column. /// /// Do not use widgets like 'Expanded','Flexible',or 'Spacer'///
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
for (int i = 0; i < randomItemCount; i++)
Text("Tile Index $i"),
],
));
});
////// Step 2: /// Use `captureFromLongWidget` function for taking screenshot.///
screenshotController
.captureFromLongWidget(
InheritedTheme.captureAll(
context,
Material(
child: myLongWidget,
),
),
delay: Duration(milliseconds: 100),
context: context,
////// Additionally you can define constraint for your image.////// constraints: BoxConstraints(/// maxHeight: 1000,/// maxWidth: 1000,/// )
)
.then((capturedImage) {
// Handle captured image
});
Saving images to Specific Location
For this you can use captureAndSave method by passing directory location. By default, the captured image will be saved to Application Directory. Custom paths can be set using path parameter. Refer path_provider
Note
Method captureAndSave is not supported for web.
final directory = (await getApplicationDocumentsDirectory ()).path; //from path_provide packageString fileName = DateTime.now().microsecondsSinceEpoch;
path = '$directory';
screenshotController.captureAndSave(
path //set path where screenshot will be saved
fileName:fileName
);
Saving images to Gallery
If you want to save captured image to Gallery, Please use https://github.com/hui-z/image_gallery_saver
Example app uses the same to save screenshots to gallery.
Sharing Captured Images
await _screenshotController.capture(delay: constDuration(milliseconds: 10)).then((Uint8List image) async {
if (image != null) {
final directory = awaitgetApplicationDocumentsDirectory();
final imagePath = awaitFile('${directory.path}/image.png').create();
await imagePath.writeAsBytes(image);
/// Share PluginawaitShare.shareFiles([imagePath.path]);
}
});
Note:
Captured image may look pixelated. You can overcome this issue by setting value for pixelRatio
The pixelRatio describes the scale between the logical pixels and the size of the output image. It is independent of the window.devicePixelRatio for the device, so specifying 1.0 (the default) will give you a 1:1 mapping between logical pixels and the output pixels in the image.