问题描述
在我的 main.dart 页面中,我使用 MultiProvider,如下所示。我在 main.dart 中初始化前两个提供程序,在用户页面中初始化 UserInfoProvider。
在 initState 之后的用户页面中,我从远程数据库获取数据,并如下所示进行初始化。但是当我调用每个提供者的值时,前 2 个提供者返回一个值,但 UserInfoProvider 返回一个空值。
如何获取 UserInfoProvider _currentUserPhone 值?
UPDAE:(1) 不工作部分: 当我尝试从提供程序获取值时,以下初始化不起作用,因为我正在创建另一个实例对象。正确方法如下:
UserInfoProvider 初始化:
UserInfoProvider userInfoProvider = UserInfoProvider();
userInfoProvider.initUserInfo(
"$_currentCustomerNo","$_currentCustomerToken","$_currentCustomerName","$_currentUserMobile","$_currentUserEmail","$_currentUserAddress",1);
UPDAE:(2) 工作部分:
Provider.of<UserInfoProvider>(context,listen: false).userMobile = _currentUserMobile;
show_user_data.dart:
/// (1) INIT STATE
@override
void initState() {
super.initState();
setState(() {
// Todo: GET DEVICE TYPE from PROVIDER
deviceTypeMobile = Provider.of<DeviceInfoProvider>(context,listen: false).deviceMobile;
// Todo: GET APP VERSION from PROVIDER
final String _tempBuildNo = Provider.of<PackageInfoProvider>(context,listen: false).buildNumber;
_appBuildNumber = int.parse(_tempBuildNo.toString().trim());
// Todo: GET USER INFO from PROVIDER
_currentUserPhone = Provider.of<UserInfoProvider>(context,listen: false).userMobile;
});
print("\n\n");
print("===========================================================================");
print("===========================================================================");
print("deviceTypeMobile: $deviceTypeMobile");
print("_appBuildNumber: $_appBuildNumber");
print("_currentUserPhone: $_currentUserPhone");
print("===========================================================================");
print("===========================================================================");
}
结果:
===========================================================================
===========================================================================
deviceTypeMobile: true
_appBuildNumber: 47
_currentUserPhone: null
===========================================================================
===========================================================================
main.dart
void main() async {
PackageInfoProvider packageInfoProvider = PackageInfoProvider();
packageInfoProvider.initPackageInfo();
DeviceInfoProvider deviceInfoProvider = DeviceInfoProvider();
deviceInfoProvider.initDeviceInfo();
//runApp(NTMSApp());
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => packageInfoProvider),ChangeNotifierProvider(create: (_) => deviceInfoProvider),ChangeNotifierProvider(create: (_) => UserInfoProvider())
],child: NTMSApp(),),);
}
package_info_provider.dart
class PackageInfoProvider with ChangeNotifier {
String appName = "";
String packageName = "";
String version = "";
String buildNumber = "";
Future<void> initPackageInfo() async {
final PackageInfo info = await PackageInfo.fromPlatform();
appName = info.appName;
packageName = info.packageName;
version = info.version;
buildNumber = info.buildNumber;
notifyListeners();
}
}
user_info_provider.dart
class UserInfoProvider extends ChangeNotifier {
String userNo = "";
String userToken = "";
String userName = "";
String userMobile = "";
String userEmail = "";
String userAddress = "";
int userAuthority = 0;
void initUserInfo(
String currentUserNo,String currentUserToken,String currentUserName,String currentUserMobile,String currentUserEmail,String currentUserAddress,int userAuthority) {
userNo = currentUserNo;
userToken = currentUserToken;
userName = currentUserName;
userMobile = currentUserMobile;
userEmail = currentUserEmail;
userAddress = currentUserAddress;
userYetki = currentUserYetki;
notifyListeners();
}
}
更新:
在 UserInfoProvider 中,我将所有变量声明为 String userMobile;按照建议。我从数据库中获取了值并成功打印了 (1)。我还在 (2) notifyListeners(); 之前打印了该值;我也在初始化用户提供程序后打印 (3) 值。但是在我的另一页 (4) 中,我无法打印该值。
(1) +++++++++++++++++++++++++++++++++++++++++
Flutter: IN data from socket API - before Provider Initialise
Flutter: _currentUserMobile: 53******90
Flutter: +++++++++++++++++++++++++++++++++++++++++
Flutter:
(2) +++++++++++++++++++++++++++++++++++++++++
Flutter: IN void initUserInfo() in class UserInfoProvider
Flutter: currentUserMobile: 53******90
Flutter: userMobile: 53******90
Flutter: +++++++++++++++++++++++++++++++++++++++++
Flutter:
(3) +++++++++++++++++++++++++++++++++++++++++
Flutter: IN data from socket API - after Provider Initialise
Flutter: _currentUserMobile: 53******90
Flutter: +++++++++++++++++++++++++++++++++++++++++
Flutter:
Flutter:
(4) +++++++++++++++++++++++++++++++++++++++++
Flutter: deviceTypeMobile: false
Flutter: _appBuildNumber: 67
Flutter: _currentUserPhone: null
+++++++++++++++++++++++++++++++++++++++++
Flutter:
Flutter:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)