Тип «Null» не является подтипом ошибки типа «Виджет» — FlutterAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Тип «Null» не является подтипом ошибки типа «Виджет» — Flutter

Сообщение Anonymous »

Я получаю сообщение «Тип «Null» не является подтипом типа «Виджет» для этой страницы. Не уверен, что вызывает ошибку. Я посмотрел на стек и не могу определить причину. Мне бы хотелось помочь в этом. Спасибо!
из main.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();

await Firebase.initializeApp();
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
setupLocator();

SingletonShareData data = SingletonShareData();
data.store = Store(
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) {

data.getCategory(wp.catUrl!);
data.getPost(wp.postUrl!);
data.getTag(wp.tagUrl!);
});

initializeDateFormatting().then((_) => {
data.getCurrentUser().then((user) {
data.alreadyLogin = (user != null);

if (data.alreadyLogin == true) {
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()),
],
child: MaterialApp(
debugShowMaterialGrid: false,
debugShowCheckedModeBanner: false,
title: 'XXX App',
navigatorKey: Keys.navKey,
theme: kLightHealthTheme,
navigatorObservers: [observer],
home: AppHomePage(),
routes: {
"/learn": (BuildContext context) =>
BaseViewController(BottomNavigationBarController(index: 0)),
"/assessment": (BuildContext context) =>
BaseViewController(BottomNavigationBarController(index: 1)),

}));
}

}


из AppHomePage:
< div class="snippet">

Код: Выделить всё

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  {
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);

