【问题标题】:Flutter Provider and sqflite integrationFlutter Provider 和 sqflite 集成
【发布时间】:2021-11-22 06:01:35
【问题描述】:

我在 Flutter 应用中有一个 sqflite 表来存储用户详细信息。对于我正在使用提供程序的应用程序的状态管理。我在这个应用程序中有两个模型,一个用于 api 调用,另一个用于 sqflite 表。

这是从api获取用户数据的模型

// PS. The class structure
    class UserDetails {
      String? id;
      bool? mobileVerified;
      String? resentOtp;
      String? email;
      String? regmail;
      List<UserDeviceDetails>? deviceDetails;
      List<UserLocationDetails>? locationDetails;
      List<String>? deviceId;
      String? userValidCode;
      String? leadstatus;
      bool? dailyMail;
      bool? weeklyMail;
      bool? promotionalMail;
      bool? trValid;
      String? userType;
      String? createdAt;
      String? updatedAt;
      int? otp;
      bool? emailVerified;
      List<UserAccount>? accounts;
    }

用户表的模型如下

class UserTable {
  int? id;
  String? accountDetails;
  String? accountId;
  String? childName;
  String? childGender;
  int? expiry;
  int? finalSequenceNo;
  int? packageIndex;
  String? parentName;
  String? productType;
  String? userId;
  int? age;
  int? dob;
  int? nextSyncTime;
  String? productSubType;
  String? validTill;
  int? latestUpdatePkgSeqNo;
  int? guidedTour;
}

用于检查(在启动画面内)用户是否已登录和路由,我依赖于这个用户表,并且还从这个表向提供者推送值。

 _dbHelper.getAllUserData().then((value) {
      String routeName = value.length > 0
          ? HomeScreen.routeName
          : IntroductionScreen.routeName;
      print('navigate to next page' + routeName);
      if(value.length>0){
        Provider.of<UserProvider>(context,listen: false).setuserProvider(value[0]);
      }

如果表中存在值,上述代码会将值推送给提供者。我遇到的问题是用户第一次登录时(现在我需要重新启动应用程序以供提供商获取值)。我希望在将数据存储到用户表的同时将值推送到提供程序中。提供者如下所示。

class UserProvider with ChangeNotifier{
  UserTable? user;
  void setuserProvider(UserTable userdata){
    user=userdata;
    notifyListeners();
  }

  UserTable? get userdata{
    return user;
  }
}

  //Function to insert details inside user table
  Future  _insertuserDetails(UserDetails? userDetails) async{
      if(userDetails != null){
         await _dbhelper!.insertUserDetails(userDetails);

我使用 insertfunction 将 userdetails 的值插入到 userTable(table)。如何将其传递给提供者

【问题讨论】:

    标签: flutter flutter-provider sqflite


    【解决方案1】:

    您可以在用户登录时使用相同的功能(即您的登录屏幕)。也许您的问题是如何在初始屏幕和登录屏幕中超出提供程序。 我没有清楚地了解您的问题,但以下内容可能会对您有所帮助

    1. 将您的提供程序放在 AppState() 类中的“main.dart”上
    2. 现在您可以在登录屏幕中访问它并在用户点击提交按钮时存储价值。

    “main.dart”文件

    Future<void> main() async {
      runApp(MyApp());
    }
    
     @override
      Widget build(BuildContext context) {
        return MultiProvider(
            providers: [
            ChangeNotifierProvider(
                create: (context) => YourProvider(),
              ),
              ],child:
            MaterialApp(
          title: 'MyApp',
          home: SplashScreen(),
          routes: {
          AppConstant.ROUTE_LOGIN_SCREEN: (ctx) => LOGINSCREEN(),
          }
          )
        ) 
        
        
    } 
    

    “登录.dart” onSubmit 按下

    onPressed:(){
    // make function for user input
     Provider.of<UserProvider>(context,listen: false).setuserProvider("your value");
    }
    

    【讨论】:

    • 取值来自api,形式为userDetail。提供者包含模型 UserTable 。因此,将价值从用户表推送到提供者是有效的。在登录期间,我需要同样的。我的意思是数据来自 userDetail 我想以 UserTable 的形式推送给提供者
    • 那么您必须手动将 userDetail 模型中的值分配给 UserTable。然后在函数中传递值。前任。 userDetail.id = UserTable.id;
    猜你喜欢
    • 2021-01-08
    • 2021-05-30
    • 2021-03-04
    • 1970-01-01
    • 2020-07-01
    • 2023-01-02
    • 2019-05-06
    • 2021-09-14
    • 2021-06-12
    相关资源
    最近更新 更多