我正在尝试实现相同的场景,这是我的代码:主文件:
ChangeNotifierProvider<SharedPreferencesData>(
create: (context) => SharedPreferencesData(),
),
ChangeNotifierProxyProvider<SharedPreferencesData, DatabaseService>(
create: (_) => DatabaseService(),
update: (_, sharedPreferencesData, databaseService) {
print('ChangeNotifierProxyProvider RAN');
databaseService..setSpCompanyId = sharedPreferencesData.sPCompanyId;
return null;
},
),
SharedPreferencesData 文件:
class SharedPreferencesData with ChangeNotifier {
String sPCompanyId = '';
void setCompanyId(String cpID) {
sPCompanyId = cpID;
print('setCompanyId sPCompanyId:$sPCompanyId');
notifyListeners();
}
}
数据库服务文件:
class DatabaseService with ChangeNotifier {
String sPCompanyId = 'empty';
String get getSpCompanyId => sPCompanyId;
set setSpCompanyId(String value) {
print('value in setter database before if: $value');
if (value != getSpCompanyId) {
print('value in setter database: $value');
sPCompanyId = value;
notifyListeners();
}
}
DatabaseService 类不更新。我已经添加了打印来确定什么正在运行,什么没有运行。当我运行我的代码时,Shared_Preferences / setCompanyId 方法中的打印正确运行。然而 main.dart 文件中的打印功能 print('ChangeNotifierProxyProvider RAN'); 数据库服务文件中的 AND 打印('setter 数据库中的值:$value');不运行。
我错过了什么?为什么 SharedPreferencesData 中的 notify sPCompanyId setter notifyListeners() 没有通过 ChangeNotifierProxyProvider 更新 DatabaseService String sPCompanyId?谢谢!