[英]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.