即使使用ScrollPhysics也无法滚动ListView

时间:2020-09-21 03:09:35

标签: flutter dart

我有一个屏幕,我需要在Appbar中搜索一个词,并且下面的区域显示带有显示列表中的选项的卡片,下面的区域将显示可滚动列表中的所有返回结果。

Here

问题在于,尽管返回的项目放置在ListView.builder中并且ScrollPhysics处于打开状态,但是列表不可滚动。如果我单击卡并尝试拖动,它会滚动一点。但是不能通过单击列表或列表中的项目来拖动。

import '...';

class DiagnosisAdd extends StatefulWidget {
  @override
  _DiagnosisAddState createState() => _DiagnosisAddState();
}

class _DiagnosisAddState extends State<DiagnosisAdd> {
  TextField searchBar;
  TextEditingController searchTextController;
  Network connection;
  List<ICDCode> DiagnosisList;
  List<ICDCode> selectedDiagnoses;

  @override
  void initState() {
    connection = Network();
    DiagnosisList = [];
    selectedDiagnoses = [];
    // searchBar = A widget
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: searchBar,
      ),
      body: ListView(
        physics: AlwaysScrollableScrollPhysics(),
        shrinkWrap: true,
        children: [
          Card(
            child: ListTile(
              title: Text("Selected Diagnoses"),
              subtitle: Wrap(
                children: List.generate(
                  selectedDiagnoses.length,
                  (index) => Text(selectedDiagnoses[index].disease),
                  growable: true,
                ),
              ),
            ),
          ),
          ListView.builder(
            physics: AlwaysScrollableScrollPhysics(),
            shrinkWrap: true,
            itemCount: DiagnosisList.length,
            itemBuilder: (BuildContext context, int position) {
              ICDCode codeDiagnosis = DiagnosisList[position];
              return RaisedButton(
                  child:
                      Text('${codeDiagnosis.code}, ${codeDiagnosis.disease}'),
                  onPressed: () {});
            },
          )
        ],
      ),
    );
  }

  Future searchDiagnosis(String text) async {
    if (text.length < 3) {
      return false;
    }
    var response = await connection.searchICDbyDisease(
      searchString: text,
    );
    final jsonResponse = await json.decode(response);
    List<ICDCode> diagnosis_list =
        await jsonResponse.map<ICDCode>((i) => ICDCode.fromJson(i)).toList();
    setState(() {
      DiagnosisList = diagnosis_list;
    });
  }
}

2 个答案:

答案 0 :(得分:2)

您无法滚动<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> ... <key>NSBluetoothPeripheralUsageDescription</key> <string>Allow NSBluetoothPeripheralUsageDescription </string> </dict> </plist> ,因为ListView中还有另一个ListView.builder()可以滚动。您必须使您的ListView无法滚动:

ListView.builder()

您不能有两个可以同时滚动的嵌套小部件。您将不得不禁止嵌套窗口小部件滚动,以使其滚动的ListView.builder( physics: NeverScrollableScrollPhysics(), ) 而不是ListView

答案 1 :(得分:0)

ListView.builder(

        physics: NeverScrollableScrollPhysics(),
        shrinkWrap: true,
        itemCount: DiagnosisList.length,
        itemBuilder: (BuildContext context, int position) {
          ICDCode codeDiagnosis = DiagnosisList[position];
          return RaisedButton(
              child:
                  Text('${codeDiagnosis.code}, ${codeDiagnosis.disease}'),
              onPressed: () {});
        },
      )
    ],
  ),
);