“ RenderFlex在右侧溢出了97个像素。”在Flutter AlertDialog中

时间:2018-08-29 08:38:01

标签: flutter flutter-layout

我对AlertDialog的操作有此问题

AlertDialog(
        title: ...,
        content: ...,
        actions: <Widget>[
          FlatButton(onPressed: ...,
              child: Text(btn_download)),
          FlatButton(onPressed: ...,
              child: Text('btn_select')),
          FlatButton(onPressed: ...,
              child: Text(btn_qr)),
          FlatButton(onPressed: ...,
              child: Text(btn_cancel)),
        ],
      );

当我显示此对话框时,我得到以下信息: enter image description here

我尝试使用Wrap或其他滚动和多子代Widet,但没有任何帮助。 发现了相同的问题here,但没有答案 有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

我无权使用AndroidStudio验证我的假设,但我会尝试这样的事情:

AlertDialog(
    title: ...,
    content: ...,
    actions: <Widget>[
       new Container (
          child: new Column (
              children: <Widget>[
                  FlatButton(onPressed: ...,
                  child: Text(btn_download)),
                  FlatButton(onPressed: ...,
                  child: Text('btn_select'))
          ),
       new Container (
          child: new Column (
              children: <Widget>[
                  FlatButton(onPressed: ...,
                  child: Text(btn_gr)),
                  FlatButton(onPressed: ...,
                  child: Text('btn_cancel'))
          ),
      ),
    ],
  );

编辑:此代码可行,但是您必须使用受宽度限制的Container,即使屏幕宽度似乎达到了75%因为它在纵向和横向模式下均可工作,因此是一个最佳选择。

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

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
    return new MaterialApp(
    title: 'Flutter Demo',
    theme: new ThemeData(
        primarySwatch: Colors.blue,
    ),
    home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
}
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;

@override
_MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;

Future<Null> _neverSatisfied() async {
    double c_width = MediaQuery.of(context).size.width*0.75;
    return showDialog<Null>(
    context: context,
    barrierDismissible: false, // user must tap button!
    builder: (BuildContext context) {
        return new AlertDialog(
        title: new Text('Rewind and remember'),
        content: new SingleChildScrollView(
            child: new ListBody(
            children: <Widget>[
                new Text('You will never be satisfied.'),
                new Text('You\’re like me. I’m never satisfied.'),
            ],
            ),
        ),
        actions: <Widget>[
            new Container(
            width: c_width,
            child: new Wrap(
                spacing: 4.0,
                runSpacing: 4.0,
                children: <Widget>[
                    new FlatButton(
                    child: new Text('The Lamb'),
                    onPressed: () {
                        Navigator.of(context).pop();
                    },
                    ),
                    new FlatButton(
                    child: new Text('Lies Down'),
                    onPressed: () {
                        Navigator.of(context).pop();
                    },
                    ),
                    new FlatButton(
                    child: new Text('On'),
                    onPressed: () {
                        Navigator.of(context).pop();
                    },
                    ),
                    new FlatButton(
                    child: new Text('Broadway'),
                    onPressed: () {
                        Navigator.of(context).pop();
                    },
                    ),

                ],
            )
            )
        ],
        );
    },
    );
}

void _doNeverSatisfied() {
    _neverSatisfied()
    .then( (Null) {
    print("Satisfied, at last. ");
    });
}



@override
Widget build(BuildContext context) {
    return new Scaffold(
    appBar: new AppBar(
        title: new Text(widget.title),
    ),
    body: new Center(
        child: new Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
            new Text(
            'You have pushed the button this many times:',
            ),
            new Text(
            '$_counter',
            style: Theme.of(context).textTheme.display1,
            ),
        ],
        ),
    ),
    floatingActionButton: new FloatingActionButton(
        onPressed: _doNeverSatisfied,
        tooltip: 'Call dialog',
        child: new Icon(Icons.add),
    ), // This trailing comma makes auto-formatting nicer for build methods.
    );
}
}

答案 1 :(得分:1)

flutter packages get Running "flutter packages get" in coinsbillboard... Could not find a file named "packages/google_maps_flutter/pubspec.yaml" in git://github.com/flutter/plugins a9275d2154b16f2bb4ee6474f579d00f2d04c8d6. pub get failed (1) 并不是用于那么多按钮。

将按钮放在QUEUE "-DIS DATABASE(*) SPACENAM(*) RESTRICT(CHKP,COPY)" QUEUE "END" ADDRESS TSO "DSN SYSTEM(DB2D)" 小部件或ButtonBar中。