收到API结果后添加新的小部件

时间:2019-01-03 18:14:06

标签: dart flutter

在选择DropdownButton菜单中的一个选项之后,在尝试从REST API接收数据之后,我试图构建一个全新的小部件树。

不幸的是,我不断收到以下错误:

  

以下断言被抛出   MediaQuery(MediaQueryData(size:Size(411.4,683.4),devicePixelRatio:2.6,textScaleFactor:1.0,padding:EdgeInsets.zero,   viewInsets:EdgeInsets.zero,alwaysUse24HourFormat:   false,accessibleNavigation:falsedisableAnimations:   falseinvertColors:falseboldText:false)):   'package:flutter / src / widgets / sliver.dart':失败   断言:第551行pos 12:“ child!= null”:不是   是的。

我的代码所做的基本上是检查数据是否存在,直到选择了下拉菜单选项,该数据才存在。最初,当没有数据时,ListView中的Scaffold在下拉菜单下方仅保留一个空容器,但是当选择该项目时,应检索数据并重建整个小部件树,从而得到一个ListView.separated(而不是空容器)中的ListView

经过初步调试后,问题似乎出在setState()onChanged的{​​{1}}方法中,但我似乎无法弄清楚问题是什么。还要注意,下拉菜单中的项目是从API填充的,但这与问题无关。

任何帮助将不胜感激!

相关代码如下:

DropdownButton

1 个答案:

答案 0 :(得分:0)

首先,我将从对您的代码注意到的内容开始:
您使用ListView有点不正确。虽然ListView确实可以包含任意数量和类型的元素并以线性方式排列它们,但应该仅包含相同类型的小部件,例如Contacts或Todos。
由于列表视图仍然是列表,就像许多编程语言一样,根据设计,列表视图中将仅采用一种类型,例如字符串或整数。
我建议尝试结合使用ColumnFlexible小部件的Expanded小部件。

关于您的问题,我认为它在于<div class="form-group"> <label for="QRY_Owner"> Owner ID</label> <input id="QRY_Owner" type="text" style="width:300px"> </div> $("#QRY_Owner").select2({ multiple: false, placeholder: "Owner ID", tags: [], tokenSeparators: [",", " ", ";"], maximumInputLength: 12, selectOnBlur: true, dropdownCssClass: "hiddenSelect2DropDown" }); $("#QRY_Owner").val("test"); 函数中。当data <- data.frame(A = runif(10, 0, 10), B = runif(10, 0, 10), color = runif(10, 0, 10), density = runif(10, 0, 10), red = rep(1:5, each=2)) ggplot(data, aes(A, B, color = color, alpha = 1/density)) + geom_point(shape = 16, size = 5, show.legend = T) + theme_minimal() + theme(axis.text=element_text(size=12, family = 'serif'), axis.title=element_text(size=16,face="bold", family = 'serif'), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) + scale_color_gradient(low = "white", high = "black", name = "Scale", breaks = c(8,2), labels = c("max","min"))+ geom_point(data = data[data$red == 1,],color="red",size=5, alpha = 0.7, show.legend = T) + scale_alpha(range = c(.5, .7), breaks = data$A[1], labels = c("1")) + scale_x_continuous(trans='log10', name = "A") + scale_y_continuous(trans='log10', name = "B") 不为null时,您不会返回createSimpleWidget函数的返回值,因此将一无所有返回,因此将子代断言为null。为了避免将来发生这些情况(并且在函数中仅保留一个return语句),我建议您这样做:

selectedTag

希望这会有所帮助!