Hello I use shared preferences and dropdown for saving the screen value in the app but after I add code of shared preferences its shows following error but if I delete the shared preferences code then dropdown works fine. Without shared perferences the dropdown is working . but after i add code of shared perference to save my dropdown value then this error comes . This is error show in my app
This is my full code
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class HomeView extends StatelessWidget {
const HomeView({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(body: DropPage());
}
}
class DropPage extends StatefulWidget {
@override
_DropPageState createState() => _DropPageState();
}
class _DropPageState extends State<DropPage> {
String _selectedGender = 'FYJC';
SharedPreferences prefs;
final _key = 'cur_r';
@override
void initState() {
super.initState();
_read(); // read in initState
}
_read() async {
prefs = await SharedPreferences.getInstance();
setState(() {
_selectedGender = prefs.getString(_key) ?? "FYJC"; // get the value
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Screen'),
),
body: Center(
child: Column(
children: <Widget>[
DropdownButton(
value: _selectedGender,
items: _dropDownItem(),
onChanged: (value) {
setState(() {
_selectedGender = value;
});
prefs.setString(
_key, _selectedGender); // save value to SharedPreference
_selectedGender = value;
switch (value) {
case "FYJC":
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
break;
case "SYJC":
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
break;
case "FYBCOM":
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
break;
case "SYBCOM":
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
break;
case "TYBCOM":
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
break;
}
},
hint: Text('Select Cource Year'),
),
],
),
),
);
}
List<DropdownMenuItem<String>> _dropDownItem() {
List<String> ddl = [
"FYJC",
"SYJC",
"FYBCOM",
"SYBCOM",
"TYBCOM",
];
return ddl
.map((value) => DropdownMenuItem(
value: value,
child: Text(value),
))
.toList();
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
),
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Go back!'),
),
),
);
}
}