基になるリストが更新されても、FlutterListViewは更新されません

Lakshay dutta

カード(特殊効果のあるコンテナ)のリストを備えたこのカードゲームアプリを作成しています。リストはプロバイダー/コンシューマーメカニズムによって管理および更新されます。

こんな感じ ここに画像の説明を入力してください

class LowerSectionWithScrollingCardList extends StatefulWidget {
  @override
  _LowerSectionWithScrollingCardListState createState() =>
      _LowerSectionWithScrollingCardListState();
}

class _LowerSectionWithScrollingCardListState
    extends State<LowerSectionWithScrollingCardList> {

  @override
  Widget build(BuildContext context) {
    return Consumer<GameState>(builder: (context, gameState, child) {
      print('lower list ${gameState.gcurrentPlayers[0].ownList}');
      return Expanded(
        flex: 34,
        child: Container(
          color: Colors.white,
          child: ListView(
            children: gameState.gcurrentPlayers[0].ownList,
            scrollDirection: Axis.horizontal,
          ),
        ),
      );
    });
  }
}

gameState.gcurrentPlayers [0] .ownListは私たちの最初のプレーヤーであり、ownlistは、アプリ内の他のボタンをクリックすることで更新されるウィジェットまたはカードの実際のリストです。

リストはこの方法で正確に更新されます

void ggiveCardToCurrentPlayer(int howMuch){
    for(int i=0;i<howMuch;i++)
      ggetPlayerWithCurrentTurn().ownList.add(gplayingCards.removeLast());
    notifyListeners();
  }

「notifylisteners」が呼び出された後、buildメソッドのprintステートメントが新しく追加されたカードを印刷するため、コンシューマーが新しいデータで更新されることを100%確信しています。

最後に、問題は、リストビュー自体が更新されないのに、レンダリングされるリストにそれらのカードが追加されていることです。

同様の問題に関するいくつかの投稿を確認したところ、データ項目にキーを追加することが提案されています。私の場合、データ項目は私のカードであり、キーを追加しました。変化なし。

class RegularUnoCard extends StatelessWidget{
  final Color _color;
  final String _value;
  final Key _key;
  RegularUnoCard(this._color, this._value,this._key);

@override
  Widget build(BuildContext context) {
    return Container(
      key: _key,
      margin: EdgeInsets.symmetric(
          vertical: _cardMarginVer, horizontal: _cardMarginHor),
      padding: EdgeInsets.all(15),
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(_cardCornerRadii),
        border: Border.all(color: _color, width: 4, style: BorderStyle.solid),
        boxShadow: [
          BoxShadow(
              color: _color,
              spreadRadius: (_value == plus2) ? 8 : 2,
              blurRadius: 5)
        ],
        color: Colors.white,
      ),
      child: Container(
        height: _cardHeight,
        width: _cardWidth,
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(60),
          color: _color,
        ),
        child: Center(
          child: getLogo(),
        ),
      ),
    );
  }

これがカードに鍵を入れる正しい方法であることを願っています。

また、setState()を呼び出す必要があることも読みましたが、listView内からSetstateを呼び出す場所がありません。

ownListロジックをProvider.of(context).playerlist [0] .ownlistなどに置き換えようとしましたが、それも機能しません

この評価に十分なデータを提供できたと思います。さらに情報が必要な場合はコメントしてください。あなたの時間と提案をどうもありがとう。

Lakshay dutta

私は、問題の詳細読み、役立ったソースでした。この

基本的に私のリストは更新されていましたが、配列の参照を提供していました。フラッターは不変のデータで機能するため、配列の変更を検出しませんでした。したがって、私がしなければならなかったのは、既存の参照配列から新しいリストを作成することだけでした。

children: List<Widget>.from(gameState.gcurrentPlayers[0].ownList),

最終的なListViewは次のようになります。

@override
  Widget build(BuildContext context) {
    return Consumer<GameState>(builder: (context, gameState, child) {
      print('lower list ${gameState.gcurrentPlayers[0].ownList}');
      return Expanded(
        flex: 34,
        child: Container(
          color: Colors.white,
          child:ListView(
            children: List<Widget>.from(gameState.gcurrentPlayers[0].ownList),
            scrollDirection: Axis.horizontal,
          ),
        ),
      );
    },key: UniqueKey(),);
  }
}

今、私のカードゲームは新しいカードで更新されています!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

FlutterListViewは更新されません

分類Dev

リストアイテムが変更されても、FlutterListViewが更新されない

分類Dev

リストアイテムが変更されても、FlutterListViewが更新されない

分類Dev

基になるデータが変更されても、TreeTableViewセルは更新されません

分類Dev

FlutterListViewが更新されない

分類Dev

isVisibleがtrueに設定されている場合、リストビューは更新されません

