Виджет Expanded () не работает в просмотре списка - PullRequest
0 голосов
/ 27 ноября 2018

Я новичок, чтобы трепетать.Я пытаюсь отобразить страницу, тело которой содержит Listview с несколькими виджетами.

_buildOrderDetails виджет в виде списка - это виджет, который создается с помощью listview.builder (), остальные являются обычными виджетами.

Проблема в том, что страница не прокручивается.Когда тело Listview изменяется на столбец и _buildOrderDetails задается как дочерний элемент для Expanded, просмотр списка ограничен до некоторой степени высотой страницы и прокручивается.Но когда ввод сфокусирован, страница переполняется

Widget build(BuildContext context){
return ScopedModelDescendant<MainModel>(
 builder: (BuildContext context, Widget child, MainModel model) {
  return Scaffold(
  appBar: AppBar(
    title: Text('Order Details'),
    actions: <Widget>[
      IconButton(
        onPressed: () {
          model.addNewOrder();
        },
        icon: Icon(Icons.add),
      ),
      BadgeIconButton(
        itemCount: model.ordersCount,
        badgeColor: Color.fromRGBO(37, 134, 16, 1.0),
        badgeTextColor: Colors.white,
        icon: Icon(Icons.shopping_cart, size: 30.0,),
        onPressed: () {}
      ),
    ]
  ),
  body: ListView(
    children: [
      Column(
        children: [
          _buildItemsTitle(),
          Expanded(child: _buildOrderDetails(context, model)),
        ]
      ),
      Card(
            child: Column(
              children:[
                TextField(
                  decoration: InputDecoration(
                    labelText: 'Offer Code'
                  ),
                ),
                RaisedButton(
                  onPressed: (){},
                  child: Text('Apply'),
                )
              ]
            ),
          ),
      Card(child: _orderAmount(context, model),),
      RaisedButton(
        color: Theme.of(context).accentColor,
        onPressed: (){},
        child: Text('Checkout', 
          style: TextStyle(
            fontSize: 20.0,
            color: Colors.white
          )
        ),
      )
    ]
  ),);});}}

1 Ответ

0 голосов
/ 29 июня 2019

Старайтесь не использовать расширенные на растущих предметах.Если вы хотите покрыть процентную / дробную высоту, оберните высоту фиксированной высотой или полную высоту контейнером, содержащим коробчатые константы, затем перейдите к расширенным или фиксированным дочерним элементам высоты. также полезен FracionalBox

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

Widget build(BuildContext context) {
  return ScopedModelDescendant<MainModel>(
      builder: (BuildContext context, Widget child, MainModel model) {
    return Scaffold(
      appBar: AppBar(title: Text('Order Details'), actions: <Widget>[
        IconButton(
          onPressed: () {
            model.addNewOrder();
          },
          icon: Icon(Icons.add),
        ),
        BadgeIconButton(
            itemCount: model.ordersCount,
            badgeColor: Color.fromRGBO(37, 134, 16, 1.0),
            badgeTextColor: Colors.white,
            icon: Icon(
              Icons.shopping_cart,
              size: 30.0,
            ),
            onPressed: () {}),
      ]),
      body: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            Column(children: [
              _buildItemsTitle(),
              Container(child: _buildOrderDetails(context, model)),
            ]),
            Card(
              child: Column(children: [
                TextField(
                  decoration: InputDecoration(labelText: 'Offer Code'),
                ),
                RaisedButton(
                  onPressed: () {},
                  child: Text('Apply'),
                )
              ]),
            ),
            Card(
              child: _orderAmount(context, model),
            ),
            RaisedButton(
              color: Theme.of(context).accentColor,
              onPressed: () {},
              child: Text('Checkout',
                  style: TextStyle(fontSize: 20.0, color: Colors.white)),
            ),
          ],
        ),
      ),
    );
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...