Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(title: const Text("Configurações")),
body: ListView(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: TextField(
controller: usernameController,
decoration: const InputDecoration(
labelText: "Nome de usuário",
hintText: "Mudar seu nome de usuário"),
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: TextField(
keyboardType: TextInputType.number,
controller: heightController,
decoration: const InputDecoration(
labelText: "Altura", hintText: "Mudar sua altura"),
),
),
SwitchListTile(
title: const Text("Notifications"),
value: hasPushNotificationOn,
onChanged: (value) => setState(() {
hasPushNotificationOn = value;
})),
SwitchListTile(
title: const Text("Dark mode"),
value: isDarkMode,
onChanged: (value) => setState(() {
isDarkMode = value;
}),
),
FloatingActionButton(
onPressed: () async {
try {
await storage.setDouble(
K_HEIGHT, double.parse(heightController.text));
} catch (e) {
showDialog(
context: context,
builder: (_) => AlertDialog(
title: const Text("Erro"),
content: const Text("Altura inválida"),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text("Ok"))
],
),
);
}
await storage.setString(
K_USERNAME, usernameController.text);
await storage.setBool(K_DARK_MODE, isDarkMode);
await storage.setBool(
K_PUSH_NOTIFICATION, hasPushNotificationOn);
Navigator.pop(context);
setState(() {
username = usernameController.text;
height = double.tryParse(heightController.text);
});
},
child: const Icon(Icons.save_as_rounded))
],
)),
);
}
这将导致初始代码:
ListTile(
title: const Row(
children: [
Icon(Icons.settings),
SizedBox(width: 10),
Text("Configurações"),
],
),
onTap: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => const SettingsPage(),
));
},
),
这应该是一个超级简单的配置菜单。当我点击保存图标时,或者当我在这个try catch语句中得到一个错误时,我得到一个完全黑屏,它根本不显示对话框。
是导航仪出问题了吗。爸爸?为什么会这样呢?
另外,我试图通过在floatingButton内的onPressed()之前声明一个变量来从async函数中获取上下文,但它也不起作用。
1条答案
按热度按时间n6lpvg4x1#
如果您在主页
如果您用途:
这将用新路由替换当前路由,因此您无法返回。
使用
push
代替。https://api.flutter.dev/flutter/widgets/Navigator/push.html
关于为什么你的
pop
在你的对话框上不起作用的问题,这是因为你使用了错误的上下文。在这部分代码中。
您没有显示从对话框生成的“上下文”。
就换成这个