如何一次将所有图像加载到素材资源文件夹?

时间:2019-04-22 04:23:06

标签: dart flutter flutter-layout

错误消息

  

方法'add'在null上被调用。 I /颤振(10160):接收器:空   I / flutter(10160):尝试调用:add(“ SvgPicture”的实例)   I /颤振(10160):

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

2019-04-22 00:21:31.862001.txt

以上方方法添加了所有图像

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;
  }

添加了futurebuilder以加载所有图像

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body: Container(

添加了列表视图以加载所有图像

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

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

            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)),

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

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

1 个答案:

答案 0 :(得分: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;
    }