Flutter Row исчезает при сборке? - PullRequest
0 голосов
/ 05 июня 2018

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

'package: flutter / src / render /box.dart ': ошибочное утверждение: строка 1446 поз. 12:' hasSize ': RenderBox не был размечен: RenderPointerListener # da9fd NEEDS-LAYOUT NEEDS-PAINT

0 _AssertionError._doThrowNew (dart: core-patch / dart: core / errors_patch.dart: 37)

1 _AssertionError._throwNew (dart: core-patch / dart: core / errors_patch.dart: 33)

2 RenderBox.size (пакет: флаттер)/src/rendering/box.dart:1446:12)

3 RenderProxyBoxWithHitTestBehavior.hitTest (пакет: flutter / src / Rendering / proxy_box.dart: 164: 9)

4 RenderBox & ContainerRainDefenderRender

(пакет: flutter / src / render / box.dart: 2190: 17)

5 RenderCustomMultiChildLayoutBox.hitTestChildren (пакет: flutter / src / render / custom_layout.dart: 365: 12)

6 RenderBox.hitTest (пакет: flutter / src / render / box.dart: 1863: 11)

7 RenderBox и RenderObjectWithChildMixin & RenderProxyBoxMixin.hitTestChildren

(пакет: flutter /

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

body: new Container(
          margin: new EdgeInsets.all(10.0),
          child: new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              new Flexible(
                  child: new FirebaseAnimatedList(
                      query: fb.child('users').limitToLast(50),
                      padding: new EdgeInsets.all(5.0),
                      reverse: true,
                      itemBuilder: (_, DataSnapshot snapshot, Animation<double> animation, int index){

                        return new ChatMessage(
                            snapshot: snapshot,
                            animation: animation
                        );

                      })
              ),
              new Divider(height: 16.0, color: Colors.blue,),
              new Padding(padding: new EdgeInsets.all(10.0)),
              new Row(
                mainAxisAlignment: MainAxisAlignment.center,
                mainAxisSize: MainAxisSize.max,
                children: <Widget>[
                  new IconButton(icon: new Icon(Icons.gif), onPressed: null),
                  new Padding(padding: new EdgeInsets.all(3.0)),
                  new TextField(
                      decoration:
                      new InputDecoration(labelText: "CHAT HERE!!"),
                      controller: _searchController,
                      onSubmitted: (str) {
                        setState(() {
                          str = _searchController.text;
                        });
                      }),
                  new IconButton(icon: new Icon(Icons.send), onPressed: null)
                ],
              )

            ],
          ))

1 Ответ

0 голосов
/ 07 июня 2018

Ответ заключался в том, чтобы обернуть TextField в гибкий.Кажется очевидным сейчас, но иногда требуется гибкий или расширенный, а иногда нет.Вот мой код ...

child: new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              new Flexible(
                child: new FirebaseAnimatedList(
                    query: fb.child('users').limitToLast(50),
                    padding: new EdgeInsets.all(5.0),
                    reverse: true,
                    itemBuilder: (_, DataSnapshot snapshot,
                        Animation<double> animation, int index) {
                      return new ChatMessage(
                          snapshot: snapshot, animation: animation);
                    }),
              ),
              new Divider(
                height: 5.0,
                color: Colors.blue,
              ),
              new Container(
                margin: const EdgeInsets.symmetric(horizontal: 2.0),
                child: new Row(
                  children: <Widget>[
                    new IconButton(
                        icon: new Icon(Icons.gif), onPressed: getGif),
                    new Flexible(
                      child: new TextField(
                        controller: _chatController,
                        autocorrect: false,
                        decoration: new InputDecoration(
                            labelText: "Let's Talk ... ",
                            labelStyle:
                                new TextStyle(fontWeight: FontWeight.bold)),
                        onChanged: (str) {
                          setState(() {
                            str = _chatController.text;
                          });
                        },
                      ),
                    ),
                    new IconButton(
                        icon: new Icon(Icons.send), onPressed: getGif),
                  ],
                ),
              )
            ],
          )
...