'null' türü, flutter, firebase'de 'String' alt türü değildir

0

Soru

Tatausaha verilerini görüntülemek istiyorum ancak her giriş yaptığımda, modelimde ve firebase'de dizeler kullanmama rağmen "type null, type dizesinin bir alt türü değil" hata iletisi alıyorum. herkes bana yardımcı olabilir?

bu benim ev sayfam.atılmak

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.atılmak

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.atılmak

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.atılmak

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.atılmak

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

Lütfen uygulamayı oluştururken hata mesajınızı kontrol edin.

Tam olarak nerede olduğunu bilmiyorum ama dizeyi null değerinden ayrıştırmaya çalışıyorum.

Sorun kısmı aşağıda sanırım. (Emin değilim)

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

Yazdır 'state.user.name kullanmadan önce.

Ve bunu önlemek için şart koşun.

2021-11-24 01:54:41

tataUsaha () bölümünde bir hata görünen görüntülenebilir
muhammad alam nur haris
0

Güvenliği geçersiz kılmalısın. Örneğin, daha sonra name is String olduğunu bildirirsiniz

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

başka bir yoldan: değişken adını Dize olarak bildirme? // ? araçlar null olabilir.

veya daha dikkatli

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

Diğer dillerde

Bu sayfa diğer dillerde

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