In my main.dart page I use MultiProvider as shown below. I initialise first two provider in main.dart and I initialise UserInfoProvider in user page.
In user page after initState I get data from remote database and I initialise like shown below. But when I call the values for each provider first 2 providers returns a value but UserInfoProvider returns a null.
How to get UserInfoProvider _currentUserPhone value?
UPDAE: (1) NOT WORKING PART: Below initialisation didnt work when I try to get a value from provider because I am creating another instance an object. Correct way is in below:
UserInfoProvider initialisation:
UserInfoProvider userInfoProvider = UserInfoProvider();
userInfoProvider.initUserInfo(
"$_currentCustomerNo",
"$_currentCustomerToken",
"$_currentCustomerName",
"$_currentUserMobile",
"$_currentUserEmail",
"$_currentUserAddress",
1);
UPDAE: (2) WORKING PART:
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("===========================================================================");
}
Result:
===========================================================================
===========================================================================
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();
}
}
UPDATE:
In UserInfoProvider I declare all my variable as String userMobile; as suggested. I got the value from database and I printed (1) successfully. I also print the value before (2) notifyListeners(); also I print the (3) value after initializing user provider. But In my another page (4) I couldn't print the value.
(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: