【问题标题】:Flutter error:Failed assertion: line 1785 pos 12: 'hasSize'颤振错误:断言失败:第 1785 行 pos 12:'hasSize'
【发布时间】:2021-03-04 23:01:21
【问题描述】:

我有一个在颤动中录制音频的代码。该代码应该可以完美运行而不会出现错误,每当我尝试从警报对话框中调用它时都会出现错误

在 performLayout() 期间抛出了以下断言: RenderShrinkWrappingViewport 不支持返回内在 尺寸。

计算内在维度需要实例化每个 视口的孩子,它击败了视口的观点 懒惰。

如果您只是想在主轴上收缩视口 方向,你应该能够通过给予 视口松散约束,无需测量其 内在维度。

我正在尝试将录制音频的选项传递给警报对话框。用户从弹出窗口而不是主屏幕录制音频。我做错了什么?

到目前为止我有什么

 Widget setupAlertDialoadContainer() {
    return ListView(
      shrinkWrap: true, //just set this property
      padding: const EdgeInsets.all(8.0),
      //children: listItems.toList(),
      children: <Widget>[
        Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              margin: EdgeInsets.only(top: 24.0, bottom: 16.0),
              child: Text(
                this._recorderTxt,
                style: TextStyle(
                  fontSize: 48.0,
                  color: Colors.black,
                ),
              ),
            ),
            _isRecording
                ? LinearProgressIndicator(
                    value: 100.0 / 160.0 * (this._dbLevel ?? 1) / 100,
                    valueColor: AlwaysStoppedAnimation<Color>(Colors.green),
                    backgroundColor: Colors.red,
                  )
                : Container()
          ],
        ),
        Row(
          children: <Widget>[
            Container(
              width: 56.0,
              height: 56.0,
              margin: EdgeInsets.all(10.0),
              child: FloatingActionButton(
                heroTag: "Record",
                onPressed: () {
                  if (!this._isRecording) {
                    return this.startRecorder();
                  }
                  this.stopRecorder();
                },
                child: this._isRecording ? Icon(Icons.stop) : Icon(Icons.mic),
              ),
            ),
          ],
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
        ),
        Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              margin: EdgeInsets.only(top: 60.0, bottom: 16.0),
              child: Text(
                this._playerTxt,
                style: TextStyle(
                  fontSize: 48.0,
                  color: Colors.black,
                ),
              ),
            ),
          ],
        ),
        Row(
          children: <Widget>[
            Container(
              width: 56.0,
              height: 56.0,
              margin: EdgeInsets.all(8.0),
              child: FloatingActionButton(
                heroTag: "Start",
                onPressed: () {
                  startPlayer();
                },
                child: Icon(Icons.play_arrow),
              ),
            ),
            Container(
              width: 56.0,
              height: 56.0,
              margin: EdgeInsets.all(8.0),
              child: FloatingActionButton(
                heroTag: "Pause",
                onPressed: () {
                  pausePlayer();
                },
                child: Icon(Icons.pause),
              ),
            ),
            Container(
              width: 56.0,
              height: 56.0,
              margin: EdgeInsets.all(8.0),
              child: FloatingActionButton(
                heroTag: "Stop",
                onPressed: () {
                  stopPlayer();
                },
                child: Icon(Icons.stop),
              ),
            ),
          ],
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
        ),
        Container(
            height: 56.0,
            child: Slider(
                value: slider_current_position,
                min: 0.0,
                max: max_duration,
                onChanged: (double value) async {
                  await flutterSound.seekToPlayer(value.toInt());
                },
                divisions: max_duration.toInt()))
      ],
    );
  }

如何将数据传递到警报对话框

showDialog(
                        context: context,
                        builder: (BuildContext context) {
                          return AlertDialog(
                            title: Text('Record the data collection'),
                            content: setupAlertDialoadContainer(),
                          );
                        });

【问题讨论】:

  • 你试过用Expanded包裹你的ListView吗?
  • 是的,当我尝试得到错误 The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type BoxParentData.
  • 尝试用RowColumn 包裹Expanded
  • 错误If you are merely trying to shrink-wrap the viewport in the main axis direction, you should be able to achieve that effect by just giving the viewport loose constraints, without needing to measure its intrinsic dimensions.
  • 尝试使用 Container 进行包装,并为其赋予 width 属性。

标签: flutter dart


【解决方案1】:

警告框打开时是否显示错误? 如果是,我的建议是使用

showDialog(
                        context: context,
                        builder: (BuildContext context) {
                          return AlertDialog(
                            title: Text('Record the data collection'),
                            content: Container(
                                       child:setupAlertDialoadContainer(),
                                       height:200,
                                       width:200,
                                      ),
                          );
                        });

根据需要改变容器的宽度和高度

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 2021-08-19
    • 2020-09-02
    • 2021-03-27
    • 2022-08-11
    • 1970-01-01
    • 2020-11-24
    • 2020-04-22
    • 2020-12-29
    相关资源
    最近更新 更多