flutter: не вставляет данные из функции в список - PullRequest
0 голосов
/ 16 июня 2020

Я хочу создать список, эти люди location = "Barishal". Вот почему я создал функцию и пытаюсь перенести данные sh (которые я получил из функции getSpecifi c ()) в новый список (myList). Но это создало проблему ....

вот мой код -

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();


}

Как исправить эту проблему?

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

Я исправил ваш код, как показано ниже

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 голосов
/ 17 июня 2020

Вы можете скопировать и вставить полный код ниже
Вы можете предоставить строку поиска и использовать UnmodifiableListView<MyModel> и фильтровать с помощью _myData.where

фрагмент кода

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();
  }
}

рабочая демонстрация

enter image description here

полный код

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 голосов
/ 16 июня 2020

Когда вам нужно отфильтровать список, вы можете использовать метод where .

Вот простой пример.

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

В любом случае ваш код кажется будет возвращать только первый элемент, а не список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...