Как узнать, видел ли пользователь изображение трепетания

Когда мы это делаем:

def foo(a=[]):
    ...

... мы присваиваем аргумент a списку unnamed , если вызывающий объект не передает значение a .

Чтобы упростить эту дискуссию, давайте временно присвоим неназванному списку имя. Как насчет pavlo?

def foo(a=pavlo):
   ...

В любое время, если вызывающий абонент не сообщает нам, что a, мы повторно используем pavlo.

Если pavlo изменен (модифицируется), а foo заканчивает его модификацию, эффект, который мы замечаем в следующий раз, foo вызывается без указания a.

Итак, это то, что вы видите (помните, pavlo инициализируется в []):

 >>> foo()
 [5]

Теперь pavlo - [5].

Вызов foo() снова снова изменяет pavlo:

>>> foo()
[5, 5]

Задание a при вызове foo() гарантирует, что pavlo не коснулся.

>>> ivan = [1, 2, 3, 4]
>>> foo(a=ivan)
[1, 2, 3, 4, 5]
>>> ivan
[1, 2, 3, 4, 5]

Итак, pavlo все еще [5, 5].

>>> foo()
[5, 5, 5]
4
задан CopsOnRoad 29 March 2019 в 18:51
поделиться

1 ответ

У меня не было много информации о вашем коде, поэтому я решил это. Впечатление засчитывается только тогда, когда изображение полностью видно на экране, вы можете изменить это, используя выражение _count =. И я использовал простой Container для Image.

Сначала посмотрите на этот скриншот.

enter image description here

<час>

Код

void main() => runApp(MaterialApp(home: HomePage()),);

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  ScrollController _scrollController;
  double _heightListTile = 56, _heightContainer = 200, _oldOffset = 0, _heightBox, _initialAdd;
  int _initialCount, _count, _previousCount = 0, _itemsInList = 4;

  @override
  void initState() {
    super.initState();
    _heightBox = ((_itemsInList) * _heightListTile) + _heightContainer;
    _scrollController = ScrollController();
    _scrollController.addListener(() {
      double offset = _scrollController.offset;
      if (offset >= _oldOffset) {
        _oldOffset = offset;
        _count = _initialCount + (offset + _initialAdd) ~/ _heightBox;
        if (_count != _previousCount) setState(() {});
        _previousCount = _count;
      }
    });

    Timer.run(() {
      bool isIos = Theme.of(context).platform == TargetPlatform.iOS;
      var screenHeight = MediaQuery.of(context).size.height - (isIos ? 100 : 80); // for non notches phone use 76 instead of 100 (it's the height of status and navigation bar)
      _initialCount = screenHeight ~/ _heightBox;
      _initialAdd = screenHeight % _heightBox;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(_count == null ? "Let's count" : "Images shown = ${_count}")),
      body: ListView.builder(
        itemCount: 100,
        controller: _scrollController,
        itemBuilder: (context, index) {
          if (index == 0) return Container();

          if (index != 0 && index % (_itemsInList + 1) == 0) {
            return Container(
              height: _heightContainer,
              alignment: Alignment.center,
              color: Colors.blue[(index * 20) % 1000],
              child: Text("Image #${(index + 1) ~/ 5}"),
            );
          }

          return SizedBox(height: _heightListTile, child: ListTile(title: Text("Item ${index}")));
        },
      ),
    );
  }
}
0
ответ дан CopsOnRoad 29 March 2019 в 18:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: