更新复选框并从颤动对话框中返回值

2024-02-22

我正在尝试将一些城市列表添加到带有复选框的对话框中,以便我需要实现多次单击项目。我正在尝试做的事情如下所示。

onPressed从按钮调用 Rest Service 并在成功结果时我只显示一个对话框

void showCityDialog(BuildContext context) {
    SimpleDialog dialog = new SimpleDialog(
      title: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          new Text(
            "CITIES",
            style: TextStyle(fontSize: 18.0, color: Colors.black),
            textAlign: TextAlign.center,
          ),
          new RaisedButton(
            onPressed: () {print("clicked");},
            color: Color(0xFFfab82b),
            child: new Text(
              "Done",
              style: TextStyle(color: Colors.white),
            ),)],),
      children: <Widget>[
        Column(
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            new Container(
              constraints: BoxConstraints(maxHeight: 500.0),
              child: ListView.builder(
                scrollDirection: Axis.vertical,
                itemCount: cityData.length,
                itemBuilder: (context, position) {
                  return new CheckboxListTile(
                    value: checkboxValueCity,
                    onChanged: (bool value) {
                      setState(() {
                        checkboxValueCity = value;
                      });
                    },
                    activeColor: Color(0xFFfab82b),
                    dense: true,
                    title: Text(
                      cityData[position].city_name,
                      style: TextStyle(fontSize: 16.0, color: Colors.black),
                    ),);},),),],)],);
    showDialog(
        context: context,
        builder: (BuildContext context) {
          return dialog;
        });
  }

checkboxValueCity是类中的布尔变量,单击 chekboxListItem 我需要将复选框值更新为已选中和未选中。同时需要将该项目添加/删除到也在该类内部的列表中。

但在我的代码中,复选框并未在每次单击时引用,但当我关闭该框并再次打开它时,复选框会被选中。那么我如何从图块中获得多次单击以及如何从对话框返回列表?


你的对话框需要是StatefulWidget (Flutter Github 问题 https://github.com/flutter/flutter/issues/15194)。跟踪选择状态的成员变量需要位于对话框类中。您可以使用回调来更新父类中的成员变量List选定的城市。使用似乎也存在一些问题ListView.builder里面的一个SimpleDialog or AlertDialog(在 Flutter Github 上搜索问题)所以我使用了一个简单的Dialog.

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Checkbox Dialog Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Checkbox Dialog Demo'),
    );
  }
}

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

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

class _MyHomePageState extends State<MyHomePage> {
  bool checkboxValueCity = false;
  List<String> allCities = ['Alpha', 'Beta', 'Gamma'];
  List<String> selectedCities = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: () {
            showDialog(
                context: context,
                builder: (context) {
                  return _MyDialog(
                      cities: allCities,
                      selectedCities: selectedCities,
                      onSelectedCitiesListChanged: (cities) {
                        selectedCities = cities;
                        print(selectedCities);
                      });
                });
          }),
    );
  }
}

class _MyDialog extends StatefulWidget {
  _MyDialog({
    this.cities,
    this.selectedCities,
    this.onSelectedCitiesListChanged,
  });

  final List<String> cities;
  final List<String> selectedCities;
  final ValueChanged<List<String>> onSelectedCitiesListChanged;

  @override
  _MyDialogState createState() => _MyDialogState();
}

class _MyDialogState extends State<_MyDialog> {
  List<String> _tempSelectedCities = [];

