【问题标题】:AlertDialog widget not working setState function in FlutterFlutter 中的 AlertDialog 小部件无法使用 setState 功能
【发布时间】:2020-09-26 00:16:46
【问题描述】:

我开始使用 DropdownButton 小部件并创建了城市列表。
当我在列表中选择我最喜欢的城市时,我想看到 AlertDialog,但它无法工作。 这是代码:

import 'package:flutter/material.dart';
import './func.dart';
class ChooseCity extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return ChooseCityState();
  }
}

class ChooseCityState extends State<ChooseCity> {
  var cities = ["Ankara", "İzmir", "İstanbul", "Edirne", "Antalya"];
  String choosenCity = "Edirne";

  @override
  Widget build(BuildContext context) {
    return Column(

      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[



        DropdownButton<String>(
          items: cities.map((String city) {
            return DropdownMenuItem<String>(
              child: Text(city),
              value: city,
            ); 
          }).toList(),
          value: choosenCity,
          onChanged: (String choosen) {

            setState(() {
          choosenCity = choosen;});
          choosen=="Antalya" ? 
            AlertDialog(
              title:Text("ATTENTION"),
              content: Text("You chose the best place!!"),
              actions: [
                 FlatButton(child: Text("I see,I agree"),onPressed: ()=>{},)
                   ],


                )

              : Text("go on");

          },


        ),
        SizedBox(
          height: 60,
        ),
        Text(
          "    You choosed  :" + choosenCity,
          textAlign: TextAlign.center,


        ),
      ],
    );

  }
}


查看我的页面:

它看起来不像我想要的。当我选择 "Antalya" 时,我想看到 AlertDialog。错误在哪里?我应该把布尔函数放在哪里?我试图把这个 bool 函数从 setState 函数中去掉,但它不是我想要的。

【问题讨论】:

    标签: android-studio flutter visual-studio-code widget setstate


    【解决方案1】:

    如果您想显示警报对话框,您应该使用“showDialog”,然后在其构建器中使用您的警报对话框。

    这样

    class ChooseCity extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return ChooseCityState();
      }
    }
    
    class ChooseCityState extends State<ChooseCity> {
      var cities = ["Ankara", "İzmir", "İstanbul", "Edirne", "Antalya"];
      String chosenCity = "Edirne";
    
      @override
      Widget build(BuildContext context) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            DropdownButton<String>(
              items: cities.map((String city) {
                return DropdownMenuItem<String>(
                  child: Text(city),
                  value: city,
                );
              }).toList(),
              value: chosenCity,
              onChanged: (String choosen) {
                chosenCity = choosen;
                showAlertDialog();
                setState(() {});
              },
            ),
            SizedBox(
              height: 60,
            ),
            Text(
              "    You choosed  :" + chosenCity,
              textAlign: TextAlign.center,
            ),
          ],
        );
      }
    
      showAlertDialog() {
        showDialog(
          context: context,
          builder: (context) {
            return AlertDialog(
              title: Text("ATTENTION"),
              content: Text("You chose the best place!!"),
              actions: [
                FlatButton(
                  child: Text("I see,I agree"),
                  onPressed: () => {},
                )
              ],
            );
          },
        );
      }
    }
    

    【讨论】:

    • 此处发布的所有内容必须为英文。
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2021-05-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多