Flutter 在颤振中动态指定图像

Flutter 在颤振中动态指定图像,flutter,dart,Flutter,Dart,如何在颤振中动态指定图像?例如: final-topContent=Stack( 儿童:[ 容器( 填充:仅限边缘设置(左:10.0), 高度:MediaQuery.of(上下文).size.height*0.5, 装饰:新盒子装饰( 图片:新装饰图片( 图像:新资产(lesson.imagePath), 适合:BoxFit.cover, ), )), 容器( 高度:MediaQuery.of(上下文).size.height*0.5, 填充:所有边缘设置(40.0), 宽度:MediaQuer

如何在颤振中动态指定图像?例如:

final-topContent=Stack(
儿童:[
容器(
填充:仅限边缘设置(左:10.0),
高度:MediaQuery.of(上下文).size.height*0.5,
装饰:新盒子装饰(
图片:新装饰图片(
图像:新资产(lesson.imagePath),
适合:BoxFit.cover,
),
)),
容器(
高度:MediaQuery.of(上下文).size.height*0.5,
填充:所有边缘设置(40.0),
宽度:MediaQuery.of(context).size.width,
装饰:盒子装饰(颜色:color.fromRGBO(58,66,86,9)),
子:SingleChildScrollView(
控制器:\ u滚动控制器,
儿童:中心(
child:topContentText,
),
),
),
定位(
左:8.0,
排名:60.0,
孩子:InkWell(
onTap:(){
Navigator.pop(上下文);
},
子:图标(Icons.arrow\u back,颜色:Colors.white),
),
)
],
);
现在,我想动态更改课程开始处的图像。imagePath。我试图使用
setState()
,但它给了我一个错误:

此处的表达式属于void类型,无法使用

图像:设置状态(){
如果(某些条件){
返回新的AssetImage(lesson.imagePath);
}
}), 

您的设置状态调用错误!最简单的方法是将图像作为小部件的状态,并在
setState
调用中更新此图像<代码>设置状态方法不会返回任何内容,它只是重建小部件

在您的_WidgetState类中,您声明为成员:

AssetImage _imageToShow;
您可以在
initState
方法中提供初始映像

@override
initState(){
   _imageToShow = AssetImage('youAssetImage');
}
您的容器小部件应声明为:

Container(
            padding: EdgeInsets.only(left: 10.0),
            height: MediaQuery.of(context).size.height * 0.5,
            decoration: new BoxDecoration(
              image: new DecorationImage(
                image: _imageToShow,
                fit: BoxFit.cover,
              ),
            )),
 ),
要使用setState call更新图像,您只需:

void updateImage() {
   setState ((){ 
      if (someCondition) {
        _imageToShow = new AssetImage(lesson.imagePath); 
      }
    });
}

但请记住,必须调用
updateImage
方法

上述解决方案也可以使用。您可以设置名称数组,也可以在资产文件夹中设置相同的图像名称,还可以动态选择要使用的图像。 假设在你的例子中,你有一个课程列表。 var lesson=['a','b','c']

在“资源”文件夹中,为图像指定相同的名称。(不要忘记更新pubspec.yaml文件)

然后在AssetImage中,您可以给出可以动态选择的路径

图像:AssetImage('assets/${lesson[index]}.jpg'))

记住给图片起相同的名字,就像这里给图片起的a、b和c一样

同样的扩展也可以像here.jpg那样给出

图像:AssetImage('assets/${lesson[index]}.jpg'))