флаттер, как расширить контейнер с результатом поиска по текстовому полю

Я пытался сделать раскрывающийся список, похожий на пользовательскую страницу результатов поиска, но это не удалось с некоторыми ошибками, например, дети RenderFlex имеют ненулевой изгиб, но входящие ограничения высоты не ограничены. Есть ли способ решить без пакета?? когда я удаляю один дочерний вид прокрутки, все, кроме прокрутки, работает, но есть ли способ реализовать прокрутку?

Страница списка

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

class ListPage extends StatefulWidget {
  @override
  _ListPageState createState() => _ListPageState();
}

class _ListPageState extends State<ListPage> {
  List<Map<String, String>> studentList = [
    {"John Honai": "Tokio"},
    {"John Wick": "Cuba"}
  ];
  bool showList = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          children: [
            SizedBox(
              height: 20,
            ),
            Container(
              height: 50,
              child: Text("container1 height 50"),color: Colors.lightBlue,
            ),
            SizedBox(
              height: 20,
            ),
            Container(
              height: 50,
              child: Text("container2 height 50"),color: Colors.orangeAccent,
            ),
            SizedBox(
              height: 20,
            ),
            ButtonSearchExpanded(
              onChangedText: (_) {
                setState(() {
                  showList = true;
                });
              },
              showList: showList,
              studentList: studentList,
            ),
            SizedBox(
              height: 20,
            ),
            Container(
              height: 50,
              child: Text("container3 height 50"),color: Colors.white54,
            ),
            SizedBox(
              height: 20,
            ),
            Container(
              height: 50,
              child: Text("container4 height 50"),color: Colors.cyanAccent,
            ),
          ],
        ),
      ),
    );
  }
}

Текстовое поле Widgetpage при измененном ответе, переданном на страницу списка, и переданное обратно, показывает studentList как true, что показывает представление списка.

      import 'package:flutter/material.dart';

class ButtonSearchExpanded extends StatelessWidget {
  final List<Map<String, String>> studentList;
  final bool showList;
final Function onChangedText;
  ButtonSearchExpanded(
      {
      this.onChangedText,this.studentList,this.showList});
  @override
  Widget build(BuildContext context) {
    return Expanded(
        child: Container(
      child: Column(
        children: [
          Container(
            height: 60,
            child: Row(
              children: [Expanded(child:
               TextField(onChanged: onChangedText,)), Text("some other content"),

              ],
            ),
          ),showList?Expanded(child: ListView.builder(itemCount:studentList.length,itemBuilder: (context,index){
            return ListTile(title: Text(studentList[index].keys.first),trailing: Text(studentList[index].values.first),);
          })):Container()
        ],
      ),
    ));
  }


}

2 ответа

Вы пробовали, добавив эту строку, shrinkWrap: true, ?

      ListView.builder(
shrinkwrap:true, // add this line 
itemBuilder: (context,index){
            return 

до моего исследования невозможно, чтобы столбец-> расширенный-> listviewbuilder взаимно противоречил друг другу, потому что столбец сжимает его дочерний элемент, а расширенный расширяет дочерний элемент, поэтому я изменил его на гибкий со свойством flexfit.loose и свойством столбца Размер основной оси min, следовательно, это решило проблему. я получил этот ответ от Как использовать Expanded в SingleChildScrollView?

        final List<Map<String, String>> studentList;
  final bool showList;
final Function onChangedText;
  ButtonSearchExpanded(
      {
      this.onChangedText,this.studentList,this.showList});
  @override
  Widget build(BuildContext context) {
    return Column(mainAxisSize: MainAxisSize.min,
      children: [
        Container(
          height: 60,
          child: Row(
            children: [
             Expanded(child: TextField(onChanged: onChangedText,)), Text("some other content"),

            ],
          ),
        ),showList?Flexible(fit: FlexFit.loose,child: ListView.builder(shrinkWrap: true,itemCount: studentList.length,itemBuilder: (context,index){
          return ListTile(title: Text(studentList[index].keys.first),trailing: Text(studentList[index].values.first),);
        })):Container()
      ],
    );
  }


} 
Другие вопросы по тегам