Flutter - 在定义的上下文中面临问题,构建上下文
Flutter - facing issue on defined context, build context
我刚接触 Flutter 一个月。目前我面临以下显示未定义名称 'context' 的问题。我已按照建议导入 'dart:js',但它显示错误“参数类型 'JsObject' 无法分配给参数类型 'BuildContext'。”
import 'package:dparking/reusable_widgets/reusable_widget.dart';
import 'package:dparking/screens/signup_screen.dart';
import 'package:flutter/material.dart';
class SignInScreen extends StatefulWidget {
const SignInScreen({Key? key}) : super(key: key);
@override
State<SignInScreen> createState() => _SignInScreenState();
}
class _SignInScreenState extends State<SignInScreen> {
final TextEditingController _passwordTextController = TextEditingController();
final TextEditingController _emailTextController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(colors: [
Colors.blue,
Colors.green,
], begin: Alignment.topCenter, end: Alignment.bottomCenter)),
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.fromLTRB(
20, MediaQuery.of(context).size.height * 0.2, 20, 0),
child: Column(
children: <Widget>[
logoWidget("assets/images/DParking.png"),
const SizedBox(
height: 30,
),
reusableTextField("Enter UserName", Icons.person_outline, false,
_emailTextController),
const SizedBox(
height: 20,
),
reusableTextField("Enter Password", Icons.lock_outline, true,
_passwordTextController),
const SizedBox(
height: 20,
),
signInSignUpButton(context, true, () {}),
signUpOption()
],
),
),
),
),
);
}
}
Row signUpOption() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("Don't have account?",
style: TextStyle(color: Colors.white70)),
GestureDetector(
onTap: () {
Navigator.push(context, //<- error on this line
MaterialPageRoute(builder: (context) => SignUpScreen()));
},
child: const Text(
" Sign Up",
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
)
],
);
}
请给我一些关于如何解决这个问题的建议。谢谢。
您应该将 context
作为 signUpOption
参数传递。
signUpOption(context)
],
...
Row signUpOption(BuildContext context) {
...
}
或将函数移动到 _SignInScreenState
class 以使用 State
的 context
。
我刚接触 Flutter 一个月。目前我面临以下显示未定义名称 'context' 的问题。我已按照建议导入 'dart:js',但它显示错误“参数类型 'JsObject' 无法分配给参数类型 'BuildContext'。”
import 'package:dparking/reusable_widgets/reusable_widget.dart';
import 'package:dparking/screens/signup_screen.dart';
import 'package:flutter/material.dart';
class SignInScreen extends StatefulWidget {
const SignInScreen({Key? key}) : super(key: key);
@override
State<SignInScreen> createState() => _SignInScreenState();
}
class _SignInScreenState extends State<SignInScreen> {
final TextEditingController _passwordTextController = TextEditingController();
final TextEditingController _emailTextController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(colors: [
Colors.blue,
Colors.green,
], begin: Alignment.topCenter, end: Alignment.bottomCenter)),
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.fromLTRB(
20, MediaQuery.of(context).size.height * 0.2, 20, 0),
child: Column(
children: <Widget>[
logoWidget("assets/images/DParking.png"),
const SizedBox(
height: 30,
),
reusableTextField("Enter UserName", Icons.person_outline, false,
_emailTextController),
const SizedBox(
height: 20,
),
reusableTextField("Enter Password", Icons.lock_outline, true,
_passwordTextController),
const SizedBox(
height: 20,
),
signInSignUpButton(context, true, () {}),
signUpOption()
],
),
),
),
),
);
}
}
Row signUpOption() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("Don't have account?",
style: TextStyle(color: Colors.white70)),
GestureDetector(
onTap: () {
Navigator.push(context, //<- error on this line
MaterialPageRoute(builder: (context) => SignUpScreen()));
},
child: const Text(
" Sign Up",
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
)
],
);
}
请给我一些关于如何解决这个问题的建议。谢谢。
您应该将 context
作为 signUpOption
参数传递。
signUpOption(context)
],
...
Row signUpOption(BuildContext context) {
...
}
或将函数移动到 _SignInScreenState
class 以使用 State
的 context
。