import 'dart:convert';
import 'package:flutter/widgets.dart';
import 'package:flutter_app/home_page.dart';
import 'package:flutter_app/login_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
import 'package:geolocator/geolocator.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String name;
@override
void initState() {
super.initState();
}
Future <void>loadPref()async{
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
return Future.delayed(Duration(seconds: 1),(){
return name=sharedPreferences.getString("useFullName");
});
}
logout()async{
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.clear();
sharedPreferences.commit();
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (BuildContext context) => LoginPage()), (Route<dynamic> route) => false);
}
var locationMessege= "";
void getCurrentLocation()async{
var position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
var lastPosition=await Geolocator.getLastKnownPosition();
print(lastPosition);
setState(() {
locationMessege="$position.latitude,$position.longitude";
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor:Colors.orangeAccent,
title: FutureBuilder(
future: loadPref(),
builder: (context, snapshot) {
if(name==null){
return Text("Loading");
}else{
return Text("$name");
}
},
),
actions: <Widget>[
FlatButton(
onPressed: () {
logout();
},
child: Text("Log Out", style: TextStyle(color: Colors.white)),
),
],
),
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/bg1.png"), fit: BoxFit.cover)),
child: Center(
child: Container(
padding: EdgeInsets.all(30),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
children:<Widget> [
Container(
width: 130.0,
height: 130.0,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/solalogo2.png"), fit: BoxFit.cover))
),
Text("GPS Location",style: TextStyle(
color: Colors.black,
fontSize: 30.0,
fontWeight: FontWeight.bold)),
Icon(Icons.location_on,
size: 46,
color: Colors.yellow,),
Text("Position:$locationMessege",style:TextStyle(
color: Colors.black,
fontSize: 20.0,
fontWeight: FontWeight.bold)),
FlatButton(onPressed:(){
getCurrentLocation();
},
color: Colors.orange,
child: Text("Get New Location",
style: TextStyle(
color: Colors.black,
),))
],
),
],
),
),
),
),
);
}
}
After the successful login its being directed to to this home page. I want to load the users name on the appbar
title, but it always trigger the loading statement and not load the name till I close the app and load it again. When you reopen the app you get directed to home page if the user previously logged in. I'm new to flutter and this has been my 2nd week working with it and any useful tips and advice would be much appreciated.
Change the code of loadPref()
method
Future <String> loadPref()async{
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
return await sharedPreferences.getString("useFullName");
}
FutureBuilder(
future: loadPref(),
builder: (context, snapshot) {
if(snapshot.hasData){
return Text("${snapshot.data}");
}else{
return Text("Loading");
}
},
)