  @override
  void initState() {
    _tempSelectedCities = widget.selectedCities;
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Dialog(
      child: Column(
        children: <Widget>[
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Text(
                'CITIES',
                style: TextStyle(fontSize: 18.0, color: Colors.black),
                textAlign: TextAlign.center,
              ),
              RaisedButton(
                onPressed: () {
                  Navigator.pop(context);
                },
                color: Color(0xFFfab82b),
                child: Text(
                  'Done',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            ],
          ),
          Expanded(
            child: ListView.builder(
                itemCount: widget.cities.length,
                itemBuilder: (BuildContext context, int index) {
                  final cityName = widget.cities[index];
                  return Container(
                    child: CheckboxListTile(
                        title: Text(cityName),
                        value: _tempSelectedCities.contains(cityName),
                        onChanged: (bool value) {
                          if (value) {
                            if (!_tempSelectedCities.contains(cityName)) {
                              setState(() {
                                _tempSelectedCities.add(cityName);
                              });
                            }
                          } else {
                            if (_tempSelectedCities.contains(cityName)) {
                              setState(() {
                                _tempSelectedCities.removeWhere(
                                    (String city) => city == cityName);
                              });
                            }
                          }
                          widget
                              .onSelectedCitiesListChanged(_tempSelectedCities);
                        }),
                  );
                }),
          ),
        ],
      ),
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新复选框并从颤动对话框中返回值 的相关文章

  • 如何防止 Visual Studio Code Flutter/Dart 编辑器格式化新行/换行代码?

    我最近开始研究 Flutter Dart 我喜欢保存时自动格式化 Flutter 但有一件事可能相关也可能不相关 那就是长代码的代码包装 即使代码仍然适合我的 4k 编辑器窗口 有没有办法防止换行但保持逗号自动格式 Thanks 请按照以下
  • 如何修复 [错误:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:NoSuchMethodError:在 null 上调用方法 '<='。错误?

    我收到此错误 但由于昨天相同的代码有效 所以我不知道如何修复它 这是一个测试应用程序 使用谷歌地图和 firebase firestore 来保存和查询地图上的标记 我想这可能和我安装的flutter有关系 所以我尝试使用稳定版和测试版 但
  • 如何从react-bootstrap复选框获取值/属性?

    我正在尝试使用反应引导复选框 https react bootstrap github io components html forms controls https react bootstrap github io components
  • 如何修复 webview_flutter 中的白屏?

    运行 webview flutter 示例应用程序 https github com flutter plugins tree master packages webview flutter example https github com
  • Flutter如何在BottomNavigationBar中添加边距或填充

    我正在尝试制作底部导航栏 但在屏幕上左右填充 现在 我用容器包裹 BottomNavigationBar 并在其中添加填充 问题是 BottomNavigationBar 默认背景仍然包裹所有图层 所以我们可以删除那里的背景颜色吗 Goal
  • 自定义卡片形状 Flutter SDK

    我在 Flutter 上使用 GridView 开发了一个应用程序 GridView 项目是卡片 默认卡片形状是半径为 4 的矩形 我知道 Card Widget 有 shape 属性 并且它需要 ShapeBorder 类 但我无法找到如
  • 选中复选框时如何向文本区域添加值

    我正在使用我刚刚在 SO 上找到的以下函数 该函数可以解决我的问题 只有一个问题是 我有一长串选择列表 当用户选中超过 3 4 个复选框时 某些文本或添加到文本区域的值不再可见 有没有什么方法可以让每次选中一个框时添加到文本区域的文本始终可
  • flutter 中 sqlite 中的多个参数

    我想知道如何将多个参数传递给 sqllite 中的原始查询 我的代码如下 query async get a reference to the database Database db await DatabaseHelper instan
  • 用颤动画布在形状上切一个洞

    如何使用颤动画布在形状上 切一个洞 我有一组相当复杂的形状 看起来像现实世界的物体 该物体上有一个圆角矩形形状的孔 我真的很想从形状中减去 RRect 但我找不到任何有关如何执行此操作的信息 canvas clipRRect myRRect
  • 配置根项目“firebase_auth”时出现问题

    my error 我无法构建 apk 发布文件 我完成了应用程序一段时间 没有出现错误 几天后 我在构建应用程序时收到此错误 请告诉我如何摆脱它 我尝试了 4 个小时 什么也没得到 FAILURE Build failed with an
  • 如何展平列表?

    我怎样才能轻松地压平List在达特 例如 var a 1 2 3 a b c true false true var b 1 2 3 a b c true false true 我该如何转向a into b 即变成一个List包含所有这些值
  • 如何使用 MVVM 打开和关闭新 Windows?

    对于 MVVM 和 WPF 什么是处理打开和关闭新窗口和对话框的好 直接方法 打开和关闭应该由 ViewModel 驱动 对吗 但 ViewModel 不应该知道视图 我通常为此使用接口 例如 如果我想在单独的窗口中编辑记录 我有一个接口
  • 通过列表视图检查动态生成的复选框时遇到问题

    我知道其他成员已经提出了这个问题 一些成员也给出了解决方案 但问题是我没有找到任何适合我的应用程序的解决方案 我正在创建一个应用程序 其中我有一个屏幕 它将显示动态列表视图 其中包含列表项 复选框和三个文本视图 一个用于候选人姓名 另外两个
  • Flutter 网络图像作为 Google 地图标记

    我想在屏幕上的谷歌地图上添加网络图像作为标记 API确实支持一个功能Bitmapdescriptor fromBytes 但是 我不知道如何将它与网络图像一起使用 BitmapDescriptor fromBytes byteData 首先
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Flutter 中的 AndroidManifest 中缺少默认通知通道元数据

    我在用firebase messaging 5 0 1软件包来实现推送通知 在 IOS 中一切正常 而在 Android 中 当我的移动应用程序在后台运行时 我收到通知 但它没有导航到相应的屏幕 它只是打开默认屏幕 如何实现到该特定屏幕的导
  • 如何更改 LongListMultiSelector 中的 CheckBox 和 CheckBox 勾号的颜色? WP8

    是否可以更改 LongListMultiSelector 中的复选框和复选框勾选的颜色 我已经尝试过乔治 尼古拉德斯的解决方案 但我无法达到我所需要的 还有其他方法可以做到这一点吗 请问有人可以更详细地解释一下吗 如果它是可能的 提前致谢
  • 在 Flutter 中渲染小部件之前,如何等待异步函数完成执行

    On my main dart文件中 我想检查用户是否已登录 以便将他定向到适当的屏幕 我正在使用 SharedPrefence 来存储 Firebase 中的用户详细信息 如何告诉我的函数等到 SharedPreference 异步函数完
  • 如何实现类似预编译指令的功能

    我正在开发一个 Angular 应用程序 建议对生产中运行的许多东西使用生成的代码 即模板缓存 表达式缓存和静态 DI 注入器 目前没有在不同构建配置之间切换的好方法 因此我使用推荐的模式here https github com angu
  • Dart 中的字符串文字类型(如 TypeScript)?

    感谢 Flutter 我开始使用 Dart 而且我非常喜欢这门语言 我之前使用过 TypeScript 它提供了一些我以前从未见过的非常酷的功能 我特别喜欢的是字符串文字类型 https www typescriptlang org doc

随机推荐

  • 自动调整标签字体大小

    For a System Windows Forms Label有没有办法根据标签大小自动调整标签字体大小 class AutoFontLabel Label public AutoFontLabel base this AutoEllip
  • 具有多种模式的 Lua string.gsub

    我正在努力重命名包含不需要的字母的电影标题 这string gsub可以用 nil 值替换字符串 但我有大约 200 个字符串模式需要用 替换 现在我必须string gsub对于每个模式 我在想是否有一种方法可以将所有字符串模式放入单个字
  • Linux 中串行端口描述符块上的“关闭”函数

    最近我发现了一个对我来说很新的问题 我很感激建议 我正在 Linux 上使用 termios 函数进行串行通信 我实际上没有使用真正的串口 而是使用虚拟小工具串口驱动程序 dev ttyGS0 文件描述符以非阻塞方式打开 我的程序定期生成数
  • 为什么在 C# 中使用 PKCS7 和 X509Certificate 打开数字签名的 pdf 文档时出现错误?

    我正在尝试使用签名 pdf 文件PKCS7 and X509Certificate但是当我在 Adob e 中打开签名的 pdf 文件时出现以下错误 文件自签署以来已被更改或损坏 文档哈希 66305799d97adc716694faa3a
  • 我们应该忽略Pycharm .idea/文件夹中的misc.xml和.iml吗?

    我的谷歌搜索给了我这个线程 https stackoverflow com a 11968647 248616这将引导我们访问 Pycharm 官方网站here https intellij support jetbrains com hc
  • 如何在 Twisted 中将 TCP Keepalive 与端点一起使用?

    扭曲确实支持TCP 保活 https twistedmatrix com documents 13 0 0 api twisted internet tcp Connection html setTcpKeepAlive 但我找不到一种简单
  • 读/写 NetworkX 图形对象

    我正在尝试处理具有数亿个节点的超大规模 NetworkX Graph 对象 我希望能够将其写入文件 以免消耗我所有的计算机内存 然而 我需要不断地搜索现有节点 更新边缘等 对此有好的解决办法吗 我不确定它如何与提供的任何文件格式一起使用ht
  • 带有剪辑路径的 SVG 直线路径在 Chrome 中不可见

    我相信我在 Chrome 的 SVG 渲染中发现了一个错误 但我想知道是否有任何解决方法 使用这样的代码
  • ASP.NET Core RC2 作为 Linux 守护进程

    我需要有关作为 Linux 守护进程托管 NET Core 控制台或 ASP NET 应用程序的信息 Microsoft Hosting WindowsService 已经支持将应用程序托管为 Windows 服务 但我需要类似的 Linu
  • 如何在 ui-router 状态转换之间调出“正在进行”的加载栏?

    我有一个使用 ui router 的 AngularJS 应用程序 有时 应用程序在从一种状态转移到另一种状态时以及解析仍在进行中时会等待 有没有人有 或他们见过 任何示例 说明如何在从一种状态解析到另一种状态期间在屏幕上呈现 正在进行的
  • Grepping 一个大文件(80GB)有什么方法可以加快速度吗?

    grep i A 5 B 5 db pd Clients eightygigsfile sql 它已经在一个相当强大的 Linux 服务器上运行了一个小时 否则不会过载 grep 有什么替代品吗 关于我的语法有什么可以改进的地方 egrep
  • sveltejs 中的响应式全宽画布

    我对 svelte 很陌生 我正在尝试使用 svelte 在全屏上渲染画布 听起来很容易做到 但我无法让它正常工作 我正在绑定一个width and height变量为clientWidth clientHeight父级并使用这些变量来设置
  • VB.NET 中 IsNumeric() 的错误结果

    我在 VB NET 中有一个函数 它循环遍历值并尝试将其转换为小数 如果IsNumeric是真的 Dim Value As String If IsNumeric Value True Then Rate CType Value Decim
  • 在 excepthook 中打印原始异常

    我正在设置系统异常钩子这样我就可以记录发生的每个异常 让我们使用以下示例 而不是写入日志 def excepthook self type value traceback print n print type print value pri
  • 无法在opencv中加载haarcascadeshaarcascade.xml

    我尝试在 android 中使用 opencv 进行人脸检测 但无法加载对象检测 xml 文件 代码如下 static CvHaarClassifierCascade cascade 0 CvMemStorage storage 0 LOG
  • Excel 删除 Python 插入的有效公式

    我正在尝试使用 Python 生成 Excel xlsx 报告openpyxl 但有一个问题 Excel 不断从我的工作表中删除公式在一些特定的细胞中 我打印了正在插入的内容 它似乎绝对有效 如果我将其从控制台粘贴到单元格 它会显示确切的结
  • 我该如何:Git 单向推送/不可编辑的工作目录?

    有没有办法拥有两台机器 假设A和B A 是我的本地计算机 我在其中开发代码并推送它 B 是一个服务器 永远不需要编辑代码 但需要一个工作目录 是否有可能做到这一点without做任何事git pull是来自 B 的什么吗 基本上 我只想以一
  • 为什么 tokio::spawn 即使使用 .clone() 也会抱怨生命周期?

    我试图编译以下看似简单的代码 但出现错误 use std io Error derive Debug struct NetworkConfig bind String node key file String async fn networ
  • 检测视图控制器何时进入后台并恢复

    我正在实现一个具有以下要求的 ViewController 如果用户在 15 分钟后返回应用程序 则视图应重新加载数据 我正在考虑使用viewDidDisappear当应用程序进入后台时保存时间戳viewDidAppear用于检查以前保存的
  • 更新复选框并从颤动对话框中返回值

    我正在尝试将一些城市列表添加到带有复选框的对话框中 以便我需要实现多次单击项目 我正在尝试做的事情如下所示 onPressed从按钮调用 Rest Service 并在成功结果时我只显示一个对话框 void showCityDialog B