如何在Flutter中动态分配图像?例如:
final topContent = Stack(
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 10.0),
height: MediaQuery.of(context).size.height * 0.5,
decoration: new BoxDecoration(
image: new DecorationImage(
image: new AssetImage(lesson.imagePath),
fit: BoxFit.cover,
),
)),
Container(
height: MediaQuery.of(context).size.height * 0.5,
padding: EdgeInsets.all(40.0),
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(color: Color.fromRGBO(58, 66, 86, .9)),
child: SingleChildScrollView(
controller: _scrollController,
child: Center(
child: topContentText,
),
),
),
Positioned(
left: 8.0,
top: 60.0,
child: InkWell(
onTap: () {
Navigator.pop(context);
},
child: Icon(Icons.arrow_back, color: Colors.white),
),
)
],
);
现在开始的图像lesson.imagePath
是我想要动态更改的。我尝试使用setState()
,但它给了我一个错误:
这里的表达式是void类型,不能使用
image: setState ((){
if (someCondition) {
return new AssetImage(lesson.imagePath);
}
}),
2条答案
按热度按时间taor4pac1#
您的setState调用错误!最简单的方法是将图像作为小部件的状态,并在
setState
调用中更新此图像。setState
方法不返回任何东西,它只是重建你的小部件。在_WidgetState类中,您声明为成员:
您可以在
initState
方法中提供初始映像。您的容器小部件应声明为:
要使用setState调用更新映像,您只需要:
但是请记住,必须调用
updateImage
方法。ippsafx72#
上面的解决方案也可以工作,你可以设置一个名称数组,你可以在资产文件夹中设置相同的图像名称,你可以动态选择你想要使用的图像。假设在您的情况下,您有一个课程列表。
在资源中,文件夹为图像给予相同的名称。(不要忘记更新
pubspec.yaml
文件)然后在
AssetImage
中,您可以动态选择路径。记住给图像给予相同的名字,就像这里的
a,b and c
。同样的扩展名也是这样的
.jpg