After closing the app, when I try to open it again, I'm getting the following error but it's only on iOS platform, Android works well.
I have looked around and there are several SO questions and issues about this problem but I couldn't solve it. I'm also using bloc
pattern for managing state.
I have GlobalKey<FormState>
in my AuthenticateForm
.
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:low_code/blocs/authentication/authentication_bloc.dart';
import 'package:low_code/blocs/authentication/authentication_event.dart';
import 'package:low_code/helpers/app_localization/app_localizations.dart';
class AuthenticateForm extends StatefulWidget {
@override
_AuthenticateFormState createState() => _AuthenticateFormState();
}
class _AuthenticateFormState extends State<AuthenticateForm> {
GlobalKey<FormState> _formKey = GlobalKey<FormState>();
String username;
String password;
@override
Widget build(BuildContext context) {
AppLocalizations appLocalizations = AppLocalizations.of(context);
return Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextFormField(
onSaved: (String value) => username = value,
initialValue: 'dms-bpm',
decoration: InputDecoration(
labelText: appLocalizations.translate('username')),
// ignore: missing_return
validator: (String value) {
if (value.isEmpty) {
return 'Please enter your ${appLocalizations.translate('username')}';
}
},
),
TextFormField(
onSaved: (String value) => password = value,
obscureText: true,
decoration: InputDecoration(
labelText: appLocalizations.translate('password')),
initialValue: 'dms-bpm',
// ignore: missing_return
validator: (String value) {
if (value.isEmpty) {
return 'Please enter your ${appLocalizations.translate('password')}';
}
},
),
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(15))),
child: Text(appLocalizations.translate('login')),
onPressed: () {
_formKey.currentState.save();
if (_formKey.currentState.validate()) {
BlocProvider.of<AuthenticationBloc>(context)
..dispatch(
Authenticate(username: username, password: password));
}
},
)
],
),
);
}
}
Flutter (Channel stable, v1.7.8+hotfix.4, on Microsoft Windows [Version 10.0.17763.615], locale en-GB)
Solution 1: live-love
In my case this error happened because I had a initialRoute property set, while instead I should set the home property:
class RouteTestApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo',
//initialRoute: '/', //remove this
home: FirstScreen(), //this is the calling screen
routes: {
ExtractArgumentsScreen.routeName: (context) => ExtractArgumentsScreen(),
},
);
}
}
Solution 2: Rezaul Islam
In my case, I run the flutter app without adding
home: BottomNavBar()
.
after getting an error I added home: BottomNavBar()
and give hot reload (Command + s) which reproduce this error (A global key was used multiple times inside one widget child list).
Then I just reconnect my target device and run again, which fixed my issue.
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
brightness:Brightness.light,
primaryColor: Colors.white,
accentColor: Colors.blue,
fontFamily: 'Poppins',
appBarTheme: AppBarTheme(
centerTitle: true,
),
),
home: BottomNavBar(),
);
}
}
Solution 3: Collen Zhou
Try stop and rerun you application instead of hot reloading. That solved my problem.
Solution 4: Fernando Batista
Try to make your GlobalKey "final". I think the fact your global key is mutable might be creating this problem.
Solution 5: Macdonald
In my case, the calling screen in the home:
property of the MaterialApp()
object was returning null. After fixing it, I stopped the app and reran it.
Solution 6: NASHIR ABDULLAH
i just stopped the hot reload and restarted the app it worked for me
Solution 7: Hisham Shami
just kill the app run (stop) and uninstall it then reinstall it again to reset the navigator state