- 我正在尝试使用flutter和nodejs制作一个具有简单登录/注册功能的应用程序。
- 在Postman中,它可以发送请求
- 我在Chrome上运行它,它工作完美,但不能在Android Emmulator(和物理设备)中工作。
然后“我发现我必须和当地的主持人做些改变”,但是不知道是什么...
可能是个很初级的问题
main.dart
import 'package:frontend/signin.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: Signin(),
));
}
signin.dart
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:frontend/dashboard.dart';
import 'package:frontend/signup.dart';
import 'package:frontend/user.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:http/http.dart' as http;
class Signin extends StatefulWidget {
Signin({Key? key}) : super(key: key);
@override
State<Signin> createState() => _SigninState();
}
class _SigninState extends State<Signin> {
final _formKey = GlobalKey<FormState>();
Future save() async {
var res = await http.post(
"http://localhost:8080/signin",
// "http://10.0.2.2/signin",
headers: <String, String>{
"Context-Type": 'application.json;charSet=UTF-8'
},
body: <String, String>{
'email': user.email,
'password': user.password,
},
);
print(res.body);
Navigator.push(
context,
new MaterialPageRoute(builder: (context) => Dashboard()),
);
}
User user = User('', '');
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Stack(
children: [
Positioned(
top: 0,
child: SvgPicture.asset(
'images/top.svg',
width: 400,
height: 150,
)),
Container(
alignment: Alignment.center,
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(
height: 150,
),
Text(
'Signin',
style: GoogleFonts.pacifico(
fontWeight: FontWeight.bold,
fontSize: 50,
color: Colors.blue,
),
),
const SizedBox(
height: 25,
),
Padding(
padding: const EdgeInsets.all(16.0),
child: TextFormField(
controller: TextEditingController(text: user.email),
onChanged: (value) {
user.email = value;
},
validator: (value) {
if (value!.isEmpty) {
return 'Enter Something';
} else if (RegExp(
r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+")
.hasMatch(value)) {
return null;
} else {
return 'Enter Valid Email';
}
},
decoration: InputDecoration(
hintText: "Enter Email",
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.blue),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.blue),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.red),
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.red),
),
),
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: TextFormField(
controller: TextEditingController(text: user.email),
onChanged: (value) {
user.email = value;
},
validator: (value) {
if (value!.isEmpty) {
return 'Enter Something';
}
return null;
},
decoration: InputDecoration(
hintText: "Enter Password",
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.blue),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.blue),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.red),
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(color: Colors.red),
),
),
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
height: 50,
width: 400,
child: FlatButton(
color: Colors.blue,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16.0)),
onPressed: () {
if (_formKey.currentState!.validate()) {
save();
} else {
print("NOT OK");
}
},
child: const Text(
"SIGNIN",
style: TextStyle(color: Colors.white),
),
),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(65, 20, 0, 0),
child: Row(
children: [
const Text(
"not have account ? ",
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
),
),
InkWell(
onTap: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => Signup()));
},
child: const Text(
"Signup",
style: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.bold,
),
),
),
],
)),
],
),
),
)
],
),
),
);
}
}
user.dart
class User {
String email;
String password;
User(this.email, this.password);
}
index.js
const express = require("express");
const app = express();
const port = 8080 || process.env.PORT;
const cors = require("cors");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/mydb", {
// mongoose.connect("mongodb://10.0.2.2:27017/mydb", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use("/", require("./routes/user.route"));
app.listen(port, () => {
console.log("port is running on " + port);
});
谢谢你:)
1条答案
按热度按时间ep6jt1vc1#
尝试检查你的uri.而不是本地主机写你的ip地址