dart/flutter:: type 'Null' is not a subtype of type 'String' in type cast ERRor, not able to fetch data - flutter

I am running into a "type 'Null' is not a subtype of type 'String' in type cast" when I try to retrieve the data.
not sure what the issue is... I think the data is not being found or something along those lines
source code:: https://github.com/casas1010/flutter_firebase_vendor_management
error message::
════════ Exception caught by widgets library ═══════════════════════════════════
The following _CastError was thrown building JobApplicationsListView(dirty):
type 'Null' is not a subtype of type 'String' in type cast
The relevant error-causing widget was
JobApplicationsListView
lib/…/job_applications/job_application_view.dart:75
When the exception was thrown, this was the stack
#0 new CloudJobApplication.fromSnapshot
package:ijob_clone_app/…/cloud/cloud_job_application.dart:27
#1 FirebaseCloudStorage.allJobApplications.<anonymous closure>.<anonymous closure>
package:ijob_clone_app/…/cloud/firebase_cloud_storage.dart:49
#2 MappedListIterable.elementAt (dart:_internal/iterable.dart:413:31)
#3 ListIterator.moveNext (dart:_internal/iterable.dart:342:26)
#4 WhereIterator.moveNext (dart:_internal/iterable.dart:438:22)
#5 Iterable.length (dart:core/iterable.dart:497:15)
#6 JobApplicationsListView.build
package:ijob_clone_app/…/widgets/job_application_list_widget.dart:27
#7 StatelessElement.build
package:flutter/…/widgets/framework.dart:4949
#8 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4878
#9 Element.rebuild
package:flutter/…/widgets/framework.dart:4604
#10 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4859
#11 ComponentElement.mount
package:flutter/…/widgets/framework.dart:4853
#12 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3863
#13 Element.updateChild
package:flutter/…/widgets/framework.dart:3586
#14 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4904
#15 StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:5050
#16 Element.rebuild
package:flutter/…/widgets/framework.dart:4604
#17 BuildOwner.buildScope
package:flutter/…/widgets/framework.dart:2667
#18 WidgetsBinding.drawFrame
package:flutter/…/widgets/binding.dart:882
#19 RendererBinding._handlePersistentFrameCallback
package:flutter/…/rendering/binding.dart:378
#20 SchedulerBinding._invokeFrameCallback
package:flutter/…/scheduler/binding.dart:1175
#21 SchedulerBinding.handleDrawFrame
package:flutter/…/scheduler/binding.dart:1104
#22 SchedulerBinding._handleDrawFrame
package:flutter/…/scheduler/binding.dart:1015
#23 _invoke (dart:ui/hooks.dart:148:13)
#24 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:318:5)
#25 _drawFrame (dart:ui/hooks.dart:115:31)
════════════════════════════════════════════════════════════════════════════════
D/TrafficStats( 9769): tagSocket(99) with statsTag=0xffffffff, statsUid=-1
CloudJobApplication::
#immutable
class CloudJobApplication {
final String documentId;
final String jobApplicatorId;
final String jobApplicationState;
final String jobApplicationSubState;
const CloudJobApplication({
required this.documentId,
required this.jobApplicatorId,
required this.jobApplicationState,
required this.jobApplicationSubState,
});
// acts as constructor
CloudJobApplication.fromSnapshot(
QueryDocumentSnapshot<Map<String, dynamic>> snapshot)
: documentId = snapshot.id,
jobApplicatorId = snapshot.data()[jobApplicatorIdColumn] as String,
jobApplicationState =
snapshot.data()[jobApplicationStateColumn] as String,
jobApplicationSubState =
snapshot.data()[jobApplicationSubStateColumn] as String;
}
FirebaseCloudStorage::
class FirebaseCloudStorage {
final job = FirebaseFirestore.instance.collection('jobs');
final jobApplication =
FirebaseFirestore.instance.collection('job applications');
// This works perfect for getting the jobs
Stream<Iterable<CloudJob>> allJobs({required String jobCreatorId}) =>
job.snapshots().map((event) => event.docs
.map((doc) => CloudJob.fromSnapshot(doc))
.where((job) => job.jobCreatorId == jobCreatorId));
// this does not work. i copied the code from above and changed it
Stream<Iterable<CloudJobApplication>> allJobApplications() =>
jobApplication.snapshots().map((event) => event.docs
.map((doc) => CloudJobApplication.fromSnapshot(doc))
.where((jobApplication) =>
jobApplication.documentId == 'f2FvzZmr51v1wyrYZYoM'));
// singleton
static final FirebaseCloudStorage _shared =
FirebaseCloudStorage._sharedInstance();
FirebaseCloudStorage._sharedInstance();
factory FirebaseCloudStorage() => _shared;
}
JobApplicationsView:: ( this is where the issue starts, the issue appears when this widget tries to retrieve the data from the server i thin )
import 'package:flutter/material.dart';
import '../../services/cloud/cloud_job_application.dart';
import '../../utilities/widgets/job_application_list_widget.dart';
import '../../utilities/widgets/jobs_list_widget.dart';
import '/constants/routes.dart';
import '/enums/menu_action.dart';
import '/services/auth/auth_service.dart';
import '/services/cloud/cloud_job.dart';
import '/services/cloud/firebase_cloud_storage.dart';
import '/utilities/dialogs/logout_dialog.dart';
class JobApplicationsView extends StatefulWidget {
const JobApplicationsView({Key? key}) : super(key: key);
#override
_JobApplicationsViewState createState() => _JobApplicationsViewState();
}
class _JobApplicationsViewState extends State<JobApplicationsView> {
late final FirebaseCloudStorage _jobsService;
String get userId => AuthService.firebase().currentUser!.id;
#override
void initState() {
_jobsService = FirebaseCloudStorage();
super.initState();
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Your job applications'),
actions: [
IconButton(
onPressed: () {
// Navigator.of(context).pushNamed(createOrUpdateJobRoute);
},
icon: const Icon(Icons.add),
),
PopupMenuButton<MenuAction>(
onSelected: (value) async {
prin('code removed')
},
itemBuilder: (context) {
return const [
PopupMenuItem<MenuAction>(
value: MenuAction.logout,
child: Text('Log out'),
),
];
},
)
],
),
body: StreamBuilder(
stream: _jobsService.allJobApplications(),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
case ConnectionState.active:
if (snapshot.hasData) {
final allJobs = snapshot.data as Iterable<CloudJobApplication>;
print(snapshot);
return JobApplicationsListView( // ERROR IS OCURRING HERE
jobs: allJobs,
);
return Text('results');
} else {
return const CircularProgressIndicator();
}
default:
return const CircularProgressIndicator();
}
},
),
);
}
}

