首页 > 解决方案 > Flutter firestore 共享首选项双类型数据问题

问题描述

在我的颤振应用程序中,当用户注册时,我需要保存双重类型的“身高”数据,我正在使用SharedPreferences它,但我有一个问题。

这是我的SharedPreferences代码:

static Future<bool> saveUserWeightSharedPreference(double userWeight) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return await prefs.setDouble(sharedPreferenceUserLoggedInKey, userWeight);
}

这是我的注册功能,我在哪里使用SharedPreferences。错误是:

参数类型“String”不能分配给参数类型“double”。(argument_type_not_assignable 在 [spor3] lib\login\signup.dart:52)

  signMeUp(){

    if(formKey.currentState.validate()){

      Map<String, String> userInfoMap = {
        "name":userNameTextEditingController.text,
        "email": emailTextEditingController.text,
        "height": heightTextEditingController.text,
        "weight": weightTextEditingController.**text**, // this "text" codes not working
        "weightTwo": weightTwoTextEditingController.text,
      };

      HelperFunctions.saveUserEmailSharedPreference(emailTextEditingController.text);
      HelperFunctions.saveUserEmailSharedPreference(userNameTextEditingController.text,);
      HelperFunctions.saveUserHeightSharedPreference(heightTextEditingController.text,);
      HelperFunctions.saveUserWeightSharedPreference(weightTextEditingController.**text**,);// and this 
      "text" codes not working
      HelperFunctions.saveUserWeightTwoSharedPreference(weightTwoTextEditingController.text,);




      setState(() {
        isLoading = true;
      });
      authMethods.signUpWithEmailAndPassword(emailTextEditingController.text, passwordTextEditingController.text).then((val){



        databaseMethods.uploadUserInfoTwo(userInfoMap);
        HelperFunctions.saveUserLoggedInSharedPreference(true);
        Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => MainPage()));
      });
    }
  }

编辑 1:我更改了我的 signMeUp() 函数,但这次我有另一个问题

signMeUp(){


if(formKey.currentState.validate()){

  Map<String, dynamic> userInfoMap = {
    "name":userNameTextEditingController.text,
    "email": emailTextEditingController.text,
    "height": heightTextEditingController.text,
    "weight": double.parse(weightTextEditingController.text),
    "weightTwo": weightTwoTextEditingController.text,
  };

  HelperFunctions.saveUserEmailSharedPreference(emailTextEditingController.text);
  HelperFunctions.saveUserEmailSharedPreference(userNameTextEditingController.text,);
  HelperFunctions.saveUserHeightSharedPreference(heightTextEditingController.text,);
  HelperFunctions.saveUserWeightSharedPreference(double.parse(weightTextEditingController.text),);
  HelperFunctions.saveUserWeightTwoSharedPreference(weightTwoTextEditingController.text,);

  
  setState(() {
    isLoading = true;
  });
  authMethods.signUpWithEmailAndPassword(emailTextEditingController.text, passwordTextEditingController.text).then((val){

    
    databaseMethods.uploadUserInfoTwo(userInfoMap);
    HelperFunctions.saveUserLoggedInSharedPreference(true);
    Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => MainPage()));
  });
}
}

问题:

处理手势时引发以下 FormatException:Invalid double

抛出异常时,这是堆栈:#0 double.parse (dart:core-patch/double_patch.dart:111:28)

标签: androidfirebasefluttergoogle-cloud-firestore

解决方案


TextEditingController总是返回一个Stringfortext属性链接。因此,您只需将其解析为双倍然后将其传递给您的函数。

HelperFunctions.saveUserWeightSharedPreference(double.parse(weightTextEditingController.text),);

推荐阅读