Dart 有没有一种方法可以让两个小部件在同一路线上以不同的方式显示,在不同的时间由一个按钮控制?
我正在实现一个登录界面,用户不必在页面/路径之间切换以注册或登录,但页面/路径保持不变,但登录和注册的内容会发生变化,因此如何控制单击登录时的登录内容和单击注册时的注册内容Dart 有没有一种方法可以让两个小部件在同一路线上以不同的方式显示,在不同的时间由一个按钮控制?,dart,flutter,flutter-layout,dart-pub,flutter-dependencies,Dart,Flutter,Flutter Layout,Dart Pub,Flutter Dependencies,我正在实现一个登录界面,用户不必在页面/路径之间切换以注册或登录,但页面/路径保持不变,但登录和注册的内容会发生变化,因此如何控制单击登录时的登录内容和单击注册时的注册内容 @覆盖 小部件构建(构建上下文){ 返回材料PP( 主题:主题数据( //主样本:颜色。白色, ), 家:脚手架( 主体:堆栈( fit:StackFit.expand, 儿童:[ 容器( //高度:MediaQuery.of(context).size.height, //宽度:MediaQuery.of(context
@覆盖
小部件构建(构建上下文){
返回材料PP(
主题:主题数据(
//主样本:颜色。白色,
),
家:脚手架(
主体:堆栈(
fit:StackFit.expand,
儿童:[
容器(
//高度:MediaQuery.of(context).size.height,
//宽度:MediaQuery.of(context).size.width,
高度:500.0,
宽度:400.0,
子:列(
儿童:[
大小盒子(
身高:80.0,
),
纵队(
儿童:[
圆形(
子项:文本(“徽标”),
背景颜色:Colors.blue,
),
文本(“口号”)
],
),
大小盒子(
身高:40.0,
),
划船(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
升起的按钮(
已按下:(){
设置状态(){
login=true;
});
},
子项:文本(“注册”),
),
大小盒子(
宽度:20.0,
),
升起的按钮(
已按下:(){
设置状态(){
登录=假;
});
},
子项:文本(“登录”),
)
],
),
大小盒子(
身高:20.0,
),
登录?注册():新登录(),
//新片段b()
],
),
)
],
),
),
);
}
类登录扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:颜色,紫色,
);
}
}
类注册扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:颜色,蓝色,
);
}
}
void main()=>runApp(MaterialApp(home:Scaffold)(appBar:appBar(title:Text(“title”)),body:HomePage());
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
bool_isLogin=false;
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
已展开(子项:_isLogin?SignupPage():LoginPage()),
居中(
孩子:升起按钮(
child:Text(“切换到${u isLogin?”登录名“:“注册”}”),
按下时:()=>设置状态(()=>_isLogin=!_isLogin),
),
),
垫片(),
],
);
}
}
类LoginPage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(颜色:Colors.blue,子对象:中心(子对象:文本(“登录页”));
}
}
类SignupPage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(颜色:Colors.teal,子对象:中心(子对象:文本(“注册页”));
}
}
输出:
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
// primarySwatch: Colors.white,
),
home: Scaffold(
body: Stack(
fit: StackFit.expand,
children: <Widget>[
Container(
// height: MediaQuery.of(context).size.height,
// width: MediaQuery.of(context).size.width,
height: 500.0,
width: 400.0,
child: Column(
children: <Widget>[
SizedBox(
height: 80.0,
),
Column(
children: <Widget>[
CircleAvatar(
child: Text("Logo"),
backgroundColor: Colors.blue,
),
Text("Slogan")
],
),
SizedBox(
height: 40.0,
),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
onPressed: () {
setState(() {
login = true;
});
},
child: Text("SignUp"),
),
SizedBox(
width: 20.0,
),
RaisedButton(
onPressed: () {
setState(() {
login = false;
});
},
child: Text("Login"),
)
],
),
SizedBox(
height: 20.0,
),
login ? Signup() : new Login(),
// new FragmentB()
],
),
)
],
),
),
);
}
class Login extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.purple,
);
}
}
class Signup extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.blue,
);
}
}
void main() => runApp(MaterialApp(home: Scaffold(appBar: AppBar(title: Text("Title")), body: HomePage())));
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool _isLogin = false;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Expanded(child: _isLogin ? SignupPage() : LoginPage()),
Center(
child: RaisedButton(
child: Text("Switch to ${_isLogin ? "Login" : "Sign up"}"),
onPressed: () => setState(() => _isLogin = !_isLogin),
),
),
Spacer(),
],
);
}
}
class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(color: Colors.blue, child: Center(child: Text("Login page")));
}
}
class SignupPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(color: Colors.teal, child: Center(child: Text("Sign up page")));
}
}