У меня есть несколько текстовых полей с подсказкой текста и нижней навигацией.Текст, введенный в текстовое поле (на странице 1), будет сохранен в общих настройках «при изменении».
Когда я нажимаю на нижнюю панель навигации на следующей странице (страница 2) и снова возвращаюсь на страницу 1, создается впечатление, чтовиджет перестроится и покажет hintText до отображения сохраненных данных общих предпочтений в виджете.
Я пытался получить данные sharedpreference во время initState, но он не работает.Я также пытался использовать будущий построитель, однако, когда я набирал значение в TextField не так гладко, иногда текст мог мерцать между символами до и после.Я не уверен, какой метод использовать, или моя кодировка неверна.
Может кто-нибудь посоветовать, какой метод использовать?
Заранее спасибо!
логин.дротик
@override
Widget build(BuildContext context){
return new Scaffold(
appBar: new AppBar(
title: Text('Login Page'),
),
body: bottomNav[currentBottomNavIndex],
bottomNavigationBar: BottomNavigationBar(
onTap: onTapped,
currentIndex: currentBottomNavIndex,
type: BottomNavigationBarType.fixed,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text("Page1"),
),
BottomNavigationBarItem(
icon: Icon(Icons.mail),
title: Text('Page2'),
),
],
),
);
}
page1.dart
class Page1 extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _Page1State();
}
}
class _Page1State extends State<Page1> {
TextEditingController name = TextEditingController();
String name_str;
Future<String> getName(String key) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
name_str = prefs.getString(key);
setState(() {
name = new TextEditingController(text: name_str);
});
return name_str;
}
Future<bool> setName(String key, String value) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.setString(key, value);
}
@override
void initState() {
super.initState();
getName('name');
}
@override
Widget build(BuildContext context) {
//return FutureBuilder(
//future: getName('name'),
//builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
// if (snapshot.hasData) {
return Container(
margin: EdgeInsets.all(100.0),
width: 185,
child: Center(
child: TextField(
controller: name,
textAlign: TextAlign.center,
decoration: new InputDecoration(
hintText: "Name (Original)",
),
onTap:() {
name.clear();
setName('name', '');
},
onChanged: (String str) {
setState(() {
name_str = str;
setName('name', str);
});
},
)
)
);
// }else{
// return Container();
// }
// }
//);
}
}
Page2.dart
class Page2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: Text('Page2'),
),
);
}
}