簡體   English   中英

如何使該計數器計數 Flutter 中的特定列表項?

[英]How do I make this counter count for a specific list item in Flutter?

我試圖制作一個計數器來計算列表中的所有特定內容,但現在當我按下 + 或 - 它們都變為相同的數字。 我應該改變什么才能讓它工作,我對 flutter 很陌生,任何幫助都會非常有用。 更進一步,我想在數據庫中使用列表中每個項目的數字。 對此的任何提示也將不勝感激。

import 'package:discmania200/AddPlayerScreen.dart';
import 'package:discmania200/PlayerAddNotifier.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  _HomeScreenState createState() => _HomeScreenState();
}

final String title = 'home';
var _itemCount = 1;

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.add),
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  fullscreenDialog: true,
                  builder: (context) {
                    return AddPlayerScreen();
                  },
                ),
              );
            },
          )
        ],
      ),
      body: Container(
        padding: const EdgeInsets.all(2.0),
        child: Column(
          children: [
            Consumer<AddPlayerNotifier>(
              builder: (context, addPlayerNotifier, _) {
                return ListView.builder(
                    scrollDirection: Axis.vertical,
                    shrinkWrap: true,
                    itemCount: addPlayerNotifier.playerList.length,
                    itemBuilder: (context, index) {
                      return Padding(
                        padding: EdgeInsets.all(5.0),
                        child: Card(
                          child: ListTile(                           
                            title: Text(
                              addPlayerNotifier.playerList[index].playerName,
                              style: TextStyle(
                                fontSize: 20.0,
                                color: Colors.black,
                              ),
                            ),
                            trailing: Row(
                              mainAxisSize: MainAxisSize.min,
                              children: <Widget>[
                                _itemCount != 0
                                    ? IconButton(
                                        icon: const Icon(Icons.remove),
                                        onPressed: () => setState(
                                              () => _itemCount--,
                                            ))
                                    : Container(),
                                Text(_itemCount.toString()),
                                IconButton(
                                  icon: const Icon(Icons.add),
                                  onPressed: () => setState(
                                    () => _itemCount++,
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ),
                      );
                    });
              },
            ),
          ],
        ),
      ),
    );
  }
}

如果要創建特定於列表項的計數器,則不_itemCount留在_HomeScreenState中,而應在播放器 class 中存儲和更改該值(我不確定播放器 class 的名稱,但無論addPlayerNotifier.playerList成員的類型是什么)。 您的目標似乎是讓這個 itemCount 數字成為玩家的屬性,就像playerName是玩家的屬性一樣。

我不確定AddPlayerNotifier的確切類型,但我建議為您的用例使用ChangeNotifier 我建議向AddPlayerNotifier添加一個新方法,如下所示:

void updatePlayerItemCount(int index, int count) {
  playerList[index].itemCount = count;
  notifyListeners();
}

為了稍微解釋一下,第一行只是通過playerList訪問它並更新它以匹配count來更新播放器的計數。 然后它調用notifyListeners() function,它是ChangeNotifier的一部分,它提醒它的消費者(例如_HomePageState )重新構建。 這將向用戶顯示您的新計數。

_HomePageState中,為了適應這種變化,您需要做的就是將按鈕的onPressed屬性更改為如下所示(此示例用於增量按鈕):

onPressed: () {
  addPlayerNotifier.updatePlayerItemCount(
    index,
    addPlayerNotifier[index].itemCount + 1,
  );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM