AppCheap / awesome_drawer_bar

MIT License
12 stars 9 forks source link

Hot reload makes the controller lose internal methods. #8

Open williandrade opened 8 months ago

williandrade commented 8 months ago

Any time we do a hot reload the .toggle(), .open(), ... Comes as null CleanShot 2024-01-13 at 04 25 05


The Code

import 'package:awesome_drawer_bar/awesome_drawer_bar.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomeView(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomeView extends StatelessWidget {
  MyHomeView({
    super.key,
    required this.title,
  });

  final String title;
  final drawerController = AwesomeDrawerBarController();

  @override
  Widget build(BuildContext context) {
    return AwesomeDrawerBar(
      controller: drawerController,
      mainScreen: MyHomePage(
        title: title,
        toggle: () => drawerController.toggle!(),
      ),
      menuScreen: const Sidebar(),
    );
  }
}

class Sidebar extends StatelessWidget {
  const Sidebar({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      backgroundColor: Colors.black,
      body: Text('Sidebar'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key, required this.title, this.toggle});

  final Function? toggle;
  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          onPressed: () => toggle!() ?? {},
          icon: const Icon(Icons.menu),
        ),
        title: Text(title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Text(
          'Try to Open the Drawer using the swipe action or the top menu icon',
          style: Theme.of(context).textTheme.bodyLarge,
        ),
      ),
    );
  }
}

The error

══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
The following _TypeError was thrown while handling a gesture:
Null check operator used on a null value

When the exception was thrown, this was the stack:
#0      MyHomeView.build.<anonymous closure> (package:example/main.dart:41:46)
#1      MyHomePage.build.<anonymous closure> (package:example/main.dart:71:35)
#2      _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1183:21)
#3      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:275:24)
#4      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:652:11)
#5      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:309:5)
#6      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:279:7)
#7      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:167:27)
#8      GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:492:20)
#9      GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:468:22)
#10     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:439:11)
#11     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:413:7)
#12     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:376:5)
#13     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:323:7)
#14     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:292:9)
#15     _invoke1 (dart:ui/hooks.dart:328:13)
#16     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:410:7)
#17     _dispatchPointerDataPacket (dart:ui/hooks.dart:262:31)

Handler: "onTap"
Recognizer:
  TapGestureRecognizer#08c69
════════════════════════════════════════════════════════════════════════════════════════════════════

Another exception was thrown: Null check operator used on a null value