Dn-a / flutter_inner_drawer

Inner Drawer is an easy way to create an internal side section (left/right) where you can insert a list-menu or other.
https://pub.dartlang.org/packages/flutter_inner_drawer
MIT License
514 stars 129 forks source link

Crash in null-safety mode #70

Open ykrank opened 3 years ago

ykrank commented 3 years ago

type 'List<Widget?>' is not a subtype of type 'List' in type cast

The relevant error-causing widget was: InnerDrawer-[LabeledGlobalKey#e0d93] When the exception was thrown, this was the stack:

0 InnerDrawerState.build (package:flutter_inner_drawer/inner_drawer.dart:634:52)

1 StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)

2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4495:15)

3 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4667:11)

4 Element.rebuild (package:flutter/src/widgets/framework.dart:4189:5)

pythoneer commented 3 years ago

having the same problem after upgrading my project to Flutter2 null-safety. Haven't build a minimal example yet because i was of the impression that it has something to do with my client code. But after erasing almost all of my code i was left with an almost bare bones version of the InnerDrawer. I am about to create a project from scratch just to make sure.

flutter doctor:

$> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.4, on Linux, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[✓] Android Studio
[✓] IntelliJ IDEA Ultimate Edition (version 2020.3)
[✓] IntelliJ IDEA Community Edition (version 2020.3)
[✓] Connected device (1 available)

! Doctor found issues in 1 category.

pubspec.yaml entry flutter_inner_drawer: ^1.0.0+1

runtime error message:

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following _CastError was thrown building InnerDrawer-[LabeledGlobalKey<InnerDrawerState>#146ed](dirty, dependencies: [MediaQuery, _EffectiveTickerMode], state: InnerDrawerState#d921d(ticker inactive)):
type 'List<Widget?>' is not a subtype of type 'List<Widget>' in type cast

The relevant error-causing widget was: 
  InnerDrawer-[LabeledGlobalKey<InnerDrawerState>#146ed] file:///home/naikon/Documents/arbeit/dev/git-repos/academic-lapp-mobile/lib/screen/main2.dart:164:16
When the exception was thrown, this was the stack: 
#0      InnerDrawerState._scaffold (package:flutter_inner_drawer/inner_drawer.dart:437:21)
#1      InnerDrawerState.build (package:flutter_inner_drawer/inner_drawer.dart:614:55)
#2      StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)
#3      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4495:15)
#4      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4667:11)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by scheduler library ═════════════════════════════════════════════════════
Null check operator used on a null value
════════════════════════════════════════════════════════════════════════════════════════════════════

EDIT1: I have build a minimal example and it is working. But i can't spot an obvious difference to the code i use in my regular application. The only obvious thing is that in my regular application the InnerDrawer is deeper nested into the widget tree but i don't think this is really relevant but i am trying to recreate this anyway because i don't see any other relevant difference.

pythoneer commented 3 years ago

Sorry i don't know what exactly i did wrong in my first attempt to create a minimal example. Today i tried it a second time and i could fully recreate the problem and have a reproducible crash example.

pubspec.yaml

name: inner_drawer_flutter2_test
description: A new Flutter application.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
  sdk: '>=2.12.0 <3.0.0'

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  flutter_inner_drawer: ^1.0.0+1

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_inner_drawer/inner_drawer.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return InnerDrawer(
        rightChild: Center(
            child: Text(
          "drawer",
          style: TextStyle(color: Colors.white),
        )),
        scaffold: Scaffold(
          body: Center(child: Text("body")),
        ));
  }
}

This is crashing immediately after the application starts with the error shown in my comment above. This is happening on my Pixel 4 with Android 11 but i don't think it matters.

inner_drawer_crash

pythoneer commented 3 years ago

As i see it, there is a PR pending that is fixing this error. I was closing my PR in favor to the one that was already there and has an equivalent fix to mine (i just didn't look out for an existing PR because i thought i would be already merged by now)

the PR in question: https://github.com/Dn-a/flutter_inner_drawer/pull/69

rafaelsetragni commented 3 years ago

I did a fix for this error. The pull request is in Fix for cast widget list for dart null safety

pythoneer commented 3 years ago

Hi @rafaelsetragni there are already multiple PRs for fixing this. I closed mine in favor for the PR that was already there #69 and i don't think the problem is a shortage of PRs to fix the problem. The main problem is merging and releasing the Fix that is already there.

AliHoseinpoor commented 3 years ago

i have the same problem

mqhamdam commented 3 years ago

coming with same issue

AliHoseinpoor commented 3 years ago

can you fix this issue ?

mqhamdam commented 3 years ago

I just downloaded all package source code and changed it as mentioned in the pull request.

see there: https://github.com/Dn-a/flutter_inner_drawer/pull/73

meg4cyberc4t commented 2 years ago

I caught the same exception, but I see that you stopped discussing it in 2021. As a result, is there a solution?