5

I encountered a rather strange bug when my app is launching in release mode:

I had followed this answer to preserve my pages for my BottomNavigationBar using PageView and AutomaticKeepAliveClientMixin. In debug mode, this bug does not happen.

home.dart

import 'package:flutter/material.dart';
import 'package:lottery_rewards/controller.dart';

class HomeView extends StatefulWidget {
  const HomeView({Key? key}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _HomeView();
}

class _HomeView extends State<HomeView>
    with AutomaticKeepAliveClientMixin<HomeView> {
  @override
  Widget build(BuildContext context) {
    super.build(context);
    return Column(
      children: [
        const MainAppBar(),
        Expanded(
          child: Center(
            child: TextButton(
              child: const Text('Home'),
              onPressed: () {
              },
            ),
          ),
        )
      ],
    );
  }

  @override
  bool get wantKeepAlive => true;
}

Also in the terminal, it says that "Null check operator used on a null value", however I do not know where I used this code.

I/flutter (29449): Null check operator used on a null value
I/flutter (29449): #0      _PagePosition.applyViewportDimension (package:flutter/src/widgets/page_view.dart:455)
I/flutter (29449): #1      RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1456)
I/flutter (29449): #2      RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #3      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #4      RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #5      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #6      RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #7      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #8      RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #9      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #10     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #11     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #12     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #13     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #14     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #15     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #16     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #17     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #18     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545)
I/flutter (29449): #19     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #21     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #22     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:318)
I/flutter (29449): #23     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #24     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171)
I/flutter (29449): #25     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1003)
I/flutter (29449): #26     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240)
I/flutter (29449): #27     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403)
I/flutter (29449): #28     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #29     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #30     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #31     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #32     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376)
I/flutter (29449): #33     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #35     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #36     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #37     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #38     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #39     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #40     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #41     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #42     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #43     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #45     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #46     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #47     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #48     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #49     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #50     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #51     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #52     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #53     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #54     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #55     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #56     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #57     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #58     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #59     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #60     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #61     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #62     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #63     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #64     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #65     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #66     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #67     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #68     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #69     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #70     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #71     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3462)
I/flutter (29449): #72     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #73     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #74     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #75     _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:749)
I/flutter (29449): #76     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #77     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #78     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #79     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #80     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #81     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #82     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #83     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #84     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #85     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #86     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #87     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #88     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #89     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116)
I/flutter (29449): #90     RenderObject.layout (package:flutter/src/rendering/object.dart:1915)
I/flutter (29449): #91     RenderView.performLayout (package:flutter/src/rendering/view.dart:165)
I/flutter (29449): #92     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1757)
I/flutter (29449): #93     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887)
I/flutter (29449): #94     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:504)
I/flutter (29449): #95     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:892)
I/flutter (29449): #96     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:370)
I/flutter (29449): #97     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146)
I/flutter (29449): #98     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083)
I/flutter (29449): #99     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:997)

Please help! What is causing this issue?

Kaushik Chandru
  • 15,510
  • 2
  • 12
  • 30
iamhx
  • 472
  • 6
  • 24

3 Answers3

4

I was getting the same Issue and i found that is a flutter bug :)

In the meanwhile, there is a small hack to avoid this issue : add a small delay before calling runApp

void main() async {
  await Future.delayed(const Duration(milliseconds: 200));
  runApp(const MyApp());
}
1

I was getting the same message while using PageView and launching the app in release mode. My suggestion would be to use ListView instead of PageView. It's just a workaround since I don't know what is causing the issue either. You should also use a ScrollController instead of a PageController because using a PageController is causing the same issue. Hope this helps!

LUMPAAK
  • 53
  • 4
0

As this issue says: https://github.com/flutter/flutter/issues/25827

That's because Flutter starts quicker in release mode and the native platform reports the actual resolution with a delay. Just handle the case that the size is 0/0 at first.

But in fact, page using ListView|Column still empty after Scaffold's constraints already change to non-zero. (I have tried using fixed size Container in Scaffold, not Column, that's ok. Fixed size Container can display after MaterialApp got screen size)

Shahin Naseri's answer above is useful for me

And I calculate the duration of initialization, wait at least 200ms before runApp():

void main() async {
    var initStartTime = DateTime.now();

    // Init Start
    await init();
    // Init End

    var initEndTime = DateTime.now();
    var initMs = initEndTime.difference(initStartTime).inMilliseconds;
    var minMs = 200;
    if (initMs < minMs) {
        await Future.delayed(Duration(
            milliseconds: (minMs - initMs),
        ));
    }
    runApp(renderMyApp(initRoute, enableDevicePreview));
}
RisuP
  • 1
  • 2