如何加载资产文件夹上的所有图像一次?

问题描述 投票:0回答:1

错误信息

方法'add'在null上调用。 I / flutter(10160):Receiver:null I / flutter(10160):尝试调用:add('SvgPicture'的实例)I / flutter(10160):

我需要将所有SVG图像添加到网格视图中。我使用了flutter_svg插件。我添加到pubspec.yaml。

class _MyHomePageState extends State<MyHomePage> {

  Future<SvgPicture> _getImages(){
    var image;
    for(int i = 1; i < 425; i++){
      var x = SvgPicture.asset(
        'assets/images/Defect/icon-$i.svg',
      );
      image.add(x);
    }
    return image;
  }

以上方法添加所有图像

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body: Container(

添加了futurebuilder来加载所有图像

        child: FutureBuilder<SvgPicture>(
            future: _getImages(),
          builder: (BuildContext context, AsyncSnapshot snapshot){
            List values = snapshot.data;
            int count = 1;

添加了listview以加载所有图像

            return ListView.builder(
              padding: EdgeInsets.only(top: 8.0, right: 0.0, left: 0.0),
              itemCount: count,
              itemBuilder: (BuildContext context, int index) {
                return GridView.count(
                  physics: ScrollPhysics(),
                  shrinkWrap: true,
                  crossAxisCount: 4,
                  //  childAspectRatio: 1.0,
                  children: List.generate(values.length, (index) {
                    return GridTile(
                      child: GestureDetector(
                      //  onTap: () => sub(values[index].childId),
                        child: Column(
                          children: [
                            Card(
                              //color: Colors.blue.shade100,
                              child: Container(
                                decoration: BoxDecoration(
                                    border: Border.all(
                                        color: Colors.blueAccent, width: 1.5)),

添加了svgPicture小部件以查看所有图像

                                child: Stack(
                                  children: <Widget>[
                                    SvgPicture.asset(
                                      '${values[index]}',
                                      height: 50.0,
                                    ),
                                  ],
                                ),
                              ),
                            ),

添加了Text小部件,用于查看所有图像文件名

                            Expanded(
                              child: Text(
                                values[index],
                                textAlign: TextAlign.center,
                                style: TextStyle(fontSize: 10.0),
dart flutter flutter-layout
1个回答
0
投票

您应该进行以下更改:

  • 将返回类型更改为SvgPicture列表。
  • 初始化images变量。
  • async关键字添加到您的方法中。 Future<List<SvgPicture>> _getImages() async{ List<SvgPicture> images = List(); for(int i = 1; i < 425; i++){ var x = SvgPicture.asset( 'assets/images/Defect/icon-$i.svg', ); images.add(x); } return images; }
© www.soinside.com 2019 - 2024. All rights reserved.