1
resposta

[Bug] Como resolver essa Exception

Aparece quando rodo o código!

import 'package:flutter/material.dart';

class FormScreen extends StatefulWidget {
  const FormScreen({super.key});

  @override
  State<FormScreen> createState() => _FormScreenState();
}

class _FormScreenState extends State<FormScreen> {
  TextEditingController nameController = TextEditingController();
  TextEditingController difficultyController = TextEditingController();
  TextEditingController imageController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Nova Tarefa'),
      ),
      body: Center(
        child: Container(
          height: 650,
          width: 375,
          decoration: BoxDecoration(
              color: Colors.black12,
              borderRadius: BorderRadius.circular(10),
              border: Border.all(width: 3)),
          child: Column(
            children: [
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: TextFormField(
                  controller: nameController,
                  textAlign: TextAlign.center,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      hintText: 'Nome',
                      fillColor: Colors.white70,
                      filled: true),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: TextFormField(
                  controller: difficultyController,
                  textAlign: TextAlign.center,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      hintText: 'Dificuldade',
                      fillColor: Colors.white70,
                      filled: true),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: TextFormField(
                  controller: imageController,
                  textAlign: TextAlign.center,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      hintText: 'Imagem',
                      fillColor: Colors.white70,
                      filled: true),
                ),
              ),
              Container(
                height: 100,
                width: 73,
                decoration: BoxDecoration(
                  color: Colors.blue,
                  borderRadius: BorderRadius.circular(10),
                  border: Border.all(width: 2, color: Colors.blue),
                ),
                child: ClipRRect(
                  borderRadius: BorderRadius.circular(10),
                  child: Image.network(
                    imageController.text,
                    fit: BoxFit.cover,
                  ),
                ),
              ),
              ElevatedButton(
                onPressed: () {
                  print(nameController.text);
                  print(int.parse(difficultyController.text));
                  print(imageController.text);
                },
                child: Text('Adicionar!'),
              )
            ],
          ),
        ),
      ),
    );
  }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi

O erro que você está enfrentando é uma exceção do tipo ArgumentError e indica que não há um host especificado na URI file:///. Isso está relacionado ao uso da URL vazia ou inválida ao tentar carregar uma imagem usando Image.network a partir do valor do imageController.text.

Se o campo de texto para a imagem estiver vazio ou não contiver uma URL válida, isso pode causar esse problema. Para evitar essa exceção, você pode verificar se o campo de texto não está vazio antes de usar o valor para carregar a imagem. Aqui está uma maneira de fazer isso:

Container(
  height: 100,
  width: 73,
  decoration: BoxDecoration(
    color: Colors.blue,
    borderRadius: BorderRadius.circular(10),
    border: Border.all(width: 2, color: Colors.blue),
  ),
  child: ClipRRect(
    borderRadius: BorderRadius.circular(10),
    child: Image.network(
      imageController.text.isNotEmpty ? imageController.text : 'URL_PADRAO_SE_CAMPO_VAZIO',
      fit: BoxFit.cover,
    ),
  ),
),

Neste exemplo, se imageController.text não estiver vazio, a URL é usada normalmente. Caso contrário, uma URL padrão ou uma URL que você considera apropriada para casos em que o campo está vazio pode ser fornecida.

Adapte essa solução de acordo com a lógica específica do seu aplicativo e o comportamento desejado.