分類Dev

状態が更新されてもスタイルは更新されません

分類Dev

フォームが投稿されてもLaravelルートリソースは更新されません

分類Dev

Pythonでリストが更新されても、Forループは範囲を更新しません

分類Dev

OpenGLが有効になっている場合にのみ、ペンが更新されてもPyQt5Chartシリーズは再描画されません

分類Dev

vuexストアが更新されてもNuxtjsページは更新されません

分類Dev

.Net CoreAPIからのHTTPGETリクエストから返されるリストに基づいてAngularUIが更新されません

分類Dev

ngOptionsが変更されてもngModelは更新されません

分類Dev

DBが変更されてもUIは更新されません

分類Dev

GPSがインストールされているにもかかわらず、エミュレータのCordovaアプリケーションが「GooglePlayサービスを更新しないとHelloMapは実行されません」とスローします

分類Dev

ObservableObjectがSwiftUIに継承されている場合、ビューの更新はトリガーされません

分類Dev

ObservableObjectがSwiftUIに継承されている場合、ビューの更新はトリガーされません

分類Dev

appAutoUpdatePolicyがALWAYSに設定されていてもアプリは更新されません

分類Dev

NSTextStorageに基づくUITextViewは、テキストが追加されたときに更新されません

分類Dev

ViewModelのデータが変更されても、テキストボックスは更新されません

分類Dev

Angular2:* ngForは配列が更新されても更新されません

分類Dev

AngularJS:ng-optionsが更新されてもng-modelは更新されません

分類Dev

リソースが変更されても静的バインディングは更新されません

分類Dev

メインスレッドでリロードが呼び出されてもUITableは更新されません

分類Dev

shouldComponentUpdateがfalseに設定されている子コンポーネントは、小道具が変更されても更新されません

分類Dev

Ubuntu20.04でPHP7.4を更新しても、最新リリースには更新されません

分類Dev

プロパティが更新されても$ scope。$ watchはトリガーされません

分類Dev

更新後のMySqlトリガーは、すべてが正しい場合でも更新されません

分類Dev

Vue v-forリストは、データが変更された後も更新されません

Related 関連記事

  1. 1

    FlutterListViewは更新されません

  2. 2

    リストアイテムが変更されても、FlutterListViewが更新されない

  3. 3

    リストアイテムが変更されても、FlutterListViewが更新されない

  4. 4

    基になるデータが変更されても、TreeTableViewセルは更新されません

  5. 5

    FlutterListViewが更新されない

  6. 6

    isVisibleがtrueに設定されている場合、リストビューは更新されません

  7. 7

    状態が更新されてもスタイルは更新されません

  8. 8

    フォームが投稿されてもLaravelルートリソースは更新されません

  9. 9

    Pythonでリストが更新されても、Forループは範囲を更新しません

  10. 10

    OpenGLが有効になっている場合にのみ、ペンが更新されてもPyQt5Chartシリーズは再描画されません

  11. 11

    vuexストアが更新されてもNuxtjsページは更新されません

  12. 12

    .Net CoreAPIからのHTTPGETリクエストから返されるリストに基づいてAngularUIが更新されません

  13. 13

    ngOptionsが変更されてもngModelは更新されません

  14. 14

    DBが変更されてもUIは更新されません

  15. 15

    GPSがインストールされているにもかかわらず、エミュレータのCordovaアプリケーションが「GooglePlayサービスを更新しないとHelloMapは実行されません」とスローします

  16. 16

    ObservableObjectがSwiftUIに継承されている場合、ビューの更新はトリガーされません

  17. 17

    ObservableObjectがSwiftUIに継承されている場合、ビューの更新はトリガーされません

  18. 18

    appAutoUpdatePolicyがALWAYSに設定されていてもアプリは更新されません

  19. 19

    NSTextStorageに基づくUITextViewは、テキストが追加されたときに更新されません

  20. 20

    ViewModelのデータが変更されても、テキストボックスは更新されません

  21. 21

    Angular2:* ngForは配列が更新されても更新されません

  22. 22

    AngularJS:ng-optionsが更新されてもng-modelは更新されません

  23. 23

    リソースが変更されても静的バインディングは更新されません

  24. 24

    メインスレッドでリロードが呼び出されてもUITableは更新されません

  25. 25

    shouldComponentUpdateがfalseに設定されている子コンポーネントは、小道具が変更されても更新されません

  26. 26

    Ubuntu20.04でPHP7.4を更新しても、最新リリースには更新されません

  27. 27

    プロパティが更新されても$ scope。$ watchはトリガーされません

  28. 28

    更新後のMySqlトリガーは、すべてが正しい場合でも更新されません

  29. 29

    Vue v-forリストは、データが変更された後も更新されません

ホットタグ

アーカイブ