在 Flutter 上使用 Provider 时,在 null 错误时调用了 getter

时间:2021-01-24 15:02:51

标签: flutter 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");
  }
}

我包装了我的根小部件:

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.

请解释一下,我遗漏了什么?

1 个答案:

答案 0 :(得分:0)

提供者概念和示例可在 Provider docs 上获得。

newNode 包裹您的 Consumer 小部件(应用小部件或根屏幕)的根:

ChangeNotifierProvider

并且在所有子小部件中,您都可以访问 ChangeNotifierProvider( create: (_) => AppProvider(), child: ... ) 模型。