asyn c загрузка изображения во флаттере - PullRequest
1 голос
/ 19 апреля 2020

Как асинхронно загружать картинки и графику, чтобы освободить основной поток программы, чтобы все происходило быстрее и плавнее?

Вот мой виджет для загрузки графиков c:

  Container _graphicSection() {
    final String graphic = 'assets/graphic/two_people.svg';
    return Container(
        child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      mainAxisSize: MainAxisSize.max,
      mainAxisAlignment: MainAxisAlignment.start,
      children: <Widget>[
        SvgPicture.asset(
          graphic,
          height: 150,
          alignment: Alignment.center,
        )
      ],
    ));
  }

и мой пользовательский интерфейс:

  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light
        .copyWith(statusBarColor: Colors.transparent));

    return Scaffold(
      body: Builder(builder: (BuildContext context) {
        return SingleChildScrollView(
            child: Form(
                key: _formKey,
                child: Column(children: <Widget>[
                  Row(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Padding(
                        padding: EdgeInsets.only(top: 20.0),
                        child: _headerSection(),
                      )
                    ],
                  ),
                  Padding(
                      padding: EdgeInsets.all(40.0),
                      child: Column(
                        children: <Widget>[
                          _graphicSection(),
                          SizedBox(height: 120.0), 
                          _buildEmail(),
                          SizedBox(height: 30.0),
                          _buildPassword(),
                          SizedBox(height: 40.0),
                          _helpText(),
                        ],
                      ))
                ])));
      }),
    );
  }

спасибо за любые решения:)

1 Ответ

1 голос
/ 19 апреля 2020

Dart - это однопоточный фреймворк, все его вычисления выполняются в его основном потоке. Это означает, что Дарт выполняет одну операцию за один раз за другим.

Асинхронные операции
В Dart мы используем такие ключевые слова, как async / await, чтобы сообщить dart, что мы собираемся выполнить асинхронную операцию. Однако это не перемещает эту работу в новый поток, она останавливает работу в главном потоке до тех пор, пока работа async не будет выполнена, затем возобновляется с остальными или вычислениями.

Изолировать и вычислить функцию
При всем этом можно создать новый изолят, представляющий собой другой поток, который работает параллельно с основным изолятом. Учитывая, что вы не на одной системе с сердечником, конечно. Однако изоляты не разделяют память, которую они передают, передавая сообщения.

Вот несколько статей, чтобы лучше объяснить эту топи c.

Дартовое асинхронное программирование: изоляты и циклы событий

Резьба флаттера

Флаттер асинхронный c: руководство для начинающих для тяжелых работ

...