Tipo 'Null' non è un sottotipo di "Stringa" in flutter, firebase

0

Domanda

Voglio visualizzare tatausaha dati, ma ogni volta che faccio il log in mi arriva un messaggio di errore "tipo null non è un sottotipo del tipo string", anche se io uso le stringhe nel mio modello e firebase. qualcuno mi può aiutare?

questo è il mio home_page.dart

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

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

class _HomePageState extends State<HomePage> {
  @override
  void initState() {
    context.read<TataUsahaCubit>().fetchTataUsaha();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    Widget header() {
      return BlocBuilder<AuthCubit, AuthState>(
        builder: (context, state) {
          if (state is AuthSuccess) {
            return Container(
              margin: EdgeInsets.only(
                  right: defaultMargin, left: defaultMargin, top: 30),
              child: Row(
                children: [
                  Expanded(
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          'Hay,\n${state.user.name}',
                          style: blackTextStyle.copyWith(
                            fontSize: 24,
                            fontWeight: semiBold,
                          ),
                          overflow: TextOverflow.ellipsis,
                        ),
                        Text(
                          'Ingin Melihat Guru kamu?',
                          style: greyTextStyle.copyWith(
                            fontSize: 16,
                            fontWeight: light,
                          ),
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            );
          } else {
            return SizedBox();
          }
        },
      );
    }

    Widget kepalaSekolah() {
      return Container(
        margin: EdgeInsets.only(
          left: defaultMargin,
          right: defaultMargin,
          top: 30,
        ),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              'Kepala Sekolah',
              style: blackTextStyle.copyWith(
                fontSize: 18,
                fontWeight: semiBold,
              ),
            ),
            KepalaSekolahTile(
              name: 'Charles Marsel Palasa, S.Pd.',
              imageUrl: 'assets/kepala_sekolah.jpeg',
              jabatan: 'Kepala Sekolah',
            ),
          ],
        ),
      );
    }

    Widget tataUsaha(List<TataUsahaModel> tatausahah) {
      return Container(
        margin: EdgeInsets.only(
          left: defaultMargin,
          right: defaultMargin,
          top: 20,
        ),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              'Tata Usaha',
              style: blackTextStyle.copyWith(
                fontSize: 18,
                fontWeight: semiBold,
              ),
            ),
            Column(
              children: tatausahah.map((TataUsahaModel tatausaha) {
                return TataUsahaTile(tatausaha);
              }).toList(),
            ),
          ],
        ),
      );
    }

    return BlocConsumer<TataUsahaCubit, TataUsahaState>(
        listener: (context, state) {
      if (state is TataUsahaFailed) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            backgroundColor: kRedColor,
            content: Text(state.error),
          ),
        );
      }
    }, builder: (context, state) {
      if (state is TataUsahaSuccess) {
        return ListView(
          children: [
            header(),
            kepalaSekolah(),
            tataUsaha(state.tatausahah),
          ],
        );
      }
      return Center(
        child: CircularProgressIndicator(
          color: kPrimaryColor,
        ),
      );
    });
  }
}

tata_usaha_cubit.dart

part 'tata_usaha_state.dart';

class TataUsahaCubit extends Cubit<TataUsahaState> {
  TataUsahaCubit() : super(TataUsahaInitial());
  void fetchTataUsaha() async {
    try {
      emit(TataUsahaLoading());

      List<TataUsahaModel> tatausahah =
          await TataUsahaService().fetchTataUsaha();
      emit(TataUsahaSuccess(tatausahah));
    } catch (e) {
      emit(TataUsahaFailed(e.toString()));
    }
  }
}

tata_usaha_state.dart

part of 'tata_usaha_cubit.dart';

abstract class TataUsahaState extends Equatable {
  const TataUsahaState();

  @override
  List<Object> get props => [];
}

class TataUsahaInitial extends TataUsahaState {}

class TataUsahaLoading extends TataUsahaState {}

class TataUsahaSuccess extends TataUsahaState {
  final List<TataUsahaModel> tatausahah;
  TataUsahaSuccess(this.tatausahah);
  @override
  List<Object> get props => [tatausahah];
}

class TataUsahaFailed extends TataUsahaState {
  final String error;
  TataUsahaFailed(this.error);
  @override
  List<Object> get props => [error];
}

tata_usaha_model.dart

import 'package:equatable/equatable.dart';

class TataUsahaModel extends Equatable {
  final String id;
  final String name;
  final String tahunMasuk;
  final String posisi;
  final String quotes;
  final String imageUrl;

  TataUsahaModel({
    required this.id,
    this.name = '',
    this.tahunMasuk = '',
    this.posisi = '',
    this.quotes = '',
    this.imageUrl = '',
  });

  factory TataUsahaModel.fromJson(String id, Map<String, dynamic> json) =>
      TataUsahaModel(
        id: id,
        name: json['name'],
        tahunMasuk: json['tahunMasuk'],
        posisi: json['posisi'],
        quotes: json['qoutes'],
        imageUrl: json['imageUrl'],
      );

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'tahunMasuk': tahunMasuk,
        'posisi': posisi,
        'quotes': quotes,
        'imageUrl': imageUrl,
      };

  @override
  List<Object?> get props => [
        id,
        name,
        tahunMasuk,
        posisi,
        quotes,
        imageUrl,
      ];
}

tata_usaha_service.dart

class TataUsahaService {
  CollectionReference _tatausahaRef =
      FirebaseFirestore.instance.collection('tatausaha');

  Future<List<TataUsahaModel>> fetchTataUsaha() async {
    try {
      QuerySnapshot result = await _tatausahaRef.get();

      List<TataUsahaModel> tatausaha = result.docs.map((e) {
        return TataUsahaModel.fromJson(e.id, e.data() as Map<String, dynamic>);
      }).toList();
      print(tatausaha);
      return tatausaha;
    } catch (e) {
      throw e;
    }
  }
}
firebase flutter
2021-11-24 01:16:08
2
0

Si prega di controllare il vostro messaggio di errore durante la creazione dell'app.

Non so esattamente dove, ma c'è il tentativo di analizzare la Stringa da null.

Credo che la parte sottostante è il problema. (Non sono sicuro)

Text(
   'Hay,\n${state.user.name}',

Stampa il 'stato.utente.nome' prima del suo utilizzo.

E se la condizione per evitare.

2021-11-24 01:54:41

può essere visualizzata, che appare un errore nel tataUsaha() sezione
muhammad alam nur haris
0

Devi null sicurezza. Per esempio, si dichiara il nome di Stringa

name: json['name'] ?? ''; // default if null name will be set to empty

in un altro modo: dichiarare la variabile nome come Stringa? // ? significa che può essere null.

o più attentamente

name: (json['name'] ?? '').toString();
// eventhough server/firebase return wrong type such as Bool not String, your code will not be through exception wrong type casting.
2021-11-24 03:00:10

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................