AlertDialog小部件在Flutter中不起作用setState函数

问题描述 投票:0回答:1

我开始使用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,


        ),
      ],
    );

  }
}

我的页面视图:enter image description here

看起来不像我想要的。当我选择“ Antalya”时,我想看到AlertDialog。错误在哪里?我应该在哪里放布尔函数?我试图将此bool函数从setState函数中移出,但不是我想要的。

android-studio flutter visual-studio-code widget setstate
1个回答
0
投票

如果要显示警报对话框,则应使用'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: () => {},
            )
          ],
        );
      },
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.