I am getting a “type ‘Null’ is not a subtype of type ‘Widget'” for this page. Not sure what’s causing the error. I’ve looked at stack and can’t determine the cause. I’d love some help on this. Thank you!
from main.dart :
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:provider/provider.dart';
import 'package:redux/redux.dart';
import 'api_provider/crudModel.dart';
import 'controller/baseViewController.dart';
import 'controller/bottomNavigationBarController.dart';
import 'googleAnalytics/googleAnalytics.dart';
import 'model/locator.dart';
import 'utilities/themes.dart';
FlutterLocalNotificationsPlugin? flutterLocalNotificationsPlugin;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Crashlytics.instance.enableInDevMode = true;
// Pass all uncaught errors from the framework to Crashlytics.
// FlutterError.onError = Crashlytics.instance.recordFlutterError;
await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
setupLocator();
SingletonShareData data = SingletonShareData();
data.store = Store<AppState>(
appReducer,
initialState: AppState.initial(),
middleware: [
LoadingPageMiddleware(),
NavigationMiddleware(),
DataMiddleware()
],
);
flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
data.getPspHomePageData();
data.getSmpt();
data.getDisclaimer();
data.getTNC();
data.setVersion();
String fUrl = firebaseModule;
print("loading url?");
data.getWordPressUrl(fUrl).then((wp) {
print("Future wp URL <post>:${wp.postUrl}");
print('Future wp URL <categories>: ${wp.catUrl}');
print('Future wp URL <tag>: ${wp.tagUrl}');
print('Future wp URL <upload>: ${wp.uploadUrlRef1}');
print('Future wp URL <upload>: ${wp.uploadUrlRef2}');
debugPrint("Get tag url : ${wp.tagUrl}");
data.getCategory(wp.catUrl!);
data.getPost(wp.postUrl!);
data.getTag(wp.tagUrl!);
});
initializeDateFormatting().then((_) => {
data.getCurrentUser().then((user) {
data.alreadyLogin = (user != null);
print("alreadyLogin:${data.alreadyLogin}");
print("Loading wp url from ${fUrl}");
if (data.alreadyLogin == true) {
debugPrint("Alrady login user : ");
user = FirebaseAuth.instance.currentUser;
if (user != null) {
data.getChoiceValuesFromFireBase(user);
// data.clearUserPasswordData(user: user);
}
}
// });
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: kLightHealthTheme.primaryColor));
runApp(StoreProvider(store: data.store!, child: MyApp()));
})
});
}
class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
static final observer = FirebaseAnalyticsObserver(analytics: analytics);
MyApp();
@override
Widget build(BuildContext context) {
ga.analytics = analytics;
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => locator<CRUDModel>()),
],
child: MaterialApp(
debugShowMaterialGrid: false,
debugShowCheckedModeBanner: false,
title: 'XXX App',
navigatorKey: Keys.navKey,
theme: kLightHealthTheme,
navigatorObservers: <NavigatorObserver>[observer],
home: AppHomePage(),
routes: <String, WidgetBuilder>{
"/learn": (BuildContext context) =>
BaseViewController(BottomNavigationBarController(index: 0)),
"/assessment": (BuildContext context) =>
BaseViewController(BottomNavigationBarController(index: 1)),
}));
}
}
from AppHomePage :
import 'package:flutter/material.dart';
import 'package:icanfight/controller/singletonShareData.dart';
import 'package:icanfight/controller/baseViewController.dart';
import 'package:icanfight/controller/bottomNavigationBarController.dart';
import 'package:icanfight/controller/welcomeController.dart';
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
class AppHomePage extends StatefulWidget {
@override
_AppHomePageState createState() => new _AppHomePageState();
}
class _AppHomePageState extends State<AppHomePage> {
Widget showingWidget = Container();
@override
void initState() {
super.initState();
initDynamicLinks();
}
// test deep link
void initDynamicLinks() async {
PendingDynamicLinkData? data =
await FirebaseDynamicLinks.instance.getInitialLink();
Uri? deepLink = data?.link;
handleDeepLink(deepLink);
/* FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
Uri? deepLink = dynamicLink.link;
// if app is opening, here will be called
print('Firebase onlink');
handleDeepLink(deepLink);
}, onError: (OnLinkErrorException e) async {
print('onLinkError');
// print(e.message);
}); */
}
// test deep link ends
/*
Place for handling deeplink
*/
void handleDeepLink(deepLink) {
// Uri deepLink = deepLinks;
while (Navigator.canPop(context)) {
Navigator.pop(context);
}
if (deepLink != null) {
debugPrint('deepLink ' + deepLink.path);
// ga.gaEvent(name: "dynamic_link_app");
final queryParams = deepLink.queryParameters;
// debugPrint('query length ' + queryParams.length.toString());
if (queryParams.length > 0) {
queryParams.forEach((key, value) {
debugPrint(key.toString() + " --- " + value.toString());
});
if (queryParams["article"] != null) {
routeToArticle(int.parse(queryParams["article"] ?? ""));
}
} else {
routingHelper(deepLink.path);
}
} else {
setDefaultWidget();
}
}
/*
The function is to map the deep link path into app route path
@param: path: path following the domain
*/
void routingHelper(String path) {
switch (path) {
// below are set according to BC Patient App Excel (App deep link table)
case "/profile":
setState(() {
showingWidget = new BaseViewController(BottomNavigationBarController(
index: 0,
));
});
Future.delayed(Duration(milliseconds: 500), () {
setState(() {
showingWidget =
new BaseViewController(BottomNavigationBarController(
index: SingletonShareData().alreadyLogin ? 2 : 0,
));
});
});
break;
case "/learn":
setState(() {
showingWidget = new BaseViewController(BottomNavigationBarController(
index: 2,
));
});
Future.delayed(Duration(milliseconds: 500), () {
setState(() {
showingWidget =
new BaseViewController(BottomNavigationBarController(
index: 0,
));
});
});
break;
case "/assessment":
setState(() {
showingWidget = new BaseViewController(BottomNavigationBarController(
index: 0,
));
});
Future.delayed(Duration(milliseconds: 500), () {
setState(() {
showingWidget =
new BaseViewController(BottomNavigationBarController(
index: SingletonShareData().alreadyLogin ? 1 : 0,
));
});
});
break;
default:
break;
}
}
void routeToArticle(int articleId) {
setState(() {
showingWidget = new BaseViewController(BottomNavigationBarController(
index: 0,
postId: -1,
));
});
Future.delayed(Duration(milliseconds: 500), () {
setState(() {
showingWidget = new BaseViewController(BottomNavigationBarController(
index: 0,
postId: articleId,
));
});
});
}
void setDefaultWidget() {
if (SingletonShareData().alreadyLogin) {
setState(() {
showingWidget = new BaseViewController(BottomNavigationBarController(
index: 0,
));
});
} else {
setState(() {
showingWidget = new BaseViewController(WelcomeController());
});
}
}
@override
Widget build(BuildContext context) {
return showingWidget;
}
}
and this is the stack :
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _TypeError was thrown building Builder(dirty):
type 'Null' is not a subtype of type 'Widget'
The relevant error-causing widget was:
MaterialApp
MaterialApp:file:///Users/xxx/Developer/Deployment/xxx/xxx/xxx/lib/main.dart:158:16
When the exception was thrown, this was the stack:
#0 ProgressDialog.show.<anonymous closure> (package:sn_progress_dialog/progress_dialog.dart:161:29)
#1 Builder.build (package:flutter/src/widgets/basic.dart:7448:48)
#2 StatelessElement.build (package:flutter/src/widgets/framework.dart:5038:49)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4968:15)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#5 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4950:5)
#6 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4944:5)
... Normal element mounting (187 frames)
#193 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3953:16)
#194 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6512:36)
#195 Element.updateChild (package:flutter/src/widgets/framework.dart:3682:18)
#196 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:6041:32)
#197 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6537:17)
#198 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#199 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#200 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11)
#201 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#202 StatefulElement.update (package:flutter/src/widgets/framework.dart:5156:5)
#203 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#204 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#205 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#206 ProxyElement.update (package:flutter/src/widgets/framework.dart:5301:5)
#207 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#208 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#209 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#210 ProxyElement.update (package:flutter/src/widgets/framework.dart:5301:5)
#211 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11)
#212 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#213 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#214 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11)
#215 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#216 StatefulElement.update (package:flutter/src/widgets/framework.dart:5156:5)
#217 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#218 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#219 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#220 ProxyElement.update (package:flutter/src/widgets/framework.dart:5301:5)
#221 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11)
#222 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#223 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#224 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11)
#225 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#226 StatefulElement.update (package:flutter/src/widgets/framework.dart:5156:5)
#227 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#228 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#229 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#230 ProxyElement.update (package:flutter/src/widgets/framework.dart:5301:5)
#231 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#232 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#233 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11)
#234 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#235 StatefulElement.update (package:flutter/src/widgets/framework.dart:5156:5)
#236 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#237 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6384:14)
#238 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#239 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6384:14)
#240 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#241 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#242 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#243 ProxyElement.update (package:flutter/src/widgets/framework.dart:5301:5)
#244 Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#245 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#246 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11)
#247 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#248 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2743:19)
#249 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:863:21)
#250 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:381:5)
#251 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15)
#252 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1218:9)
#253 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1076:5)
#254 _invoke (dart:ui/hooks.dart:145:13)
#255 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#256 _drawFrame (dart:ui/hooks.dart:112:31)
The error pops out when I clicked on the Login Button.
Many thanks for your help !