首页 > 解决方案 > 在 Flutter 上使用 Provider 时调用 getter 时出现 null 错误

问题描述

我有提供者:

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");
  }
}

我包装我的根小部件:

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

然后我试图像这样访问 ln 属性:

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

或者像这样:

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

但它一直给我错误: The getter 'ln' was called on null.

请解释一下,我错过了什么?

标签: flutterprovider

解决方案


提供者文档中提供的提供者概念和示例。

Consumer将小部件的根(应用小部件或根屏幕)包装为ChangeNotifierProvider

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

在所有子小部件中,您都可以访问AppProvider模型。


推荐阅读