Flutter Как обновить магазин в Redux - PullRequest
2 голосов
/ 06 февраля 2020

здесь я создаю одного пользователя, это функциональность моего приложения.

, когда я создаю пользователя путем заполнения формы. после нажатия на кнопку регистрации он будет перенаправлен на страницу панели инструментов, а затем в представлении панели вкладок будут отображаться все зарегистрированные пользователи.

но здесь у меня проблема, мой пользователь успешно зарегистрирован, но когда я перенаправлен на панель мониторинга, она не будет отображаться. если я выйду из системы, а затем снова войдите в систему, после этого она будет отображаться там. Вы можете увидеть изображение приборной панели.

Я не знаю, это проблема обновления магазина или что-то еще. Пожалуйста, помогите мне, ваша маленькая помощь может сделать мой день.

enter image description here

Вот событие Click кнопки регистрации

  void _onBspSignupClick(BusinessDetailsViewModel bdVm) async {
    setState(() {
      _isLoading = true;
      _countryId = int.parse(bdVm.user.user.country.id);
    });

    List<BusinessProfilePicture> bspPictures =
        widget.bspSignupCommonModel.businessProfilePictures;

    Map restProfilePicturesMap = await _restFileUploadResponse(bspPictures);

    Map restDocumentsMap;
    if (widget.bspSignupCommonModel.isLicensed) {
      restDocumentsMap = await _restFileUploadResponse(
          widget.bspSignupCommonModel.licensed[0].bspLicenseImages);
    } else {
      List<BusinessProfilePicture> unRegisteredImages = [
        ...widget.bspSignupCommonModel.unlicensed[0].bspLicenseImages,
        ...widget.bspSignupCommonModel.unlicensed[1].bspLicenseImages
      ];
      restDocumentsMap = await _restFileUploadResponse(unRegisteredImages);
    }

    Map<String, dynamic> bspSignupResponse;
    BSPSignupRepository _bspSignupRepository = BSPSignupRepository();

    if (widget.bspSignupCommonModel.businessId != null) {
      // Create branch
      int businessId = widget.bspSignupCommonModel.businessId;
      print('businessId = $businessId');
      print('create the branch instead of the business');
      Map<String, dynamic> branchQueryMap =
          _createBranchQuery(restProfilePicturesMap, restDocumentsMap);
      print('branchQueryMap = $branchQueryMap');
      String token = bdVm.user.token;
      print('token = $token');
      bspSignupResponse = await _bspSignupRepository.createBranchOfBusiness(
          branchQueryMap, token);
    } else {
      // Create business
      Map<String, dynamic> bspUserSignUpMap =
          _createBusinessQuery(restProfilePicturesMap, restDocumentsMap);

      print('bspUserSignUpMap = $bspUserSignUpMap');
      String token = bdVm.user.token;
      print('token = $token');
      bspSignupResponse =
          await _bspSignupRepository.createMyBusiness(bspUserSignUpMap, token);
    }

    setState(() {
      _isLoading = false;
    });

    _postBspCreationActions(bspSignupResponse, bdVm);
  }


  _postBspCreationActions(
    Map<String, dynamic> bspSignupResponse,
    BusinessDetailsViewModel bdVm,
  ) async {
    print('bspSignupResponse');
    print(bspSignupResponse);
    if (bspSignupResponse['error'] != null) {
      var errors = bspSignupResponse['error'][0];
      print('errors $errors');
      String errorMsg = errors.message;
      print('errorMsg $errorMsg');
      var redirectTo = false;
      _showDialogOnGQLFinished(
        context,
        'Error',
        errorMsg,
        redirectTo,
      );
    } else {
      var redirectTo = true;
      _updateStoreValue(bspSignupResponse, bdVm);
      _showDialogOnGQLFinished(
        context,
        'Done',
        'Thank you for signing up',
        redirectTo,
      );
    }
  }



 _updateStoreValue(
    Map<String, dynamic> bspSignupResponse,
    BusinessDetailsViewModel bdVm,
  ) async {
    try {
      LoginRepository _loginRepository = LoginRepository();
      SharedPreferences preferences = await SharedPreferences.getInstance();
      bool rememberMe = preferences.getBool('rememberMe');
      Map<String, dynamic> dashboardItems =
          await _loginRepository.getDashboardItems(bdVm.user.token);

      if (dashboardItems['error'] != null) {
        print('Fail to fetch the dashboard items from the business details');
        print(dashboardItems['error']);
      } else {
        setState(() async {
          DashboardItems dashboardItemsModel =
              DashboardItems.fromJson(dashboardItems['data']);
          // Update the User in store
          LoginUser userModel = LoginUser(
            token: bdVm.user.token,
            user: User.fromJson(
              bspSignupResponse['data']['createBusiness']['user'],
            ),
          );
          SharedPreferences preferences = await SharedPreferences.getInstance();
          preferences.setString(
            'token',
            bdVm.user.token,
          );
          bdVm.setBspUser(context, userModel);
          bdVm.setDashboardItems(context, dashboardItemsModel);
          if (rememberMe) {
            preferences.setString('user', loginUserToJson(userModel));
            preferences.setString(
              'dashboarditems',
              dashboardItemsToJson(dashboardItemsModel),
            );
          }
        });
      }
    } catch (e) {
      print('error while loading the dashboard $e');
    }
  }