/*
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;
}
}


код, который выдает ошибку. Ошибка появляется, когда я нажимаю кнопку входа в ButtonButton()

Код: Выделить всё

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'bottomNavigationBarController.dart';
import 'signUpController.dart';

class SignInController extends StatefulWidget {
@override
_SignInControllerState createState() => _SignInControllerState();
}

class _SignInControllerState extends State {

List _formNodes = [FocusNode(), FocusNode()];

TextEditingController textEditingControllerEmail = TextEditingController();
TextEditingController textEditingControllerpassword = TextEditingController();
bool isEmailValid = true;
bool isPwValid = true;
FirebaseAuth _auth = FirebaseAuth.instance;

@override
void initState() {
super.initState();
ga.gaSetCurrentScreen(screenName: "signin_page");
Future.delayed(const Duration(milliseconds: 500), () {
showBiometric();
});
}

void showBiometric() async {
SingletonShareData data = SingletonShareData();
List account = await Utils.getAccount();
if (account.isNotEmpty) {
data.initBiometric(context, BiometricPage.SignInPage);
}
}

void resetPassword() async {
SingletonShareData data = SingletonShareData();

setState(() {
isEmailValid = textEditingControllerEmail.text.length >
0;
});

if (textEditingControllerEmail.text.length > 0) {
data.showLoading(context);
try {
await _auth.sendPasswordResetEmail(
email: textEditingControllerEmail.text,
);
data.hideLoading(context);
showDialog(
barrierDismissible: true,
context: context,
builder: (buildContext) {
return CustomAlertDialog(
title: Lang.getString("login_message"),
content: Lang.getString("login_forgetpw_content"),
leftButtonText: "",
rightButtonText: Lang.getString("login_close"),
buildContext: buildContext,
rightButtonFunction: () {
Navigator.of(context).pop();
});
});
} on FirebaseAuthException catch (e) {
data.hideLoading(context);
// print("PlatformExceptionError:$e");
showDialog(
barrierDismissible: true,
context: context,
builder: (buildContext) {
return CustomAlertDialog(
title: Lang.getString("login_error"),
content: data.getErrorMessage(
error: e, type: ErrorType.ForgetPassword),
leftButtonText: "",
rightButtonText: Lang.getString("login_close"),
buildContext: buildContext,
rightButtonFunction: () {
Navigator.of(context).pop();
});
});
}
}
}

void loginAction() async {
ga.gaEvent(name: "signin_button");
SingletonShareData data = SingletonShareData();

setState(() {
isEmailValid = textEditingControllerEmail.text.length >
0;
isPwValid = Utils.isValidate(
ValidationType.LOGIN_PASSWORD, textEditingControllerpassword.text);
});

if (textEditingControllerEmail.text.length >  0 &&
Utils.isValidate(ValidationType.LOGIN_PASSWORD,
textEditingControllerpassword.text)) {
data.showLoading(context);
try {
final UserCredential result = await _auth.signInWithEmailAndPassword(
email: textEditingControllerEmail.text,
password: textEditingControllerpassword.text,
);
data.hideLoading(context);
data.user = result.user;
ga.gaLogLogin(user: result.user);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
BaseViewController(BottomNavigationBarController())),
);
} on FirebaseAuthException catch (e) {
data.hideLoading(context);
print("PlatformExceptionError:$e");
showDialog(
barrierDismissible: true,
context: context,
builder: (buildContext) {
return CustomAlertDialog(
title: Lang.getString("login_error"),
content:
data.getErrorMessage(error: e, type: ErrorType.Login),
leftButtonText: "",
rightButtonText: Lang.getString("login_close"),
buildContext: buildContext,
rightButtonFunction: () {
Navigator.of(context).pop();
});
});
}
}
}

@override
Widget build(BuildContext context) {
return Container(
color: kLightHealthTheme.primaryColor,
child: Stack(
children: [
SafeArea(
bottom: false,
child: Material(
color: Color(0xFFFFA5C2),
child: CustomScrollView(
physics: new ClampingScrollPhysics(),
slivers: [
CustomSliverAppBarView(
isBack: false,
type: SliverAppBarType.SignInPage,
titleText: Lang.getString("login_bar_title"),
widgetList: [
Padding(
padding: EdgeInsets.only(top: topPadding),
child: Container(width: 35)),
Padding(
padding: EdgeInsets.only(top: topPadding),
child: Container(width: 35)),
Container(
alignment: Alignment.centerRight,
margin:
EdgeInsets.only(right: defaultPadding, top: 8),
child: InkWell(
onTap: () async {
showDialog(
barrierDismissible: true,
context: context,
builder: (buildContext) {
return CustomAlertDialog(
title: Lang.getString(
"popup_guest_title"),
content: Lang.getString(
"popup_guest_content"),
leftButtonText: Lang.getString(
"popup_guest_login"),
rightButtonText: Lang.getString(
"popup_guest_cont"),
buildContext: buildContext,
rightButtonFunction: () async {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
BaseViewController(
BottomNavigationBarController())));
});
});
},
child: Text(
Lang.getString("login_bar_skip"),
textScaleFactor: 1.0,
style: TextStyle(
color:  Colors.white,
fontSize: 15,
fontWeight: FontWeight.w500,
),
),
)),
]),
SliverToBoxAdapter(
child: WaveBar(),
),
],
),
),
),
Container(
alignment: Alignment(0, 0),
margin: EdgeInsets.only(top: 80),
child: Center(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
Container(
width: MediaQuery.of(context).size.width,
margin: EdgeInsets.symmetric(horizontal: 15.0),
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
color: Colors.white,
child: Container(
padding: EdgeInsets.only(
top: 30, bottom: 20, left: 20, right: 20),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.only(bottom: 30),
child: Text(
Lang.getString("login_body_title"),
style: TextStyle(
color: Color(0xFF6A6969),
fontSize: 21,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),

CustomInputField(

iconDataCodePoint: Icons.person,
title: Lang.getString("inputfield_email_title"),
focusNode: _formNodes[0],
nextFocusNode: _formNodes[1],
textInputAction: TextInputAction.next,
validationType: ValidationType.NONE,
textEditingController:
textEditingControllerEmail,
),
(isEmailValid)
? Container()
: Row(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
child: Icon(Icons.error,
color: Color(0xFFFA356A))),
Container(
child: Text(
" " +
Lang.getString(
"inputfield_email_validation"),
style: TextStyle(
color: Color(0xFFFA356A),
fontSize: 13,
fontWeight: FontWeight.w600),
),
)
],
),
CustomInputField(
iconDataCodePoint: Icons.lock,
title:
Lang.getString("inputfield_password_title"),
obscureText: true,
focusNode: _formNodes[1],
textInputAction: TextInputAction.done,
validationType:  ValidationType.NONE,
textEditingController:
textEditingControllerpassword,
),
(isPwValid)
? Container()
: Container(
margin: EdgeInsets.only(top: 0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Icon(Icons.error,
color: Color(0xFFFA356A)),
Expanded(
child: Text(
" " +
Lang.getString(
"profile_password_include") +
"\n- " +
Lang.getString(
"profile_8_char") +
"\n- " +
Lang.getString(
"profile_upper_lower_case") +
"\n- " +
Lang.getString(
"profile_numberic"),
style: TextStyle(
color: Color(0xFFFA356A),
fontSize: 13,
fontWeight: FontWeight.w600),
))
],
)),
BottomButton(
buttonType:
ButtonType.LoginButtonWithForgetPassword,
buttonText: Lang.getString("login_button"),
onPressed: () async {
loginAction();
},
function: () async {
resetPassword();
}),                            )
],
),
),
),
),
Container(
margin: EdgeInsets.only(top: 20),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.only(
top: 30, bottom: 20, left: 30.0, right: 30.0),
child: ButtonTheme(
minWidth: 300,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
minimumSize: Size.fromHeight(50.0),
elevation: 0.0,
padding: EdgeInsets.all(12),
shape: RoundedRectangleBorder(
side:
BorderSide(color: Color(0xFFE14672)),
borderRadius: BorderRadius.all(
Radius.circular(50))),

backgroundColor: Color(0xFFFFA5C2),
disabledBackgroundColor: Color(0xFFFFA5C2),
),
child: Text(
Lang.getString("login_signup_button"),
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color:  Color(0xFFE14672),
),
),
onPressed: () async {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
BaseViewController(
SignUpController())));
},

),
),
)
],
),
)
],
),
),
),
)
],
),
);
}
}


Большое спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/792 ... or-flutter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»