0
votes

flutter: n'incorpore pas les données d'une fonction à une liste

Je veux créer une liste, ces personnes location = "Barishal". C'est pourquoi, j'ai créé une fonction et j'ai essayé de pousser les données (les données que j'ai obtenues à partir de la fonction getSpecific ()) vers une nouvelle liste (myList). Mais cela a créé un problème ....

voici mon code-

class BookData extends ChangeNotifier {


  List<MyModel> data = [
    MyModel(name: "Abir", location: "Dhaka"),
    MyModel(name: "Shuvro", location: "Barishal"),
    MyModel(name: "Anik", location: "Barishal")
  ];

 List<MyModel> get getMydata{
   return data;
 }



 getSpecific (){
 for(int i=0;i<data.length;i++){
   if(data[i].location=="Barishal"){
     print(data[i]);
     return data[i];
   }
   }

 }

 List myList = getSpecific();


}

Comment puis-je résoudre ce problème?


0 commentaires

3 Réponses :


0
votes

Lorsque vous avez besoin de filtrer une liste, vous pouvez utiliser le where .

Voici un exemple simple.

List<MyModel> myNewList = data.where((item) => item.location == "Barishal").toList();

Quoi qu'il en soit, votre code semble ne renvoyer que le premier élément, pas une liste.


1 commentaires

Il y a une erreur dans des données comme celle-ci [1]: i.stack.imgur.com/uomOK.png



0
votes

J'ai corrigé votre code comme ci-dessous

List<MyModel> getSpecific (){
  List<MyModel> result = [];
  for(int i=0;i<data.length;i++){
    if(data[i].location=="Barishal"){
      print(data[i]);
      result.add(data[i]);
    }
  }
  return result;
}


0 commentaires

0
votes

Vous pouvez copier-coller le code complet de l'exécution ci-dessous
Vous pouvez fournir une chaîne de recherche et utiliser UnmodifiableListView et filtrer avec _myData.where

extrait de code

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'dart:collection';
import 'package:provider/provider.dart';

class BookData extends ChangeNotifier {
  final List<MyModel> _myData = [
    MyModel(name: "Abir", location: "Dhaka"),
    MyModel(name: "Shuvro", location: "Barishal"),
    MyModel(name: "Anik", location: "Barishal")
  ];

  String _searchString = "";

  UnmodifiableListView<MyModel> get books => _searchString.isEmpty
      ? UnmodifiableListView(_myData)
      : UnmodifiableListView(
          _myData.where((dog) => dog.location.contains(_searchString)));

  void getSpecific(String searchString) {
    _searchString = searchString;
    print(_searchString);
    notifyListeners();
  }
}

class MyModel {
  final String name;
  final String location;

  MyModel({this.name, this.location});
}

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => BookData(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _controller = TextEditingController();
  String _searchText;

  @override
  void initState() {
    _controller.addListener(
      () {
        setState(() {
          _searchText = _controller.text;
        });
      },
    );
    super.initState();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Example'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                hintText: "Search",
                prefixIcon: Icon(Icons.search),
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.all(
                    Radius.circular(4.0),
                  ),
                ),
              ),
              onChanged: (value) {
                Provider.of<BookData>(context, listen: false)
                    .getSpecific(value);
              },
            ),
            Consumer<BookData>(builder: (context, bookData, child) {
              print(bookData.books.toString());
              return Expanded(
                child: ListView.builder(
                    shrinkWrap: true,
                    itemCount: bookData.books.length,
                    itemBuilder: (context, index) => Card(
                          elevation: 3,
                          child: ListTile(
                            title: Text(bookData.books[index].name),
                          ),
                        )),
              );
            }),
          ],
        ),
      ),
    );
  }
}


0 commentaires