如何从颤振提供程序获取类值?

问题描述

在我的 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
===========================================================================
===========================================================================

ma​​in.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 (将#修改为@)