【问题标题】:Flutter: Listview is not updating upon search颤振:列表视图在搜索时未更新
【发布时间】:2020-12-28 18:47:31
【问题描述】:

一切正常,但 ListView 没有在 onChanged 上更新。虽然我使用的是setstate,但它仍然没有过滤数据。注意(列表在我打印时被过滤。唯一的问题是屏幕没有更新)

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:travel_together_passenger/Models/user.dart';
import 'package:travel_together_passenger/Screens/User_Available_Carpools_TILE.dart';

class User_AvailableCarpools_LIST extends StatefulWidget {

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

class _User_AvailableCarpools_LISTState
    extends State<User_AvailableCarpools_LIST> {
  @override
  Widget build(BuildContext context) {
    final checkcarpools = Provider.of<List<CarpoolDataShow>>(context) ?? [];
    final availablecarpools =
        checkcarpools.where((element) => element.seats > 0).toList() ?? [];
    List filteredcarpools =
        checkcarpools.where((element) => element.seats > 0 ).toList() ?? [];
    return Scaffold(
      body: Column(
        children: [
          Expanded(
              child: TextField(
            decoration: InputDecoration(hintText: 'Search..'),
            onChanged: (text) {
              setState(() {
                filteredcarpools = availablecarpools
                    .where((element) => element.pickupaddress
                        .toLowerCase()
                        .contains(text.toLowerCase()))
                    .toList();
              });
            },
          )),
          Expanded(
            flex: 10,
            child: ListView.builder(
              itemCount: filteredcarpools.length,
              itemBuilder: (context, index) {
                return User_AvailableCarpools_TILE(filteredcarpools[index]);
              },
            ),
          ),
        ],
      ),
    );
  }
}

【问题讨论】:

  • Provider.of>(context) .method() ?方法调用丢失
  • 你的意思是在onChanged回调中调用setState()后没有调用build方法吗?
  • 是的 pskink,在 setState() 之后没有被调用
  • 我假设您添加了两个prints:一个在setState 内,第二个在build 方法内,您只看到第一个?如果是这样,我认为你在颤振中发现了一个严重的错误
  • 不,问题是通过使用 SetState 我的屏幕没有更新过滤列表。简单来说,listviewbuilder 不会用 SetState 刷新到更新的列表

标签: flutter listview dart search


【解决方案1】:

下面的代码现在可以工作了。非常感谢 pskink 给了我提示。


import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:travel_together_passenger/Models/user.dart';
import 'package:travel_together_passenger/Screens/User_Available_Carpools_TILE.dart';

class User_AvailableCarpools_LIST extends StatefulWidget {

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

class _User_AvailableCarpools_LISTState extends State<User_AvailableCarpools_LIST> {
  String txt = '';
  @override
  Widget build(BuildContext context) {

    final checkcarpools = Provider.of<List<CarpoolDataShow>>(context) ?? [];
    final availablecarpools =
        checkcarpools.where((element) => element.seats > 0).toList() ?? [];
    List filteredcarpools =
    availablecarpools.where((element) => element.pickupaddress.toLowerCase().contains(txt.toLowerCase())).toList() ?? [];
    return Scaffold(
      body: Column(
        children: [
          Expanded(
            child: TextField(
              decoration: InputDecoration(
                  hintText: 'search..'
              ),
              onChanged: (text)
              {
                setState(() {
                  txt=text;
                });
                print(filteredcarpools);
              },

            ),
          ),
          Expanded(
            flex: 10,
            child: ListView.builder(
              //shrinkWrap: true,
              key: UniqueKey(),
              itemCount: filteredcarpools.length,
              itemBuilder: (context, index) {
 //               print(filteredcarpools);
                return User_AvailableCarpools_TILE(filteredcarpools[index]);
              },
            ),
          ),
        ],
      ),
    );
  }
}

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 2021-10-18
    • 2020-06-03
    • 2019-04-25
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多