Вот экран панели инструментов

  List<Widget> _buildDashboards(BspTabViewModel bspTabViewModel) {
    List<Widget> dashboards = [];
    List<EmployeesByUserIdElement> employements =
        bspTabViewModel.employeements.employeesByUserId;
    for (int i = 0; i < employements.length; i++) {
      dashboards.add(BSPDashboardTab());
    }
    return dashboards;
  }

  List<Widget> _buildTabs(BspTabViewModel bspTabViewModel) {
    Orientation orientation = MediaQuery.of(context).orientation;
    List<Tab> tabs = [];
    List<EmployeesByUserIdElement> employements =
        bspTabViewModel.employeements.employeesByUserId;
    print("================Employements ====================");
    print(employements);
    for (int i = 0; i < employements.length; i++) {
      tabs.add(
        Tab(
          child: Text(
            employements[i].branch.name,
            style: TextStyle(
              fontSize: orientation == Orientation.portrait
                  ? MediaQuery.of(context).size.width * 0.040
                  : MediaQuery.of(context).size.width * 0.035,
            ),
          ),
        ),
      );
    }
    return tabs;
  }

  Widget content(BuildContext context, BspTabViewModel bspTabViewModel) {
    Orientation orientation = MediaQuery.of(context).orientation;
    if (bspTabViewModel.employeements != null) {
      return DefaultTabController(
        length: bspTabViewModel.employeements.employeesByUserId.length,
        child: Scaffold(
          appBar: new PlatformAdaptiveAppBar(
              backgroundColor: bspcolorStyles['primary'],
              bottom: TabBar(
                isScrollable: true,
                indicatorColor: Colors.black,
                unselectedLabelColor: Colors.black.withOpacity(0.5),
                tabs: _buildTabs(bspTabViewModel),
              ),
              title: new Text(
                "Dashboard",
                style: TextStyle(
                  color: Colors.black,
                  fontSize: orientation == Orientation.portrait
                      ? MediaQuery.of(context).size.width * 0.050
                      : MediaQuery.of(context).size.width * 0.035,
                  fontWeight: FontWeight.bold,
                ),
              ),
              platform: Theme.of(context).platform),
          body: TabBarView(
            children: _buildDashboards(bspTabViewModel),
          ),
          drawer: new BspMainDrawer(),
        ),
      );
    }
    return FadeInUi();
  }


  @override
  Widget build(BuildContext context) {
    return new StoreConnector<AppState, BspTabViewModel>(
        converter: (Store<AppState> store) => BspTabViewModel.fromStore(store),
        onInit: (Store<AppState> store) async {
          await _showEmployementDialog(store);
        },
        builder: (BuildContext context, BspTabViewModel bspTabViewModel) {
          return StreamBuilder(builder: (context, snapshot) {
            return content(context, bspTabViewModel);
          });
        });
  }
...