我正在尝试用Flutter登录。我正在咨询Web服务。我想在Post请求的正文中发送来自不同TextFormField的用户名和密码。我怎样才能做到这一点?这是我一直在努力的代码。
import 'package:flutter/material.dart'; import 'package:device_id/device_id.dart'; import 'package:http/http.dart' as http; import 'dart:async'; import 'dart:convert'; class SignIn extends StatefulWidget { @override _SignInState createState() => _SignInState(); } class _SignInState extends State<SignIn> { Future<String> getData() async { final response = await http.post( Uri.encodeFull("The route i'm consulting), body: { "username": user, "password": password },
我想从此处的用户名和密码TextFormField检索输入文本
headers: { "Accept": "application/json", }); print(response.statusCode); print(response.body); } String _deviceid = 'Unknown'; String user = ''; String password = ''; TextEditingController controller = new TextEditingController(); TextEditingController controller2 = new TextEditingController(); @override void dispose() { controller.dispose(); controller2.dispose(); super.dispose(); } @override Widget build(BuildContext context) { username = TextFormField(
这是我要检索的第一个TextFormField,以在请求正文中发送
controller: controller, keyboardType: TextInputType.text, autofocus: false, decoration: InputDecoration( hintText: "Username", hintStyle: TextStyle(fontSize: 16.0), contentPadding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 10.0), border: UnderlineInputBorder(borderRadius: BorderRadius.circular(32.0))), ); final password = TextFormField(
这是我要检索的第二个TextFormField,以将其发送到请求的正文中
controller: controller2, autofocus: false, obscureText: true, decoration: InputDecoration( hintText: "Password", hintStyle: TextStyle(fontSize: 16.0), contentPadding: EdgeInsets.fromLTRB(20.0, 25.0, 20.0, 10.0), border: UnderlineInputBorder(borderRadius: BorderRadius.circular(32.0))), ); final loginButton = Padding( padding: EdgeInsets.symmetric(vertical: 25.0), child: Material( borderRadius: BorderRadius.circular(30.0), shadowColor: Colors.blueAccent.shade100, elevation: 10.0, child: MaterialButton( minWidth: 200.0, height: 42.0, color: Colors.blueAccent, onPressed: (){ }, child: Text( "Login", style: TextStyle(color: Colors.white), ), ), ), ); return Form( child: new Center( child: ListView( padding: EdgeInsets.only(left: 24.0, right: 24.0, top: 10.0), children: <Widget>[ username, SizedBox(height: 8.0), password, SizedBox(height: 24.0), loginButton ]), ), ); } }
请参阅检索文本字段的值。
StatefulWidget
TextEditingController
State
TextFormField
controller
myController.text
我不确定您是否也在询问如何发送HTTP发布请求。
这是一个非常小的示例:
class LoginScreen extends StatefulWidget { @override State<StatefulWidget> createState() => _LoginScreenState(); } class _LoginScreenState extends State<LoginScreen> { final _usernameController = TextEditingController(); final _passwordController = TextEditingController(); @override Widget build(BuildContext context) { return Column( children: <Widget>[ TextFormField(controller: _usernameController,), TextFormField(controller: _passwordController, obscureText: true,), RaisedButton( onPressed: _performLogin, child: Text('Login'), ) ], ); } void _performLogin() { String username = _usernameController.text; String password = _passwordController.text; print('login attempt: $username with $password'); } }