diff --git a/example/lib/interactive_example.dart b/example/lib/interactive_example.dart index 7aec7c0f..3d6985de 100644 --- a/example/lib/interactive_example.dart +++ b/example/lib/interactive_example.dart @@ -10,7 +10,8 @@ class InteractiveExample extends StatefulWidget { } class _InteractiveExampleState extends State { - PersistentTabController _controller; + PersistentTabController _controller = + PersistentTabController(initialIndex: 0); bool _hideNavBar = false; NavBarStyle _navBarStyle = NavBarStyle.style15; bool _hideNavigationBarWhenKeyboardShows = true; @@ -20,12 +21,6 @@ class _InteractiveExampleState extends State { bool _popAllScreensOnTapOfSelectedTab = true; bool _confineInSafeArea = true; - @override - void initState() { - super.initState(); - _controller = PersistentTabController(initialIndex: 0); - } - List _buildScreens() { return [ MainScreen( @@ -107,8 +102,10 @@ class _InteractiveExampleState extends State { }, ), onPressed: (context) { - pushDynamicScreen(context, - screen: SampleModalScreen(), withNavBar: true); + if (context != null) { + pushDynamicScreen(context, + screen: SampleModalScreen(), withNavBar: true); + } }), PersistentBottomNavBarItem( icon: Icon(Icons.message), @@ -174,10 +171,12 @@ class _InteractiveExampleState extends State { height: 2, color: Colors.deepPurpleAccent, ), - onChanged: (NavBarStyle newStyle) { - setState(() { - _navBarStyle = newStyle; - }); + onChanged: (newStyle) { + if (newStyle != null) { + setState(() { + _navBarStyle = newStyle; + }); + } }, items: NavBarStyle.values .map>( @@ -294,21 +293,23 @@ class _InteractiveExampleState extends State { popActionScreens: PopActionScreensType.all, bottomScreenMargin: 0.0, onWillPop: (context) async { - await showDialog( - context: context, - useSafeArea: true, - builder: (context) => Container( - height: 50.0, - width: 50.0, - color: Colors.white, - child: ElevatedButton( - child: Text("Close"), - onPressed: () { - Navigator.pop(context); - }, + if (context != null) { + await showDialog( + context: context, + useSafeArea: true, + builder: (context) => Container( + height: 50.0, + width: 50.0, + color: Colors.white, + child: ElevatedButton( + child: Text("Close"), + onPressed: () { + Navigator.pop(context); + }, + ), ), - ), - ); + ); + } return false; }, hideNavigationBar: _hideNavBar, diff --git a/example/lib/main.dart b/example/lib/main.dart index 3482b8a6..027d5024 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -24,7 +24,7 @@ class PersistenBottomNavBarDemo extends StatelessWidget { } class MainMenu extends StatefulWidget { - MainMenu({Key key}) : super(key: key); + MainMenu({Key? key}) : super(key: key); @override _MainMenuState createState() => _MainMenuState(); @@ -78,22 +78,16 @@ class _MainMenuState extends State { // ----------------------- Using a provided Navbar style ---------------------// class ProvidedStyleExample extends StatefulWidget { - ProvidedStyleExample({Key key}) : super(key: key); + ProvidedStyleExample({Key? key}) : super(key: key); @override _ProvidedStyleExampleState createState() => _ProvidedStyleExampleState(); } class _ProvidedStyleExampleState extends State { - PersistentTabController _controller; - bool _hideNavBar; - - @override - void initState() { - super.initState(); - _controller = PersistentTabController(initialIndex: 0); - _hideNavBar = false; - } + PersistentTabController _controller = + PersistentTabController(initialIndex: 0); + bool _hideNavBar = false; List _buildScreens() { return [ @@ -176,8 +170,10 @@ class _ProvidedStyleExampleState extends State { }, ), onPressed: (context) { - pushDynamicScreen(context, - screen: SampleModalScreen(), withNavBar: true); + if (context != null) { + pushDynamicScreen(context, + screen: SampleModalScreen(), withNavBar: true); + } }), PersistentBottomNavBarItem( icon: Icon(Icons.message), @@ -238,21 +234,23 @@ class _ProvidedStyleExampleState extends State { popActionScreens: PopActionScreensType.all, bottomScreenMargin: 0.0, onWillPop: (context) async { - await showDialog( - context: context, - useSafeArea: true, - builder: (context) => Container( - height: 50.0, - width: 50.0, - color: Colors.white, - child: ElevatedButton( - child: Text("Close"), - onPressed: () { - Navigator.pop(context); - }, + if (context != null) { + await showDialog( + context: context, + useSafeArea: true, + builder: (context) => Container( + height: 50.0, + width: 50.0, + color: Colors.white, + child: ElevatedButton( + child: Text("Close"), + onPressed: () { + Navigator.pop(context); + }, + ), ), - ), - ); + ); + } return false; }, hideNavigationBar: _hideNavBar, @@ -279,22 +277,16 @@ class _ProvidedStyleExampleState extends State { // ------------------------ Using a custom Navbar style ----------------------// class CustomWidgetExample extends StatefulWidget { - CustomWidgetExample({Key key}) : super(key: key); + CustomWidgetExample({Key? key}) : super(key: key); @override _CustomWidgetExampleState createState() => _CustomWidgetExampleState(); } class _CustomWidgetExampleState extends State { - PersistentTabController _controller; - bool _hideNavBar; - - @override - void initState() { - super.initState(); - _controller = PersistentTabController(initialIndex: 0); - _hideNavBar = false; - } + PersistentTabController _controller = + PersistentTabController(initialIndex: 0); + bool _hideNavBar = false; List _buildScreens() { return [ @@ -409,7 +401,7 @@ class _CustomWidgetExampleState extends State { items: _navBarsItems(), onItemSelected: (index) { setState(() { - navBarEssentials.onItemSelected(index); + navBarEssentials.onItemSelected?.call(index); }); }, selectedIndex: _controller.index, @@ -422,12 +414,12 @@ class _CustomWidgetExampleState extends State { class CustomNavBarWidget extends StatelessWidget { final int selectedIndex; final List items; - final ValueChanged onItemSelected; + final ValueChanged? onItemSelected; CustomNavBarWidget({ - Key key, - this.selectedIndex, - @required this.items, + Key? key, + required this.selectedIndex, + required this.items, this.onItemSelected, }); @@ -460,7 +452,7 @@ class CustomNavBarWidget extends StatelessWidget { type: MaterialType.transparency, child: FittedBox( child: Text( - item.title, + item.title??"", style: TextStyle( color: isSelected ? (item.activeColorSecondary == null @@ -492,7 +484,7 @@ class CustomNavBarWidget extends StatelessWidget { return Expanded( child: InkWell( onTap: () { - this.onItemSelected(index); + this.onItemSelected?.call(index); }, child: _buildItem(item, selectedIndex == index), ), diff --git a/example/lib/modal-screen.dart b/example/lib/modal-screen.dart index 804bef68..96ea5408 100644 --- a/example/lib/modal-screen.dart +++ b/example/lib/modal-screen.dart @@ -16,7 +16,7 @@ class SampleModalScreen extends ModalRoute { Color get barrierColor => Colors.black.withOpacity(0.5); @override - String get barrierLabel => null; + String? get barrierLabel => null; @override bool get maintainState => true; diff --git a/example/lib/screens.dart b/example/lib/screens.dart index ae8a6381..87ad02a3 100644 --- a/example/lib/screens.dart +++ b/example/lib/screens.dart @@ -4,11 +4,11 @@ import 'package:persistent_bottom_nav_bar_v2/persistent-tab-view.dart'; import 'modal-screen.dart'; class MainScreen extends StatelessWidget { - final Function onScreenHideButtonPressed; + final Function? onScreenHideButtonPressed; final bool hideStatus; const MainScreen({ - Key key, + Key? key, this.onScreenHideButtonPressed, this.hideStatus = false, }) : super(key: key); @@ -116,7 +116,7 @@ class MainScreen extends StatelessWidget { Center( child: ElevatedButton( onPressed: () { - this.onScreenHideButtonPressed(); + this.onScreenHideButtonPressed?.call(); }, child: Text( this.hideStatus @@ -149,7 +149,7 @@ class MainScreen extends StatelessWidget { } class MainScreen2 extends StatelessWidget { - const MainScreen2({Key key}) : super(key: key); + const MainScreen2({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -187,7 +187,7 @@ class MainScreen2 extends StatelessWidget { } class MainScreen3 extends StatelessWidget { - const MainScreen3({Key key}) : super(key: key); + const MainScreen3({Key? key}) : super(key: key); @override Widget build(BuildContext context) {