Using Form With PageView Overwrites Previous Form Data With Each Page Flutter

861

You can use TextEdittingController for each field.

Share:
861
Doing Things Occasionally
Author by

Doing Things Occasionally

Doing Things Occasionally. Like coding shit.

Updated on December 18, 2022

Comments

  • Doing Things Occasionally
    Doing Things Occasionally over 1 year

    I am using a pageview to display a form and get data. But, with every page, the previous data is is overwritten. I'm not sure why. Here is what I'm doing:

    I want to get these pieces of information from each page:

      final Map<String, dynamic> ratingCapsule = {
        "prodId": null,
        "starRating": null,
        "_foodRating": null,
        "_drinkRating": null,
        "recommend": null
      }; 
    

    Page View:

    Expanded(
                flex: 2,
                child: Form(
                  key: _userRatingKey,
                  child: IndexedStack(
                    index: index,
                    children: <Widget>[
                      PageView.builder(
                        itemBuilder: (context, i) {
                          return _prodctReview2(context, i);
                        },
                        itemCount: currentReview.order.orderDetails.length,
                        controller: _pageController,
                      )
                    ],
                  ),
                )),
    

    Validator:

      void _submit(srating, effectRating, usageRating, userRecommend) {
        final FormState form = _userRatingKey.currentState;
        if (form.validate()) {
          ratingCapsule['starRating'] = srating;
          ratingCapsule['_foodRating'] = effectRating;
          ratingCapsule['_drinkRating'] = _drinkRating;
          ratingCapsule['recommend'] = userRecommend;
          form.save();
          print(ratingCapsule['prodId']);
          print(ratingCapsule['starRating']);
          print(ratingCapsule['_foodrating']);
          print(ratingCapsule['_drinkRating']);
          print(ratingCapsule['recommend']);
          print(ratingCapsule.values);
    
          ratingsList.add(ratingCapsule);
          print(ratingsList);
    
          setState(() {
            vaildForm = true;
            print(ratingCapsule);
          });
          _clearInput();
          ratingCapsule.clear();
          nextPage();
        } else {
          print('Invalid Form');
          print(ratingCapsule.values);
    
          print(ratingCapsule);
        }
      }
    

    On the first page I get:

    [{prodId: 51, starRating: 4.0, _foodRating: 5, _drinkRating: 1, recommend: 1}]
    

    But on the second page I get:

    [{prodId: 55, starRating: 5.0, _foodRating: 5, _drinkRating: 1, recommend: 1}, {prodId: 55, starRating: 5.0, _foodRating: 5, _drinkRating: 1, recommend: 1}]
    

    Overwriting the previous data with the new information. How do I stop this?