Try like this
CloudJobApplication.fromSnapshot(
QueryDocumentSnapshot<Map<String, dynamic>> snapshot)
: documentId = snapshot.id,
jobApplicatorId = snapshot.data()[jobApplicatorIdColumn] ?? "",
jobApplicationState = snapshot.get(jobApplicationStateColumn) ?? "",
jobApplicationSubState =
snapshot.get(jobApplicationSubStateColumn) ?? "";

Related

'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion:

I try to generate a list of items out of a database (sqflite). Everything seems to work fine until my database has 3 items.
When I go to the AddBodyStatsScreen and back to the BodyStatsListScreen the program crashes. When I start debugging on AVD and I have already 3 items in the database I get the following errors:
════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown building MediaQuery(MediaQueryData(size: Size(480.0, 1042.7), devicePixelRatio: 3.0, textScaleFactor: 1.0, platformBrightness: Brightness.light, padding: EdgeInsets.zero, viewPadding: EdgeInsets.zero, viewInsets: EdgeInsets.zero, alwaysUse24HourFormat: false, accessibleNavigation: false, highContrast: false, disableAnimations: false, invertColors: false, boldText: false, navigationMode: traditional, gestureSettings: DeviceGestureSettings(touchSlop: 8.0), displayFeatures: [])):
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 261 pos 16: 'child == null || indexOf(child) > index': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
The relevant error-causing widget was
ListView
When the exception was thrown, this was the stack
#2 RenderSliverMultiBoxAdaptor._debugVerifyChildOrder
#3 RenderSliverMultiBoxAdaptor.debugChildIntegrityEnabled=.<anonymous closure>
#4 RenderSliverMultiBoxAdaptor.debugChildIntegrityEnabled=
#5 SliverMultiBoxAdaptorElement.performRebuild
#6 SliverMultiBoxAdaptorElement.update
#7 Element.updateChild
#8 ComponentElement.performRebuild
#9 Element.rebuild
#10 ProxyElement.update
#11 Element.updateChild
#12 SingleChildRenderObjectElement.update
#13 Element.updateChild
#14 RenderObjectElement.updateChildren
#15 MultiChildRenderObjectElement.update
#16 Element.updateChild
#17 SingleChildRenderObjectElement.update
#18 Element.updateChild
#19 SingleChildRenderObjectElement.update
#20 Element.updateChild
#21 SingleChildRenderObjectElement.update
#22 Element.updateChild
#23 SingleChildRenderObjectElement.update
#24 Element.updateChild
#25 ComponentElement.performRebuild
#26 StatefulElement.performRebuild
#27 Element.rebuild
#28 StatefulElement.update
#29 Element.updateChild
#30 SingleChildRenderObjectElement.update
#31 Element.updateChild
#32 ComponentElement.performRebuild
#33 Element.rebuild
#34 ProxyElement.update
#35 Element.updateChild
#36 SingleChildRenderObjectElement.update
#37 Element.updateChild
#38 ComponentElement.performRebuild
#39 Element.rebuild
#40 ProxyElement.update
#41 Element.updateChild
#42 SingleChildRenderObjectElement.update
#43 Element.updateChild
#44 SingleChildRenderObjectElement.update
#45 Element.updateChild
#46 SingleChildRenderObjectElement.update
#47 Element.updateChild
#48 ComponentElement.performRebuild
#49 Element.rebuild
#50 ProxyElement.update
#51 Element.updateChild
#52 ComponentElement.performRebuild
#53 StatefulElement.performRebuild
#54 Element.rebuild
#55 StatefulElement.update
#56 Element.updateChild
#57 ComponentElement.performRebuild
#58 StatefulElement.performRebuild
#59 Element.rebuild
#60 StatefulElement.update
#61 Element.updateChild
#62 ComponentElement.performRebuild
#63 Element.rebuild
#64 ProxyElement.update
#65 Element.updateChild
#66 ComponentElement.performRebuild
#67 Element.rebuild
#68 StatelessElement.update
#69 Element.updateChild
#70 ComponentElement.performRebuild
#71 StatefulElement.performRebuild
#72 Element.rebuild
#73 BuildOwner.buildScope
#74 WidgetsBinding.drawFrame
#75 RendererBinding._handlePersistentFrameCallback
#76 SchedulerBinding._invokeFrameCallback
#77 SchedulerBinding.handleDrawFrame
#78 SchedulerBinding._handleDrawFrame
#79 _invoke (dart:ui/hooks.dart:145:13)
#80 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#81 _drawFrame (dart:ui/hooks.dart:112:31)
(elided 2 frames from class _AssertionError)
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
A RenderSliverPadding expected a child of type RenderSliver but received a child of type RenderErrorBox.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ListView
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
FutureBuilder<List<BodyStats>>
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4692 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
FutureBuilder<List<BodyStats>>
════════════════════════════════════════════════════════════════════════════════
Restarted application in 2.102ms.
════════ Exception caught by rendering library ═════════════════════════════════
'package:flutter/src/material/material.dart': Failed assertion: line 735 pos 12: 'referenceBox.attached': is not true.
The relevant error-causing widget was
Scaffold
════════════════════════════════════════════════════════════════════════════════
Here is the code:
import 'package:gym_app/database_helper.dart';
import 'package:flutter/material.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:gym_app/models/body_stats.dart';
class BodyStatsListScreen extends StatefulWidget {
const BodyStatsListScreen({super.key});
#override
_BodyStatsListScreenState createState() => _BodyStatsListScreenState();
}
class _BodyStatsListScreenState extends State<BodyStatsListScreen> {
// void _showSnackBar(BuildContext context, String text) {
// ScaffoldMessenger.of(context)
// ..hideCurrentSnackBar()
// ..showSnackBar(SnackBar(content: Text(text)));
// }
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Meine Body Stats'),
),
body: Center(
child: FutureBuilder<List<BodyStats>>(
future: DatabaseHelper.instance.getBodyStats('bodyStats'),
builder: (BuildContext context, AsyncSnapshot<List<BodyStats>> snapshot) {
if (!snapshot.hasData) {
return const Center(child: Text('Lade Daten...'));
}
return snapshot.data!.isEmpty
? const Center(
child: Text('Keine Daten vorhanden.'),
)
: ListView(
children: snapshot.data!.map((item) {
return Slidable(
// Specify a key if the Slidable is dismissible.
key: const ValueKey(0),
// The end action pane is the one at the right or the bottom side.
endActionPane: ActionPane(
motion: const ScrollMotion(),
children: [
SlidableAction(
onPressed: (context) {
Future.delayed(Duration.zero, () {
Navigator.pushNamed(context, '/addBodyStats', arguments: item).then((value) => setState(() {}));
});
},
backgroundColor: const Color.fromARGB(255, 112, 112, 112),
foregroundColor: Colors.white,
icon: Icons.edit,
label: 'editieren',
),
SlidableAction(
onPressed: (context) {
setState(() {
DatabaseHelper.instance.remove('bodyStats', item.datum!);
});
// _showSnackBar(context, '${item.datum} gelöscht');
},
backgroundColor: const Color(0xFFFE4A49),
foregroundColor: Colors.white,
icon: Icons.delete,
label: 'löschen',
),
],
),
// The child of the Slidable is what the user sees when the
// component is not dragged.
child: ListTile(title: Text(item.datum.toString())),
);
}).toList(),
);
}),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Future.delayed(Duration.zero, () {
Navigator.pushNamed(context, '/addBodyStats', arguments: BodyStats(datum: '')).then((value) => setState(() {}));
});
},
child: const Icon(Icons.add),
),
);
}
}
And the related widget to create an item:
import 'package:flutter/material.dart';
import 'package:gym_app/models/body_stats.dart';
import 'package:intl/intl.dart';
import 'package:gym_app/database_helper.dart';
class AddBodyStatsScreen extends StatefulWidget {
const AddBodyStatsScreen({super.key});
#override
State<AddBodyStatsScreen> createState() => _AddBodyStatsScreenState();
}
class _AddBodyStatsScreenState extends State<AddBodyStatsScreen> {
bool taped = false;
DateTime selectedDate = DateTime.now();
Future<void> _selectDate(BuildContext context) async {
final DateTime? picked = await showDatePicker(context: context, initialDate: selectedDate, firstDate: DateTime(2015, 8), lastDate: DateTime.now());
if (picked != null && picked != selectedDate) {
setState(() {
selectedDate = picked;
});
}
}
// void _showSnackBar(BuildContext context, String text) {
// ScaffoldMessenger.of(context)
// ..hideCurrentSnackBar()
// ..showSnackBar(SnackBar(content: Text(text)));
// }
#override
Widget build(BuildContext context) {
final editedBodyStats = ModalRoute.of(context)!.settings.arguments as BodyStats;
bool inEditMode = editedBodyStats.datum != '';
if (inEditMode && taped == false) {
selectedDate = DateFormat('dd.MM.yyyy').parse(editedBodyStats.datum!);
} else {}
return Scaffold(
appBar: AppBar(
title: Text(inEditMode ? 'Body Stats editieren' : 'Body Stats hinzufügen'),
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
InkWell(
child: Text(DateFormat('dd.MM.yyyy').format(selectedDate)),
onTap: () {
taped = true;
_selectDate(context);
},
)
],
),
),
ElevatedButton(
onPressed: () async {
if (inEditMode) {
await DatabaseHelper.instance.update('bodyStats', BodyStats(datum: DateFormat('dd.MM.yyyy').format(selectedDate)));
// _showSnackBar(context, '${DateFormat('dd.MM.yyyy').format(selectedDate)} wurde editiert');
} else {
if (await DatabaseHelper.instance.uidExists('bodyStats', DateFormat('dd.MM.yyyy').format(selectedDate))) {
await DatabaseHelper.instance.update('bodyStats', BodyStats(datum: DateFormat('dd.MM.yyyy').format(selectedDate)));
// _showSnackBar(context, '${DateFormat('dd.MM.yyyy').format(selectedDate)} wurde editiert');
} else {
await DatabaseHelper.instance.add('bodyStats', BodyStats(datum: DateFormat('dd.MM.yyyy').format(selectedDate)));
}
}
Future.delayed(Duration.zero, () {
Navigator.pop(context);
});
},
child: Text(inEditMode ? 'editieren' : 'hinzufügen'),
)
],
),
);
}
}
import 'dart:io';
import 'package:gym_app/models/body_stats.dart';
// ignore: depend_on_referenced_packages
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
class DatabaseHelper {
//SingeltonPattern
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static Database? _database;
Future<Database> get database async => _database ??= await _initDatabase();
Future<Database> _initDatabase() async {
Directory documentsDirecory = await getApplicationDocumentsDirectory();
String path = join(documentsDirecory.path, 'gym_app.db');
return await openDatabase(
path,
version: 1,
onCreate: _onCreate,
);
}
Future _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE bodyStats(
datum TEXT PRIMARY KEY,
gewicht TEXT,
koerperfett TEXT,
muskelanteil TEXT,
halsumfang TEXT,
schulterumfang TEXT,
brustumfang TEXT,
armumfangRe TEXT,
armumfangLi TEXT,
oberschenkelumfangRe TEXT,
oberschenkelumfangLi TEXT,
bauchumfang TEXT,
hueftumfang TEXT,
wadenumfangRe TEXT,
wadenumfangLi TEXT
)
''');
}
Future<List<BodyStats>> getBodyStats(String dbTable) async {
Database db = await instance.database;
var bodyStats = await db.query(dbTable, orderBy: 'datum');
List<BodyStats> bodyStatsList = bodyStats.isNotEmpty ? bodyStats.map((e) => BodyStats.fromMap(e)).toList() : [];
return bodyStatsList;
}
Future<int> add(String dbTable, BodyStats item) async {
Database db = await instance.database;
return await db.insert(dbTable, item.toMap());
}
Future<int> remove(String dbTable, String datum) async {
Database db = await instance.database;
return await db.delete(dbTable, where: 'datum = ?', whereArgs: [datum]);
}
Future<int> update(String dbTable, BodyStats item) async {
Database db = await instance.database;
return await db.update(dbTable, item.toMap(), where: 'datum = ?', whereArgs: [item.datum]);
}
Future<bool> uidExists(String dbTable, String datum) async {
var result = await _database!.rawQuery(
'SELECT EXISTS(SELECT 1 FROM $dbTable WHERE datum= "$datum")',
);
int exists = Sqflite.firstIntValue(result)!;
return exists == 1;
}
}
import 'dart:convert';
class BodyStats {
final String? datum;
final String? gewicht;
final String? koerperfett;
final String? muskelanteil;
final String? halsumfang;
final String? schulterumfang;
final String? brustumfang;
final String? armumfangRe;
final String? armumfangLi;
final String? oberschenkelumfangRe;
final String? oberschenkelumfangLi;
final String? bauchumfang;
final String? hueftumfang;
final String? wadenumfangRe;
final String? wadenumfangLi;
BodyStats(
{this.datum,
this.gewicht,
this.koerperfett,
this.muskelanteil,
this.halsumfang,
this.schulterumfang,
this.brustumfang,
this.armumfangRe,
this.armumfangLi,
this.oberschenkelumfangRe,
this.oberschenkelumfangLi,
this.bauchumfang,
this.hueftumfang,
this.wadenumfangRe,
this.wadenumfangLi});
BodyStats copyWith(
{String? datum,
String? gewicht,
String? koerperfett,
String? muskelanteil,
String? halsumfang,
String? schulterumfang,
String? brustumfang,
String? armumfangRe,
String? armumfangLi,
String? oberschenkelumfangRe,
String? oberschenkelumfangLi,
String? bauchumfang,
String? hueftumfang,
String? wadenumfangRe,
String? wadenumfangLi}) {
return BodyStats(
datum: datum ?? this.datum,
gewicht: gewicht ?? this.gewicht,
koerperfett: koerperfett ?? this.koerperfett,
muskelanteil: muskelanteil ?? this.muskelanteil,
halsumfang: halsumfang ?? this.halsumfang,
schulterumfang: schulterumfang ?? this.schulterumfang,
brustumfang: brustumfang ?? this.brustumfang,
armumfangRe: armumfangRe ?? this.armumfangRe,
armumfangLi: armumfangLi ?? this.armumfangLi,
oberschenkelumfangRe: oberschenkelumfangRe ?? this.oberschenkelumfangRe,
oberschenkelumfangLi: oberschenkelumfangLi ?? this.oberschenkelumfangLi,
bauchumfang: bauchumfang ?? this.bauchumfang,
hueftumfang: hueftumfang ?? this.hueftumfang,
wadenumfangRe: wadenumfangRe ?? this.wadenumfangRe,
wadenumfangLi: wadenumfangLi ?? this.wadenumfangLi);
}
Map<String, dynamic> toMap() {
return <String, dynamic>{
'datum': datum,
'gewicht': gewicht,
'koerperfett': koerperfett,
'muskelanteil': muskelanteil,
'halsumfang': halsumfang,
'schulterumfang': schulterumfang,
'brustumfang': brustumfang,
'armumfangRe': armumfangRe,
'armumfangLi': armumfangLi,
'oberschenkelumfangRe': oberschenkelumfangRe,
'oberschenkelumfangLi': oberschenkelumfangLi,
'bauchumfang': bauchumfang,
'hueftumfang': hueftumfang,
'wadenumfangRe': wadenumfangRe,
'wadenumfangLi': wadenumfangLi
};
}
factory BodyStats.fromMap(Map<String, dynamic> map) {
return BodyStats(
datum: map['datum'] != null ? map['datum'] as String : null,
gewicht: map['gewicht'] != null ? map['gewicht'] as String : null,
koerperfett: map['koerperfett'] != null ? map['koerperfett'] as String : null,
muskelanteil: map['muskelanteil'] != null ? map['muskelanteil'] as String : null,
halsumfang: map['halsumfang'] != null ? map['halsumfang'] as String : null,
schulterumfang: map['schulterumfang'] != null ? map['schulterumfang'] as String : null,
brustumfang: map['brustumfang'] != null ? map['brustumfang'] as String : null,
armumfangRe: map['armumfangRe'] != null ? map['armumfangRe'] as String : null,
armumfangLi: map['armumfangLi'] != null ? map['armumfangLi'] as String : null,
oberschenkelumfangRe: map['oberschenkelumfangRe'] != null ? map['oberschenkelumfangRe'] as String : null,
oberschenkelumfangLi: map['OberschenkelumfangLi'] != null ? map['oberschenkelumfangLi'] as String : null,
bauchumfang: map['bauchumfang'] != null ? map['bauchumfang'] as String : null,
hueftumfang: map['hueftumfang'] != null ? map['hueftumfang'] as String : null,
wadenumfangRe: map['wadenumfangRe'] != null ? map['wadenumfangRe'] as String : null,
wadenumfangLi: map['wadenumfangLi'] != null ? map['wadenumfangLi'] as String : null,
);
}
String toJson() => json.encode(toMap());
factory BodyStats.fromJson(String source) => BodyStats.fromMap(json.decode(source) as Map<String, dynamic>);
#override
String toString() =>
'BodyStats(datum: $datum, gewicht: $gewicht, koerperfett: $koerperfett, muskelanteil: $muskelanteil, halsumfang: $halsumfang, schulterumfang: $schulterumfang, brustumfang: $brustumfang, armumfangRe: $armumfangRe, armumfangLi: $armumfangLi, oberschenkelumfangRe: $oberschenkelumfangRe, oberschenkelumfangLi: $oberschenkelumfangLi, bauchumfang: $bauchumfang, hueftumfang: $hueftumfang, wadenumfangRe: $wadenumfangRe, wadenumfangLi: $wadenumfangLi)';
#override
bool operator ==(covariant BodyStats other) {
if (identical(this, other)) return true;
return other.datum == datum &&
other.gewicht == gewicht &&
other.koerperfett == koerperfett &&
other.muskelanteil == muskelanteil &&
other.halsumfang == halsumfang &&
other.schulterumfang == schulterumfang &&
other.brustumfang == brustumfang &&
other.armumfangRe == armumfangRe &&
other.armumfangLi == armumfangLi &&
other.oberschenkelumfangRe == oberschenkelumfangRe &&
other.oberschenkelumfangLi == oberschenkelumfangLi &&
other.bauchumfang == bauchumfang &&
other.hueftumfang == hueftumfang &&
other.wadenumfangRe == wadenumfangRe &&
other.wadenumfangLi == wadenumfangLi;
}
#override
int get hashCode =>
datum.hashCode ^
gewicht.hashCode ^
koerperfett.hashCode ^
muskelanteil.hashCode ^
halsumfang.hashCode ^
schulterumfang.hashCode ^
brustumfang.hashCode ^
armumfangRe.hashCode ^
armumfangLi.hashCode ^
oberschenkelumfangRe.hashCode ^
oberschenkelumfangLi.hashCode ^
bauchumfang.hashCode ^
hueftumfang.hashCode ^
wadenumfangRe.hashCode ^
wadenumfangLi.hashCode;
}
I have already checked the table of the database but it looks good.

Flutter Material App error on debug when switching scene

I was making 2 scene with google Maps and drawing polyline on the map, the apps have no problem running and everything working fine, however on the debug there is this big stack of error in debug which I have no idea what it meant, can anyone tell me what is this ? It is kind of concerning for me
Below is the error on the debug,
════════ Exception caught by rendering library ═════════════════════════════════
Failed to rasterize a picture: unable to create render target at specified size.
The callstack when the image was created was:
#0 new Image._.<anonymous closure> (dart:ui/painting.dart:1670:32)
#1 new Image._ (dart:ui/painting.dart:1672:6)
#2 Scene.toImageSync (dart:ui/compositing.dart:34:18)
#3 OffsetLayer.toImageSync
layer.dart:1497
#4 _RenderSnapshotWidget._paintAndDetachToImage
snapshot_widget.dart:315
#5 _RenderSnapshotWidget.paint
snapshot_widget.dart:345
#6 RenderObject._paintWithContext
object.dart:2853
#7 PaintingContext.paintChild
object.dart:253
#8 RenderProxyBoxMixin.paint
#9 _ZoomEnterTransitionPainter.paint
page_transitions_theme.dart:866
#10 _RenderSnapshotWidget.paint
snapshot_widget.dart:335
#11 RenderObject._paintWithContext
object.dart:2853
#12 PaintingContext.paintChild
object.dart:253
#13 RenderProxyBoxMixin.paint
proxy_box.dart:144
#14 _ZoomExitTransitionPainter.paint
page_transitions_theme.dart:938
#15 _RenderSnapshotWidget.paint
snapshot_widget.dart:335
#16 RenderObject._paintWithContext
object.dart:2853
#17 PaintingContext.paintChild
object.dart:253
#18 RenderProxyBoxMixin.paint
proxy_box.dart:144
#19 _ZoomEnterTransitionPainter.paint
page_transitions_theme.dart:866
#20 _RenderSnapshotWidget.paint
snapshot_widget.dart:335
#21 RenderObject._paintWithContext
object.dart:2853
#22 PaintingContext.paintChild
object.dart:253
#23 RenderProxyBoxMixin.paint
proxy_box.dart:144
#24 RenderObject._paintWithContext
object.dart:2853
#25 PaintingContext._repaintCompositedChild
object.dart:169
#26 PaintingContext.repaintCompositedChild
object.dart:112
#27 PipelineOwner.flushPaint
object.dart:1137
#28 RendererBinding.drawFrame
binding.dart:518
#29 WidgetsBinding.drawFrame
binding.dart:865
#30 RendererBinding._handlePersistentFrameCallback
binding.dart:381
#31 SchedulerBinding._invokeFrameCallback
binding.dart:1289
#32 SchedulerBinding.handleDrawFrame
binding.dart:1218
#33 SchedulerBinding._handleDrawFrame
binding.dart:1076
#34 _invoke (dart:ui/hooks.dart:145:13)
#35 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#36 _drawFrame (dart:ui/hooks.dart:112:31)
The relevant error-causing widget was
MaterialApp
Edit:
Here's the packages and code of the scene that triggered the error in the debug, for extra information, the error did not triggered consistently. I have no idea what trigered it, the materialapp exist on the home page. I use navigator function to switch scene
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_maps_in_flutter/location_service.dart';
import 'package:geolocator/geolocator.dart';
import 'package:label_marker/label_marker.dart';
StreamSubscription<Position>? userStreamlocation;
Position? streamResult;
class navScreen extends StatefulWidget
{
final String userOrigin;
final String userGoal;
navScreen({Key? mykey, required this.userOrigin, required this.userGoal});
#override
State<navScreen> createState ()=>nav_Screen(userOrigin: userOrigin, userGoal: userGoal);
}
class geostracking
{
Future<Position> determineLocation() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Location Service are Disabled');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return Future.error('Location Permission Denied');
}
}
if (permission == LocationPermission.deniedForever) {
return Future.error('Permission Denied Forever');
}
Position position = await Geolocator.getCurrentPosition();
print(position);
return position;
}
Position? listenToLocation()
{
Position? userposition;
final LocationSettings _locationSettings = LocationSettings(accuracy: LocationAccuracy.high,distanceFilter: 100);
userStreamlocation = Geolocator.getPositionStream(locationSettings: _locationSettings).listen(
(userposition) {
print(userposition == null ? 'Unknown' : '${userposition.latitude.toString()}, ${userposition.longitude.toString()}');
setState(){
streamResult=userposition;
}
});
return userposition;
}
}
class nav_Screen extends State<navScreen>
{
StreamSubscription<Position>? streamPosition;
#override
void dispose()
{
super.dispose();
streamPosition?.cancel();
}
late GoogleMapController mapController;
final String userOrigin;
final String userGoal;
nav_Screen({required this.userOrigin,required this.userGoal, });
final LatLng _kGooglePlex = LatLng(baseLat, baseLong);
Set<Marker> _markers = Set<Marker>();
Set<Polyline> _navPolylines =Set<Polyline>();
int _polylineIdCounter=0;
int markerNumber=1;
int _markerIDCounter = 1;
void _setMarker(String ID, var Place) {
String markerLabel;
if(markerNumber==1)
{
markerLabel = 'Start';
}
else
{
markerLabel = "Destination";
}
setState(() {
_markers.addLabelMarker(LabelMarker(
backgroundColor: Color.fromARGB(255, 0, 8, 255),
label: markerLabel,
markerId: MarkerId(ID),
position: LatLng(Place['geometry']['location']['lat'],
Place['geometry']['location']['lng']),)
);
_markerIDCounter++;
markerNumber++;
});
}
void _setPolylines(List<PointLatLng> points) {
final String _navPolylinesID = 'polyline_$_polylineIdCounter';
//print('Check : '+points.toString());
_navPolylines.add(
Polyline(
polylineId: PolylineId(_navPolylinesID),
width: 5,
color: Color.fromARGB(255, 56, 12, 255),
startCap: Cap.roundCap,
endCap: Cap.buttCap,
visible: true,
points: points
.map((point) => LatLng(point.latitude, point.longitude)).toList(),
)
);_polylineIdCounter++;
}
void _onMapCreated(GoogleMapController controller) async {
mapController = controller;
var direction = await LocationService().getDirectionNoWP(userOrigin, userGoal);
print(_polylineIdCounter);
_setPolylines(direction['polyline_decoded']);
String OplaceID = await LocationService().getPlaceID(userOrigin);
var Oplace = await LocationService().getPlace(userOrigin);
_setMarker(OplaceID, Oplace);
String DplaceID = await LocationService().getPlaceID(userGoal);
var Dplace = await LocationService().getPlace(userGoal);
_setMarker(DplaceID, Dplace);
setState(() {});
}
#override
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(title: Text('Test')),
body: Column
(children: [
Expanded(
child:
GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: _kGooglePlex,zoom: 10),
markers: _markers,
polylines: _navPolylines,
onMapCreated: _onMapCreated,
)
),
]),
floatingActionButton: Container(alignment: Alignment.bottomCenter,
child: FloatingActionButton(onPressed: ()async{
geostracking().listenToLocation();
},
child: Icon(Icons.navigation),),
),
);
}
}
Here's a snip of the main page code and it's packages
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_maps_in_flutter/current_location.dart';
import 'package:google_maps_in_flutter/customer_profile.dart';
import 'package:google_maps_in_flutter/location_service.dart';
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'package:geolocator/geolocator.dart';
import 'package:label_marker/label_marker.dart';
void main() => runApp(MyApp());
StreamSubscription<Position>? userStreamlocation;
Position? streamResult;
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Google Map Test',
home: GMap(),
//routes: ,
);
}
}
class GMap extends StatefulWidget {
#override
State<GMap> createState() => GMapState();
}
class requestTemplateConverter{
class GMapState extends State<GMap> {

I get the error The following _CastError was thrown building _BodyBuilder: type 'Null' is not a subtype of type 'JokeBloc' in type cast

Here is the My App Screen:
import 'package:api_call_sample/Repository/JokeRepository.dart';
import 'package:api_call_sample/bloc/jokeevent.dart';
import 'package:api_call_sample/bloc/jokestate.dart';
import 'package:flutter/material.dart';
import "package:api_call_sample/bloc/jokebloc.dart";
import 'package:flutter_bloc/flutter_bloc.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
#override
Widget build(BuildContext context) {
return MaterialApp(
home: BlocProvider(
create: (context) => JokeBloc(
RepositoryProvider.of<JokeRepository>(context),
)..add(LoadJokeEvent()),
child: const HomeScreen()),
);
}
}
Here is the HomeScreen Screen :Getting Error in the Bloc Builder screen
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
#override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Joke Api"),
),
**body: Column( children: [**
**BlocBuilder<JokeBloc, JokeState>(builder: (context, state) {**
print(state);
if (state is JokeLoadingState) {
print("Loading state");
return const CircularProgressIndicator();
}
if (state is JokeLoadedState) {
print(state.jokeData.toString());
return ExpansionTile(
title: Text(state.jokeData.setup),
children: [
Container(
margin: const EdgeInsets.all(5.0),
child: Text(state.jokeData.delivery))
],
);
}
if (state is JokeErrorState) {
print("Error state");
return Text(state.error.toString());
}
return Container();
}),
ElevatedButton(
onPressed: () {
BlocProvider.of<JokeBloc>(context).add(LoadJokeEvent());
},
child: const Text('Load More'))
]),
);
}
}
Here is the JokeBloc:
import 'package:bloc/bloc.dart';
import 'jokestate.dart';
import 'jokeevent.dart';
import 'package:api_call_sample/Repository/JokeRepository.dart';
class JokeBloc extends Bloc<JokeEvent,JokeState>{
final JokeRepository _jokeRepository;
JokeBloc(this._jokeRepository) : super(JokeLoadingState())
{
on<LoadJokeEvent>((event, emit) async {
emit(JokeLoadingState());
try {
final joke = await _jokeRepository.getJoke();
emit(JokeLoadedState(joke));
} catch (e) {
emit(JokeErrorState(e.toString()));
}
});
}
}
Error Message :
The following _CastError was thrown building _BodyBuilder:
type 'Null' is not a subtype of type 'JokeBloc' in type cast.
The relevant error-causing widget was:Scaffold Scaffold:file:///Applications/flutter/api_call_sample/lib/main.dart:37:12
The relevant error-causing widget was:
Scaffold Scaffold:file:///Applications/flutter/api_call_sample/lib/main.dart:37:12
When the exception was thrown, this was the stack:
#0 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:786:72)
#1 _CreateInheritedProviderState.debugFillProperties (package:provider/src/inherited_provider.dart:806:44)
#2 _InheritedProviderScopeElement.debugFillProperties (package:provider/src/inherited_provider.dart:631:20)
#3 DiagnosticableNode.builder.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:2992:17)
#4 DiagnosticableNode.builder (package:flutter/src/foundation/diagnostics.dart:2995:8)
#5 DiagnosticableNode.getProperties (package:flutter/src/foundation/diagnostics.dart:3009:105)
#6 TextTreeRenderer._debugRender (package:flutter/src/foundation/diagnostics.dart:1244:63)
#7 TextTreeRenderer.render (package:flutter/src/foundation/diagnostics.dart:1121:14)
#8 DiagnosticsNode.toStringDeep.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:1776:9)
#9 DiagnosticsNode.toStringDeep (package:flutter/src/foundation/diagnostics.dart:1783:6)
#10 DiagnosticsNode.toString.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:1694:18)
#11 DiagnosticsNode.toString (package:flutter/src/foundation/diagnostics.dart:1706:6)
#12 Diagnosticable.toString.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:3168:78)
#13 Diagnosticable.toString (package:flutter/src/foundation/diagnostics.dart:3170:6)
#14 _StringBase._interpolate (dart:core-patch/string_patch.dart:853:19)
#15 RepositoryProvider.of (package:flutter_bloc/src/repository_provider.dart:78:12)
#16 MyApp.build.<anonymous closure> (package:api_call_sample/main.dart:20:36)
#17 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:736:36)
#18 _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:590:33)
#19 Provider.of (package:provider/src/provider.dart:303:37)
#20 ReadContext.read (package:provider/src/provider.dart:649:21)
#21 _BlocBuilderBaseState.initState (package:flutter_bloc/src/bloc_builder.dart:130:36)
#22 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4942:57)
#23 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4781:5)
#24 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3817:16)
#25 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6350:36)
#26 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6362:32)
... Normal element mounting (19 frames)
#45 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3817:16)
#46 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6350:36)
#47 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6362:32)
... Normal element mounting (99 frames)
#146 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11)
... Normal element mounting (7 frames)
#153 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11)
... Normal element mounting (7 frames)
#160 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11)
... Normal element mounting (275 frames)
#435 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3817:16)
#436 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6350:36)
#437 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6362:32)
... Normal element mounting (377 frames)
#814 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3817:16)
#815 Element.updateChild (package:flutter/src/widgets/framework.dart:3551:18)
#816 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1202:16)
#817 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1171:5)
#818 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1119:18)
#819 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2597:19)
#820 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1118:13)
#821 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:953:7)
#822 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:933:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
Another exception was thrown: Each child must be laid out exactly once.
The way you create the JokeBloc in the BlocProvider doesn't work within this lifecycle,
replacing this code with the code below should fix the problem
create: (_) => JokeBloc(JokeRepository())

keep getting "Null check operator used on a null value" error. i've checked my code 100 times

keep getting "Null check operator used on a null value" error
actually im trying to use providers to get values from database and use em in my app
but im stuck at this i checked my code in every single way but still i keep getting this error
:lib\providers\user_provider.dart
import 'package:flutter/widgets.dart';
import 'package:test_app/models/user.dart';
import 'package:test_app/resources/auth_methods.dart';
class UserProvider with ChangeNotifier {
User? _user;
final AuthMethods _authMethods = AuthMethods();
User get getUser => _user!;
Future<void> refreshUser() async {
User user = await _authMethods.getUserDetails();
_user = user;
notifyListeners();
}
}
lib\pages\home.dart
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_app/providers/user_provider.dart';
import 'package:test_app/models/user.dart' as model;
// import 'dart:html';
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
#override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
#override
void initState() {
super.initState();
addData();
}
addData() async {
UserProvider _userProvider =
Provider.of<UserProvider>(context, listen: false);
await _userProvider.refreshUser();
}
#override
Widget build(BuildContext context) {
model.User user = Provider.of<UserProvider>(context).getUser;
return Scaffold(
body: Center(
child: Text("this is homepage"),
),
);
}
}
debug snippet
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _CastError was thrown building Home(dirty, dependencies:
[_InheritedProviderScope<UserProvider?>], state: _HomeState#17895):
Null check operator used on a null value
The relevant error-causing widget was:
Home Home:file:///C:/Users/abc/Desktop/flutter/test_app/lib/main.dart:53:34
When the exception was thrown, this was the stack:
#0 UserProvider.getUser (package:test_app/providers/user_provider.dart:9:28)
#1 _HomeState.build (package:test_app/pages/home.dart:36:59)
#2 StatefulElement.build (package:flutter/src/widgets/framework.dart:4870:27)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
#4 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#5 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#6 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735:5)
#7 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4919:11)
#8 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729:5)
#9 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
#10 Element.updateChild (package:flutter/src/widgets/framework.dart:3524:20)
#11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#12 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#13 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#14 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#15 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#16 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#17 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#18 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#19 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:862:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
idk what the problem actually im new to flutter and dart
i've using python for my whole life
refreshUser is a future and it sets _user but because you're calling getUser IMMEDIATELY build method, which basically returns _user as a non-null value, the error would be thrown.
Try this:
class UserProvider with ChangeNotifier {
User? _user;
final AuthMethods _authMethods = AuthMethods();
User? get getUser => _user;
Future<void> refreshUser() async {
User user = await _authMethods.getUserDetails();
_user = user;
notifyListeners();
}
}
And your _HomeState:
class _HomeState extends State<Home> {
#override
void initState() {
super.initState();
addData();
}
addData() async {
UserProvider _userProvider =
Provider.of<UserProvider>(context, listen: false);
await _userProvider.refreshUser();
}
#override
Widget build(BuildContext context) {
model.User? user = Provider.of<UserProvider>(context).getUser;
return Scaffold(
body: Center(
child: Text("this is homepage"),
),
);
}
}
In User_Provider.dart,
instead of doing:
User get getUser => _user!;
Do this:
User? get getUser => _user;

I am getting error like this Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe

What I trying to do here is getting data from the 000webhost.com and passing that to my model class. That model class is being passed to the provider. Now when I try to display the information in my screen i am getting error.
In this case i have a model class called StudentData.
class StudentData {
final String rollNumber;
final String firstName;
final String lastName;
StudentData({
this.rollNumber,
this.firstName,
this.lastName,
});
}
Here I am fetching data using http package from internet.
And passing the decoded data to the StudentData class and passing that to my data_provider
import 'package:http/http.dart' as http;
void getStudentData(String currentEmail, BuildContext context) async {
final _url = 'https://aaa.000webhostapp.com/getStudentData.php';
final response = await http.post(_url, body: {'email': currentEmail});
var data = response.body;
final decodedData = jsonDecode(data);
final myRollNumber = decodedData['roll_number'];
final myFirstName = decodedData['first_name'];
final myLastName = decodedData['last_name'];
final myStudentData = StudentData(
rollNumber: myRollNumber, firstName: myFirstName, lastName: myLastName);
Provider.of<DataProvider>(context, listen: false)
.getMyStudentData(myStudentData);
}
Here is my DataProvider
class DataProvider extends ChangeNotifier {
StudentData myStudentData;
void getMyStudentData(StudentData studentData) {
myStudentData = studentData;
notifyListeners();
}
}
After that I have tried to fetch those information in my Screen
class StudentDashboard extends StatelessWidget {
#override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Center(
child:
Text(Provider.of<DataProvider>(context).myStudentData.rollNumber),
),
),
);
}
}
Then the error be like
======== Exception caught by widgets library =======================================================
The following NoSuchMethodError was thrown building StudentDashboard(dirty, dependencies: [_InheritedProviderScope<DataProvider>]):
The getter 'rollNumber' was called on null.
Receiver: null
Tried calling: rollNumber
The relevant error-causing widget was:
StudentDashboard file:///D:/Other/App/Flutter/my_ecampus/lib/views/screens/auth_screens/login_screen.dart:62:53
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1 StudentDashboard.build (package:my_ecampus/views/screens/main_screens/student_screens/student_dashboard.dart:38:69)
#2 StatelessElement.build (package:flutter/src/widgets/framework.dart:4701:28)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4627:15)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
...
====================================================================================================
E/flutter ( 7682): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe.
E/flutter ( 7682): At this point the state of the widget's element tree is no longer stable.
E/flutter ( 7682): To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling dependOnInheritedWidgetOfExactType() in the widget's didChangeDependencies() method.
E/flutter ( 7682): #0 Element._debugCheckStateIsActiveForAncestorLookup.<anonymous closure> (package:flutter/src/widgets/framework.dart:3906:9)
E/flutter ( 7682): #1 Element._debugCheckStateIsActiveForAncestorLookup (package:flutter/src/widgets/framework.dart:3920:6)
E/flutter ( 7682): #2 Element.getElementForInheritedWidgetOfExactType (package:flutter/src/widgets/framework.dart:3986:12)
E/flutter ( 7682): #3 Provider._inheritedElementOf (package:provider/src/provider.dart:324:34)
E/flutter ( 7682): #4 Provider.of (package:provider/src/provider.dart:281:30)
E/flutter ( 7682): #5 getStudentData (package:my_ecampus/business_view/services/database/getData_database.dart:19:12)
E/flutter ( 7682): <asynchronous suspension>
E/flutter ( 7682): #6 LoginScreen._login (package:my_ecampus/views/screens/auth_screens/login_screen.dart:60:9)
E/flutter ( 7682): <asynchronous suspension>
E/flutter ( 7682): #7 LoginScreen.build.<anonymous closure>.<anonymous closure> (package:my_ecampus/views/screens/auth_screens/login_screen.dart:198:31)
E/flutter ( 7682): #8 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
E/flutter ( 7682): #9 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
E/flutter ( 7682): #10 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
E/flutter ( 7682): #11 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
E/flutter ( 7682): #12 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
E/flutter ( 7682): #13 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:259:7)
E/flutter ( 7682): #14 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
E/flutter ( 7682): #15 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:362:20)
E/flutter ( 7682): #16 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
E/flutter ( 7682): #17 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
E/flutter ( 7682): #18 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
E/flutter ( 7682): #19 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
E/flutter ( 7682): #20 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
E/flutter ( 7682): #21 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter ( 7682): #22 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 7682): #23 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 7682): #24 _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter ( 7682): #25 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
E/flutter ( 7682):
This is my main class and i am using multiprovider here.
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<WidgetProvider>(
create: (context) => WidgetProvider()),
ChangeNotifierProvider<DataProvider>(
create: (context) => DataProvider()),
],
child: MaterialApp(
home: LoginScreen(),
),
);
}
}
This is where I call getStudentData function
void _login({String email, String password, BuildContext context}) async {
final loginResponse =
await loginDatabase(email: email, password: password, context: context);
if (loginResponse.isNotEmpty) {
final isStaff = email.contains(RegExp(r'.ce#srit.org$'));
if (isStaff == true) {
getStaffData(email, context);
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => StaffDashboard()));
} else {
getStudentData(email, context);//here is the getStudentData() function
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => StudentDashboard()));
}
} else {
print('Login Failed from loginDatabase(){}');
}
}
The HTTP request is sent to the provider listen: false because it can not listen. So that you can call the method. That's why I designed it from scratch for you. I hope you understand. It will probably work if you do it as I did.
import 'package:http/http.dart' as http;
Future<StudentData> _getStudentData(String currentEmail, BuildContext context)async {
final _url = 'https://aaa.000webhostapp.com/getStudentData.php';
final response = await http.post(_url, body: {'email': currentEmail});
var data = response.body;
if (data.isEmpty) return null;
final decodedData = jsonDecode(data);
final myRollNumber = decodedData['roll_number'];
final myFirstName = decodedData['first_name'];
final myLastName = decodedData['last_name'];
final myStudentData = StudentData(
rollNumber: myRollNumber, firstName: myFirstName, lastName: myLastName);
return MystudentData;
}
class DataProvider extends ChangeNotifier {
StudentData myStudentData;
void getMyStudentData(StudentData studentData) {
myStudentData = studentData;
notifyListeners();
}
}
Future getMyStudentDataAsync() async {
StudentData result = await _getStudentData();
getMyStudentData(result);
}
class StudentDashboard extends StatelessWidget {
#override
void initState() {
super.initState(); getRequest();
}
future getRequest()async{
Provider.of<DataProvider>(context, listen: false)
.getMyStudentDataAsync();
}
#override
Widget build(BuildContext context) {
DataProvider _dataProvider = Provider.of<DataProvider>(context);
return SafeArea(
child: Scaffold(
body: Center(
child:
Text( _dataProvider.myStudentData.rollNumber),
),
),
);
}
}