如何让 TextButton 占据其父 AlertDialog 的宽度?

问题描述

我已经尝试了几个小时来解决这个问题但没有成功,所以我认为通过询问 Stackoverflow 来节省一些头发是值得的。

问题: 我无法让 TextButton 占据其父 AlertDialog 小部件的整个宽度。 当我试图将 TextButton 包裹在一个宽度为 double.infinity 的 SizedBox 中时,当我按下按钮时它会崩溃(这应该是一种让按钮根据网络获得全宽的方法)。>

预期效果 让 TextButton 占据父 AlertDialog 的宽度。

这是解决该问题的最小可行代码(请注意,我使用的是 google fonts 包,我希望我已经摆脱了它们,但这里已经很晚了。):

import 'package:Flutter/material.dart';


 //  import 'package:google_fonts/google_fonts.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
return MaterialApp(
  theme: ThemeData(
    inputdecorationTheme: InputdecorationTheme(
      focusedBorder: UnderlineInputBorder(
        borderSide: BorderSide(
          color: Color(0xffB2413A),),home: LoginScreen(),);
  }
}
    
class LoginScreen extends StatelessWidget {
  const LoginScreen({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    var size = MediaQuery.of(context).size;

    return Scaffold(
      body: Container(
        height: size.height,child: Center(child: LoginWidget()),decoration: Boxdecoration(
          color: Colors.black54,image: decorationImage(
            image: Assetimage('assets/background_image.jpeg'),fit: BoxFit.cover,colorFilter: ColorFilter.mode(
                Colors.black.withOpacity(0.08),BlendMode.dstATop),);
  }
}

class LoginWidget extends StatelessWidget {
     
  @override
  Widget build(BuildContext context) {
    final _size = MediaQuery.of(context).size;
    final double _height = (_size.height) * 0.40;
    final double _width = _height * 0.8;

    return Column(
      crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.center,children: [
        Container(
          child: Center(
            child: Text(
              'Login',style: TextStyle(
                  color: Colors.white,fontSize: 26,fontWeight: FontWeight.bold),height: _size.height * 0.085,width: _width,decoration: Boxdecoration(
            color: Color(0xffB2413A),borderRadius: BorderRadius.only(
                topLeft: Radius.circular(15),topRight: Radius.circular(15)),Container(
          height: _size.height * 0.38,decoration: Boxdecoration(
            color: Colors.white,borderRadius: BorderRadius.only(
                bottomLeft: Radius.circular(15),bottomright: Radius.circular(15)),child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,children: [
              Padding(
                padding: const EdgeInsets.all(12.0),child: TextFielDalertDialog(),],);
  }
}

class TextFielDalertDialog extends StatelessWidget {
  _displayDialog(BuildContext context) async {
    return showDialog(
      context: context,builder: (context) {
        return AlertDialog(
          titlePadding: EdgeInsets.all(0),actionsPadding: EdgeInsets.all(0),buttonPadding: EdgeInsets.all(0),//Todo: THIS TEXTBUTTON WON'T TAKE THE SIZE OF ITS PARENT //.
          actions: <Widget>[
            SizedBox(
              width: double.infinity,child: TextButton(
                onpressed: () {},child: Text("Reset Password"),// style: TextButton.styleFrom(
                //  textStyle: GoogleFonts.rubik(fontSize: 25),//   primary: Colors.white,//   backgroundColor: Color(0xffB2413A),//  ),);
      },);
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: TextButton(
        child: Text(
          'FORGET PASSWORD',// style: GoogleFonts.rubik(
         //     color: Colors.black,fontSize: 18,fontWeight: FontWeight.w500),onpressed: () => _displayDialog(context),);
  }
}

解决此问题的任何帮助将不胜感激。

添加了崩溃报告的截图:

enter image description here

问题:

  1. 如何让按钮占据父 AlertDialog 的整个宽度?

解决方法

我更改并修改了代码,请尝试一下。 (已修改)

SizedBox(
          width: MediaQuery.of(context).size.width,//full width
          child: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 8.0),//space from both sides
            child: TextButton(
              onPressed: () {},child: Text("Reset Password"),// style: TextButton.styleFrom(
              //  textStyle: GoogleFonts.rubik(fontSize: 25),//   primary: Colors.white,//   backgroundColor: Color(0xffB2413A),//  ),),

[1]: https://i.stack.imgur.com/AsOWY.png [![演示图像][1]][1]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...