1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Flutter] Flutter Exception: Invalid image data

Discussão em 'Mobile' iniciado por Stack, Setembro 27, 2024 às 20:43.

  1. Stack

    Stack Membro Participativo

    I am working on a Flutter application that uploads to and gets data from PostgreSQL Database. I am using postgres: ^2.3.2 in pubspec.yaml file.

    First, I am converting the image to base64. And then, I am uploading the image to the database as BYTEA.

    And when I query the image data from the database, it provides me with an integer list. I searched the web, and found that I had to convert that list to Uint8List. After converting it to Uint8List, I have to use the Image.memory method to convert the Uint8List to an image widget. But when I do so, I get this error on the Debug Console:

    ═══════ Exception caught by image resource service ════════════════════════════
    The following _Exception was thrown resolving an image codec:
    Exception: Invalid image data

    When the exception was thrown, this was the stack
    #0 _futurize (dart:ui/painting.dart:5326:5)
    #1 ImageDescriptor.encoded (dart:ui/painting.dart:5194:12)
    #2 instantiateImageCodec (dart:ui/painting.dart:2048:60)
    <asynchronous suspension>
    ════════════════════════════════════════════════════════════════════════════════


    And this image on the device: Device screenshot

    The code is below:

    import 'dart:typed_data';
    import 'package:flutter/material.dart';

    class ShowImage extends StatefulWidget {
    const ShowImage({Key? key}) : super(key: key);

    @override
    _ShowImageState createState() => _ShowImageState();
    }

    class _ShowImageState extends State<ShowImage> {
    dynamic _image;
    Map data = {};

    void setImage() async {
    GetImage getImgObj = GetImage(connection: data['connection']);

    dynamic imgBytes = await getImgObj.getImage();

    print(imgBytes.runtimeType);

    setState(() {
    _image = Image.memory(imgBytes);
    });
    }

    @override
    Widget build(BuildContext context) {
    data = ModalRoute.of(context)!.settings.arguments as Map;

    // setImage();

    return Scaffold(
    appBar: AppBar(
    title: Text("Show Image"),
    centerTitle: true,
    ),
    body: Center(
    child: Padding(
    padding: const EdgeInsets.all(18.0),
    child: Column(
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: [
    ElevatedButton(
    onPressed: () {
    setImage();
    },
    child: Text("Get Image"),
    ),
    SizedBox(height: 10.0),
    Container(
    width: 100,
    height: 350,
    decoration:
    BoxDecoration(border: Border.all(color: Colors.grey)),
    child: _image == null
    ? Align(
    alignment: Alignment.center,
    child: Text(
    "Image not selected",
    textAlign: TextAlign.center,
    ),
    )
    : Align(
    alignment: Alignment.center,
    child: _image,
    ),
    ),
    ],
    ),
    ),
    ),
    );
    }
    }

    class GetImage {
    var connection;

    GetImage({this.connection});

    Future<dynamic> getImage() async {
    int itemId = 1;
    String query = "SELECT img FROM lawbreach WHERE lid = $itemId;";

    List<dynamic> results = await this.connection.query(query);

    final bytes = Uint8List.fromList(results[0][0]);

    return bytes;
    }
    }


    I tried searching every corner of the web, but couldn't find any solution. Hope, someone here has an answer to my question :)

    Continue reading...

Compartilhe esta Página