Solved Flutter fields.length <= orders.length “Too many arguments provided. The number of arguments must be less than or equal to the number of orderBy() clauses.”
Cette erreur se produit généralement lorsque le nombre d’arguments dans la méthode `startAt()` ou `startAfter()` est supérieur au nombre de champs utilisés dans `orderBy()`. Pour résoudre ce problème, nous devons nous assurer que les champs utilisés pour la pagination correspondent exactement à ceux utilisés pour le tri.
Voici comment nous pouvons modifier votre méthode `getAllRapports` pour résoudre cette erreur :
```dart
Future<Stream<List<RapportMatchModel>>> getAllRapports({
String? startAfterName,
String? startAfterId,
int paginationSize = 10
}) async {
try {
print(“Attempting to call getAllRapportMatchs…”);
var collection = _firestore.collection(‘rapports_de_matchs’);
var query = collection.orderBy(“equipe_domicile”).orderBy(“__name__”);
if (startAfterName != null && startAfterId != null && startAfterName.isNotEmpty && startAfterId.isNotEmpty) {
// Utiliser startAfter au lieu de startAt
query = query.startAfter([startAfterName, startAfterId]);
}
query = query.limit(paginationSize);
return query.snapshots().map((snapshot) => snapshot.docs
.map((doc) => RapportMatchModel.fromJson(doc.data() as Map<String, dynamic>))
.toList());
} catch (e) {
print(“Error fetching rapportMatchs: ${e.toString()}”);
throw Exception(‘Error fetching rapportMatchs: ${e.toString()}’);
}
}
```
Les modifications clés sont :
1. Nous avons ajouté `.orderBy(“__name__”)` après `.orderBy(“equipe_domicile”)`. Cela permet de s’assurer que nous avons un ordre stable même si deux équipes ont le même nom.
Get Code Kad’s stories in your inbox
Join Medium for free to get updates from this writer.
2. Nous utilisons maintenant `startAfter()` au lieu de `startAt()`. Cela garantit que nous commençons après le dernier élément récupéré précédemment.
3. Nous avons déplacé la limitation `limit(paginationSize)` après la clause `startAfter()`.
4. Nous vérifions que `startAfterName` et `startAfterId` ne sont pas null et ne sont pas vides avant de les utiliser.
Ces modifications devraient résoudre l’erreur “Too many arguments provided”.
Ensuite, dans votre `RapportsBloc`, assurez-vous que `_lastRapportId` est correctement défini. Il devrait être l’ID du document Firestore, pas un champ du rapport. Modifiez la méthode `_updateLastRapport()` comme suit :
```dart
void _updateLastRapport() {
if (_rapports.isNotEmpty) {
final lastRapport = _rapports.last;
_lastRapportName = lastRapport.equipeDomicile;
_lastRapportId = lastRapport.id; // Assurez-vous que c’est l’ID du document Firestore
}
}
```
Enfin, dans votre `RapportsBloc`, lorsque vous appelez `getAllRapports()` pour charger plus de rapports, assurez-vous de passer les bons paramètres :
```dart
final rapportsStream = await repository.getAllRapports(
startAfterName: _lastRapportName,
startAfterId: _lastRapportId,
paginationSize: _pageSize,
);
```
Ces modifications devraient résoudre l’erreur et permettre à votre pagination de fonctionner correctement. Si vous rencontrez d’autres problèmes ou si vous avez besoin d’éclaircissements supplémentaires, n’hésitez pas à demander.








