Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
525 views
in Technique[技术] by (71.8m points)

The getter was called on null error when using Provider on Flutter

I have provider:

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';

class AppProvider extends ChangeNotifier {
  Box tjkBox;

  // Language
  String _ln = "ru";
  String get ln => _ln;
  set ln(String l) {
    _ln = l;
    tjkBox.put("language", l);
    notifyListeners();
  }

  AppProvider() {
    tjkBox = Hive.box("tjk");
    _ln = tjkBox.get("language", defaultValue: "ru");
    print("ln = $_ln");
  }
}

I wrap my root widget:

return MultiProvider(
  providers: [
    ChangeNotifierProvider<AppProvider>(create: (_) => AppProvider()),
    // here goes other providers
  ],
  child:  ...
  
);

Then I am trying to access to the ln property like this:

Consumer<AppProvider>(
  builder: (context, app, child) => Text(app?.ln),
)

Or like this:

Text(Provider.of<AppProvider>(context).ln)

But it keeps giving me error: The getter 'ln' was called on null.

Please explain, What I am missing?

question from:https://stackoverflow.com/questions/65872159/the-getter-was-called-on-null-error-when-using-provider-on-flutter

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Provider concepts and samples available on Provider docs.

Wrap root of your Consumer widget (app widget or a root screen) with ChangeNotifierProvider:

ChangeNotifierProvider(
  create: (_) => AppProvider(),
  child: ...
)

And in all child widgets you can access AppProvider model.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...