Search
Write a publication
Pull to refresh
18
0
Станислав Термоса @termosa

Пользователь

Send message
Но я действительно хочу вызвать эту функцию
Отлично обьяснил, спасибо!
(: Да, звучит не логично.

Дело в том, что я не занимаюсь мобильной разработкой, и в ближайшее время не планирую ею заниматься. Но меня очень заинтересовал Flutter и мне захотелось разобраться с ним.

Записывать — это один из способов лучше запомнить, а объяснять — лучший способ разобраться, ведь так? )
Бенчмарки интересная штука, но данная серия посвящена основам фреймворка, а не его пиару или даже сравнению с альтернативными решениями.

В основе Flutter графический движок используемый в браузере Chrome, который себя уже давно хорошо зарекомендовал. Он легко выполняют свою работу не проваливаясь ниже 60fps.

В добавок к этому виджеты Flutter интересным образом оптимизированы. Вот, к примеру, трюк со списком из списков (1000х1000 элементов). Отрисовывается и отлично работает даже в development режиме с включенным Hot-reload. И продолжает так же хорошо работать при увеличении каждого списка в 10 раз. (MacBook Pro 2015, 16гб, версия без видюхи)

тяжелая гифка
image

код
import 'package:flutter/widgets.dart';
import 'dart:math';

main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Directionality(
      child: Container(
        child: ListScreen(),
        color: Color(0xFF386DA7),
      ),
      textDirection: TextDirection.ltr,
    );
  }
}

class ListScreen extends StatelessWidget {
  final double cellSize = 60;
  final itemsAmount = 1000;
  final rng = new Random();

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: itemsAmount,
      itemExtent: cellSize,
      itemBuilder: (BuildContext context, int index) {
        return ListView.builder(
          itemCount: itemsAmount,
          itemExtent: cellSize,
          scrollDirection: Axis.horizontal,
          itemBuilder: (BuildContext context, int index) {
            return Container(
              color: Color(0xFF000000 + rng.nextInt(0xFFFFFF)),
              child: Text(rng.nextInt(0xFFFFFF).toRadixString(16)),
            );
          },
        );
      },
    );
  }
}



Этот пример будет работать даже с картинками загруженными из интернета.
Главное не забивать гвозди раньше времени. Flutter до сих пор не выкатил первую версию.

Интересно, что именно не понравилось в управлении состоянием? Хранение состояние внутри виджета? Использование setState для обновления?

У Flutter только недавно появился InheritedModel в добавок к InheritedWidget.

А коммьюнити только начинает решать существующие проблемы и перетаскивать хорошие решения на платформу, в том числе и redux-подобные.
Код действительно выглядит как каша.
Но дело не в фреймворке, а в моем решении не разбивать приложение на модули в первой части.

Это конечно же не все. Смешивание данных и отображения тоже является плохим подходом. Дальше я постараюсь показать как разделить эти две сущности. И даже то, как вынести стилизацию — в Flutter это очень простая задача (не в сравнении с веб, но в сравнении с другими нативными или околонативными решениями).
XCode занимает где-то под 6гб, и Flutter 300мб + кеш (у меня сейчас 600мб)

Information

Rating
Does not participate
Date of birth
Registered
Activity