Stack Overflow em Português Asked by giovanni lima on November 30, 2021
estou fazendo uma tela de calcular frete, o codigo ta todo " funcionando" porem na hora de rodar o app e chegar na tela de calular me apresenta esse Erro
Segue alguns Códigos.
import 'package:Flutter2/src/address.dart';
import 'package:Flutter2/src/cart_manager.dart';
import 'package:Flutter2/src/custom_icon_button.dart';
import 'package:brasil_fields/formatter/cep_input_formatter.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
class CepInputField extends StatefulWidget {
const CepInputField(this.address);
final Address address;
@override
_CepInputFieldState createState() => _CepInputFieldState();
}
class _CepInputFieldState extends State<CepInputField> {
final TextEditingController cepController = TextEditingController();
@override
Widget build(BuildContext context) {
final cartManager = context.watch<CartManager>();
final primaryColor = Theme.of(context).primaryColor;
if (widget.address.zipCode == null)
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextFormField(
enabled: !cartManager.loading,
controller: cepController,
decoration: const InputDecoration(
isDense: true, labelText: 'CEP', hintText: '12.345-678'),
inputFormatters: [
WhitelistingTextInputFormatter.digitsOnly,
CepInputFormatter(),
],
keyboardType: TextInputType.number,
validator: (cep) {
if (cep.isEmpty)
return 'Campo obrigatório';
else if (cep.length != 10) return 'CEP Inválido';
return null;
},
),
if (cartManager.loading)
LinearProgressIndicator(
valueColor: AlwaysStoppedAnimation(primaryColor),
backgroundColor: Colors.transparent,
),
RaisedButton(
onPressed: !cartManager.loading
? () async {
if (Form.of(context).validate()) {
try {
await context
.read<CartManager>()
.getAddress(cepController.text);
} catch (e) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('$e'),
backgroundColor: Colors.red,
));
}
}
}
: null,
textColor: Colors.white,
color: primaryColor,
disabledColor: primaryColor.withAlpha(100),
child: const Text('Buscar CEP'),
),
],
);
else
return Padding(
padding: const EdgeInsets.symmetric(vertical: 4),
child: Row(
children: <Widget>[
Expanded(
child: Text(
'CEP: ${widget.address.zipCode}',
style:
TextStyle(color: primaryColor, fontWeight: FontWeight.w600),
),
),
CustomIconButton(
iconData: Icons.edit,
color: primaryColor,
size: 20,
onTap: () {
context.read<CartManager>().removeAddress();
},
),
],
),
);
}
}
class Address {
Address(
{this.street,
this.number,
this.complement,
this.district,
this.zipCode,
this.city,
this.state,
this.lat,
this.long});
String street;
String number;
String complement;
String district;
String zipCode;
String city;
String state;
double lat;
double long;
Address.fromMap(Map<String, dynamic> map) {
street = map['street'] as String;
number = map['number'] as String;
complement = map['complement'] as String;
district = map['district'] as String;
zipCode = map['zipCode'] as String;
city = map['city'] as String;
state = map['state'] as String;
lat = map['lat'] as double;
long = map['long'] as double;
}
Map<String, dynamic> toMap() {
return {
'street': street,
'number': number,
'complement': complement,
'district': district,
'zipCode': zipCode,
'city': city,
'state': state,
'lat': lat,
'long': long,
};
}
}
Agradeço a todos
O problema é que você não está passando um valor para sua propriedade address
ao instanciar a classe CepInputField
, sendo assim o construtor retorna NULL para a mesma e ao acessar ela como widget.address.zipCode
o erro ocorre, pois você está chamando a propriedade zipCode em um valor nulo.
class CepInputField extends StatefulWidget {
const CepInputField(this.address);
final Address address;
@override
_CepInputFieldState createState() => _CepInputFieldState();
}
Atenção
Como a propriedade está como opcional, você precisa tratar no teu código quando a propriedade não for informada.
Ou mudar o constructor da classe, da seguinte forma:
class CepInputField extends StatefulWidget {
const CepInputField(@Required this.address);
final Address address;
@override
_CepInputFieldState createState() => _CepInputFieldState();
}
Answered by Matheus Ribeiro on November 30, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP