我很困惑在哪里我可以实现初始化状态条件为未来的建设者。看看什么是错误的在我的代码。在Flutter文档是指初始化状态为未来的建设者小部件。
` @override
void initState() {
super.initState();
futureLoginuser = loginuser();
}`
我试图导航后,响应数据arrives.my完整的代码在这里我使用go_router导航新屏幕。
class LoginForm extends StatefulWidget {
const LoginForm({Key? key}) : super(key: key);
@override
LoginFormState createState() {
return LoginFormState();
}
}
class LoginFormState extends State<LoginForm> {
TextEditingController mobileController = TextEditingController();
TextEditingController passwordController = TextEditingController();
final _mobileKey = GlobalKey<FormState>();
final _passwordKey = GlobalKey<FormState>();
get message => null;
get messagecode => null;
get userinfo => null;
get token => null;
Future<Loginuser> loginuser(String mobile, String password) async {
final response = await http.post(
Uri.parse('https:random.url/api/login'),
body: {'mobile': mobile, 'password': password});
if (response.statusCode == 200) {
return Loginuser.fromJson(jsonDecode(response.body));
}
} else {
throw Exception('Failed to update');
}
@override
Widget build(BuildContext context) {
return Form(
key: _mobileKey,
child: Column(crossAxisAlignment: CrossAxisAlignment.center, children: [
TextFormField(
controller: mobileController,
autofocus: true,
keyboardType: TextInputType.phone,
decoration: const InputDecoration(
border: InputBorder.none,
hintText: "Enter Your Mobile Number",
),
),
TextFormField(
controller: passwordController,
key: _passwordKey,
keyboardType: TextInputType.visiblePassword,
decoration: const InputDecoration(
border: InputBorder.none,
hintText: "Enter Your Password",
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: ElevatedButton(
onPressed: () {
FutureBuilder<Loginuser>(
future: loginuser(mobileController.text.toString(),
passwordController.text.toString()),
builder: (context, snapshot) {
if (snapshot.hasData) {
print('snapshsot.hasdata');
context.go('/Home');
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
return const CircularProgressIndicator();
},
);
}
child: const Text('Submit')),
),
]));
}
}
'
3条答案
按热度按时间6qqygrtg1#
你用错
FutureBuilder
了,它是一个小部件,基于与未来交互的最新快照构建自己。它通常用于构建在某个未来完成时需要输入的小部件。在您的情况下,请使用以下命令:
等待未来完成并做一些事情的唯一方法是直接使用异步函数,如我上面所示,或者使用try/catch方法,这两种方法都可以很好地工作。
xmq68pz92#
试试这个
尝试通过检查
loginUser
来使您的构建具有响应性k7fdbhmy3#
你试图实现的方式是不正确的,这里有一个很基本的例子要做