Flutter where and firstwhere methods is calls null with data from provider

Viewed 590

First is is getting null in HomeScreen

Here is the code:

final providedList = Provider.of<List<category.List>>(
  context,
);

appbarColor = providedList
    .firstWhere(
      (element) => element.name == currentListName,
     orElse: () => providedList.first,
    )
    .color;

Here is the error

The method 'firstWhere' was called on null. Receiver: null Tried calling: firstWhere(Closure: (List) => bool, orElse: Closure: () => List)

then HomeBody

Here is the code:

List<Todo> todos = context.watch<List<Todo>>()
        .where((e) =>
            e.category == widget.selectedCategory && e.isCompleted == false)
        .toList() ??
    [];

Here is the error

The method 'where' was called on null. Receiver: null Tried calling: where(Closure: (Todo) => bool) The relevant error-causing widget was HomeBody

and each error code prints twice

1 Answers

This is because your providedList is equal to null. You need to get a properly initialized value from the provider, then call the methods .firstWhere and .where.

in provider class

List<Todo> todos = [];

in other place

 List<Todo> readTodoFromProvider = Provider.of<Todo>(context,listen: false).todos;
 
 var result =  readTodoFromProvider.where((e) =>e.category == widget.selectedCategory && e.isCompleted == false).toList();

To make the Provider work, you need to add it Providers are above MyApp, for example

//lib/main.dart

void main() {
  runApp(

    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => Todo()),
      ],


      child: const MyApp(),
    ),
  );
}
   
Related