Как загрузить все изображения в папку активов один раз? - PullRequest
0 голосов
/ 22 апреля 2019

Сообщение об ошибке

Метод 'add' был вызван в null. I / флаттер (10160): приемник: ноль I / flutter (10160): пробный вызов: добавить (экземпляр 'SvgPicture') I / флаттер (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;

добавлен просмотр списка для загрузки всех изображений

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

добавлен текстовый виджет для просмотра всех изображений с именем файла

                            Expanded(
                              child: Text(
                                values[index],
                                textAlign: TextAlign.center,
                                style: TextStyle(fontSize: 10.0),

1 Ответ

0 голосов
/ 22 апреля 2019

Вы должны сделать следующие изменения:

  • изменить тип возвращаемого значения на Список 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;
    }
    
...