- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
希望你一切都好。我有一个小问题,我想根据另一个 DropdownButton 的值动态更改 DropdownButton 的值。
好吧,我会解释我的位置和问题所在:
首先,我有一个包含 3 个元素的 StudyCycle 列表;
final _studyCycles = const <StudyCycle>[
StudyCycle(cycle: Cycles.elementary, classrooms: <ClassroomsLevels>[
ClassroomsLevels.cp,
ClassroomsLevels.ce1,
ClassroomsLevels.ce2,
ClassroomsLevels.cm1,
ClassroomsLevels.cm2,
]),
StudyCycle(cycle: Cycles.primary, classrooms: <ClassroomsLevels>[
ClassroomsLevels.sixth,
ClassroomsLevels.fifth,
ClassroomsLevels.fourth,
ClassroomsLevels.third,
]),
StudyCycle(cycle: Cycles.secondary, classrooms: <ClassroomsLevels>[
ClassroomsLevels.second,
ClassroomsLevels.first,
ClassroomsLevels.terminal,
])
];
这个 StudyCycle 列表用于构建第一个 DropdownButton
DropdownButton<StudyCycle>(
value: _selectedStudyCycle,
items: List<DropdownMenuItem<StudyCycle>>.generate(
_studyCycles.length,
(index) => DropdownMenuItem<StudyCycle>(
value: _studyCycles[index],
child: Text(_studyCycles[index].cycle.toString()),
),
),
hint: const Text('Your Study Cycle'),
onChanged: (StudyCycle? studyCycle) {
if (studyCycle != _selectedStudyCycle) {
if (_selectedStudyCycle != null) setState(() => _selectedStudyCycle = null);
if (studyCycle != null) setState(() => _selectedStudyCycle = studyCycle);
}
},
)
并且通过从 StudyCycles Dropdown 中选择一个 StudyCycle,它允许构建另一个包含 ClassroomsLevels 的 DropdownButton 的值 <当前在 StudyCycles 下拉列表 中选择的 strong>StudyCycle(到目前为止一切顺利)
DropdownButton<ClassroomsLevels>(
hint: const Text('Select your classroom'),
value: _selectedClassroom,
items: _selectedStudyCycle == null
? []
: List<DropdownMenuItem<ClassroomsLevels>>.generate(
_selectedStudyCycle!.classrooms.length,
(index) => DropdownMenuItem<ClassroomsLevels>(
value: _selectedStudyCycle!.classrooms[index],
child: Text(_selectedStudyCycle!.classrooms[index].toString()),
),
),
onChanged: (ClassroomsLevels? classroom) => setState(() => _selectedClassroom = classroom),
)
The problem occurs when a ClassroomLevel is selected and I change StudyCycle, I get this error:
There should be exactly one item with [DropdownButton]'s value: ClassroomsLevels.fourth.
Either zero or 2 or more [DropdownMenuItem]s were detected with the same value
'package:flutter/src/material/dropdown.dart':
Failed assertion: line 915 pos 15: 'items == null || items.isEmpty || value == null ||
items.where((DropdownMenuItem<T> item) {
return item.value == value;
}).length == 1'
我尽力解决了这个问题,但我不能(而且我真的不明白为什么),所以我依赖你。你能帮我了解错误是什么以及如何解决吗?
完整代码
import 'package:flutter/material.dart';
class MyHomePage2 extends StatefulWidget {
const MyHomePage2({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage2> createState() => _MyHomePage2State();
}
class _MyHomePage2State extends State<MyHomePage2> {
final _studyCycles = const <StudyCycle>[
StudyCycle(cycle: Cycles.elementary, classrooms: <ClassroomsLevels>[
ClassroomsLevels.cp,
ClassroomsLevels.ce1,
ClassroomsLevels.ce2,
ClassroomsLevels.cm1,
ClassroomsLevels.cm2,
]),
StudyCycle(cycle: Cycles.primary, classrooms: <ClassroomsLevels>[
ClassroomsLevels.sixth,
ClassroomsLevels.fifth,
ClassroomsLevels.fourth,
ClassroomsLevels.third,
]),
StudyCycle(cycle: Cycles.secondary, classrooms: <ClassroomsLevels>[
ClassroomsLevels.second,
ClassroomsLevels.first,
ClassroomsLevels.terminal,
])
];
StudyCycle? _selectedStudyCycle;
ClassroomsLevels? _selectedClassroom;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: SizedBox(
width: MediaQuery.of(context).size.width,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
DropdownButton<StudyCycle>(
value: _selectedStudyCycle,
items: List<DropdownMenuItem<StudyCycle>>.generate(
_studyCycles.length,
(index) => DropdownMenuItem<StudyCycle>(
value: _studyCycles[index],
child: Text(_studyCycles[index].cycle.toString()),
),
),
hint: const Text('Your Study Cycle'),
onChanged: (StudyCycle? studyCycle) {
if (studyCycle != _selectedStudyCycle) {
if (_selectedStudyCycle != null) setState(() => _selectedStudyCycle = null);
if (studyCycle != null) setState(() => _selectedStudyCycle = studyCycle);
}
},
),
//
DropdownButton<ClassroomsLevels>(
hint: const Text('Select your classroom'),
value: _selectedClassroom,
items: _selectedStudyCycle == null
? []
: List<DropdownMenuItem<ClassroomsLevels>>.generate(
_selectedStudyCycle!.classrooms.length,
(index) => DropdownMenuItem<ClassroomsLevels>(
value: _selectedStudyCycle!.classrooms[index],
child: Text(_selectedStudyCycle!.classrooms[index].toString()),
),
),
onChanged: (ClassroomsLevels? classroom) => setState(() => _selectedClassroom = classroom),
),
],
),
),
);
}
}
class StudyCycle {
final Cycles cycle;
final List<ClassroomsLevels> classrooms;
final String? description;
final int? iconCodePoint;
const StudyCycle({
required this.cycle,
required this.classrooms,
this.description,
this.iconCodePoint,
});
}
enum Cycles { elementary, primary, secondary, secondaryTechnique }
enum ClassroomsLevels {
cp,
ce1,
ce2,
cm1,
cm2,
sixth,
fifth,
fourth,
third,
second,
first,
terminal,
mechanical,
electronic,
electricity,
inEngineering,
secretariat,
accounting,
economy,
agr1,
agr2,
agr3,
}
谢谢!
最佳答案
错误的原因是,在您更改第二个下拉列表中的 _selectedClassroom
值后,新教室列表 _selectedStudyCycle!.classrooms
中不存在该值第一个下拉菜单。只需在 setState
方法中重置第二个下拉列表的值:
if (studyCycle != null) {
setState(() {
// Add this line
_selectedClassroom = null;
_selectedStudyCycle = studyCycle;
});
}
关于flutter - 根据另一个 DropdownButton [FLUTTER] 的值动态更改 DropdownButton 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70053961/
我正在尝试从flutter应用程序构建apk,但出现此错误: Note: /mnt/Software/Linux/Flutter/flutter/.pub-cache/hosted/pub.dartl
我有一个名为 X 的较大应用程序,还有另一个名为 Y 的较小应用程序。他们现在彼此分开,并且工作正常。我想将应用程序 Y 集成到 X 中。我想将 Y 的代码放入 X 项目中,但它们应该有不同的 Mai
在android Studio中选择Create New Flutter Project,出现如下4个选项。 Flutter 应用程序 Flutter 插件 Flutter 包 flutter 模块
我看到我的 flutter 项目生成了一个文件 ios/Flutter/Flutter.podspec ,这个文件有什么用? 如果它与生成的 Flutter.framework 有关? 我应该将它包含
我尝试过的 在包含flutter SDK的位置添加/编辑.bash_profile.rtf文件。 导出PATH = / Users / temur / Documents / Projects / F
Flutter 日志会打印数千个详细/垃圾邮件日志。 我正在尝试调试一个复杂的应用程序,但是打印太冗长了,以至于我很难找到我自己打印的东西。 有没有办法禁用详细? 就像是: Logger.level.
在flutter 1.22更新之后,我在Lineargradient colors属性中遇到错误,这给我一个错误,即未定义名称colors参数。.在Android中更新flutter和flutter插
在下面的代码 widget.hintText 中给出错误,我试图将日期选择器作为单独的组件,并在从其他文件调用它时动态传递提示文本值。 import 'package:date_field/date_
在下面的代码 widget.hintText 中给出错误,我试图将日期选择器作为单独的组件,并在从其他文件调用它时动态传递提示文本值。 import 'package:date_field/date_
Flutter 1.0 发布后,我正在按照步骤搭建 Flutter 开发环境。 在步骤中(如所附屏幕截图所示),它说要更新 $PATH 两次,一次使用 flutter 工具的路径 export PAT
我有一个用 flutter 编写的移动应用程序,我想将其转换为 flutter_web 应用程序(集成 flutter_web 尚不可用)。我目前遇到包裹问题。 我已按照本网站中列出的说明进行操作 h
如何向我的 Flutter 路由添加自定义转换?这是我目前的路线结构。 class MyApp extends StatelessWidget { // This widget is the
我正在尝试通过 URL 在 webview 中显示网页。我试过 flutter_webview_plugin 插件,但是当我在浏览器上运行项目时它不起作用。 在 flutter web applica
我正在使用 animatedContainer 在按下按钮时显示 listView.builder()。这是一个要显示的简单子(monad)列表,但问题是我不知道 ListView 构建器的高度会传递
我目前正在我的应用程序中制作渐变背景动画......我正在使用 lottie 动画的帮助下这样做!我试图将它封装在一个容器中并成功地做到了。但是有一个问题,尽管我将高度更改为大于 2000 的东西,但
美好的一天! 我无法弄清楚如何使用 google 标签管理器设置 flutter。我找到了 this package包括标签管理器 api。但是我不知道如何正确配置它。 (在网络上我只需要复制粘贴一个
我的购物车模型如下 class Cart { String description; double unitCost; double amount; int quantity; S
在 Flutter 应用程序中,我想为在线托管的资源(图像、视频等)实现缓存。 我希望它能在原生平台 (Android/iOS)(例如使用文件系统)和网络(例如使用 IndexedDB)上运行。 Fl
我写了一个页面,在顶部一切都很好,应该是这样。在底部我有一个事件的历史。我的容器的宽度是自动确定的(取决于屏幕的宽度),而高度 - 不,在不同的设备上有不同的高度(底部的缩进是不同的)。是否可以自动确
我正在处理一个页面,其中有一些字段,例如 textfield 和 slider。在页面的末尾必须有一个用于进行下一步的按钮,该按钮被包裹在 Align 中以在页面之间具有固定位置。 另一方面,resi
我是一名优秀的程序员,十分优秀!