使用php、mysql在颤振应用程序的多屏幕中传递参数

使用php、mysql在颤振应用程序的多屏幕中传递参数,php,flutter,dart,Php,Flutter,Dart,登录页面代码 import 'package:carousel/UserDataDb.dart'; import 'package:flutter/material.dart'; import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:carousel/PortalPage.dart'; class LoginPage extends StatefulWidget { @overrid

登录页面代码

import 'package:carousel/UserDataDb.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:carousel/PortalPage.dart';


class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State {

  bool visible = false ;
  // Getting value from TextField widget.
  final emailController = TextEditingController();
  final passwordController = TextEditingController();

  Future userLogin() async{

    // Showing CircularProgressIndicator.
    setState(() {
      visible = true ;
    });
    // Getting value from Controller
    String email = emailController.text;
    String password = passwordController.text;

    // SERVER LOGIN API URL
    var url = 'http://helloflutter.com/test/login_user.php';
 // Store all data with Param Name.
    var data = {'email': email, 'password' : password};
   // print(data['password']);
    // Starting Web API Call.
    var response = await http.post(url, body: json.encode(data));

    // Getting Server response into variable.
    var message = jsonDecode(response.body);
    var dv_values=message.split('#');

    UserDataDb user=new UserDataDb(dv_values[1],dv_values[2],dv_values[3],dv_values[4]);

    // If the Response Message is Matched.
    if(dv_values[0]== 'gotit')
    {

      // Hiding the CircularProgressIndicator.
      setState(() {
        visible = false;
      });


      // Navigate to Profile Screen & Sending Email to Next Screen.
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => PortalPage(user:user))
     );
    }else{

      // If Email or Password did not Matched.
      // Hiding the CircularProgressIndicator.
      setState(() {
        visible = false;
      });
     // Showing Alert Dialog with Response JSON Message.
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: new Text(message),
            actions: <Widget>[
              FlatButton(
                child: new Text("OK"),
                onPressed: () {
                  Navigator.of(context).pop();
                },
              ),
            ],
          );
        },
      );}

  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar:  new AppBar(
          backgroundColor:Colors.white ,
          title:  new Center(child: new Text("SBOATWS", textAlign: TextAlign.center,style: TextStyle(color: Colors.redAccent),)),

        ),
        body: Container(
            decoration: BoxDecoration(
                gradient: LinearGradient(
                    begin: Alignment.topCenter,
                    end: Alignment.bottomCenter,
                    colors: [
                      Color.fromRGBO(255, 65, 108, 1.0),
                      Color.fromRGBO(255, 75, 73, 1.0)
                    ] )
            ),
            child: Center(
              child: Column(
                children: <Widget>[
                  Padding(
                      padding: const EdgeInsets.all(12.0),
                      child: Text('User Login Form',
                          style: TextStyle(fontSize: 21))),

                  Divider(),

                  Container(
                      width: 280,
                      padding: EdgeInsets.all(10.0),
                      child: TextField(
                        controller: emailController,
                        autocorrect: true,
                        decoration: InputDecoration(hintText: 'Enter Your User Id Here'),
                      )
                  ),

                  Container(
                      width: 280,
                      padding: EdgeInsets.all(10.0),
                      child: TextField(
                        controller: passwordController,
                        autocorrect: true,
                        obscureText: true,
                        decoration: InputDecoration(hintText: 'Enter Your Password Here'),
                      )
                  ),

                  RaisedButton(
                    onPressed: userLogin,
                    color: Colors.redAccent,
                    textColor: Colors.white,
                    padding: EdgeInsets.fromLTRB(9, 9, 9, 9),
                    child: Text('Login'),
                  ),


                  Visibility(
                      visible: visible,
                      child: Container(
                          margin: EdgeInsets.only(bottom: 30),
                          child: CircularProgressIndicator()
                      )
                  ),

                ],
              ),
            )));
  }
}
import'包:carousel/UserDataDb.dart';
进口“包装:颤振/材料.省道”;
导入“dart:convert”;
将“package:http/http.dart”导入为http;
导入“package:carousel/PortalPage.dart”;
类LoginPage扩展StatefulWidget{
@凌驾
_LoginPagentate createState()=>_LoginPagentate();
}
类_loginpagentate扩展状态{
bool可见=错误;
//从TextField小部件获取值。
最终emailController=TextEditingController();
最终密码控制器=TextEditingController();
Future userLogin()异步{
//显示循环压缩机指示器。
设置状态(){
可见=真实;
});
//从控制器获取值
字符串email=emailController.text;
字符串密码=passwordController.text;
//服务器登录API URL
var url='1〕http://helloflutter.com/test/login_user.php';
//使用参数名称存储所有数据。
var data={'email':email,'password':password};
//打印(数据['password']);
//正在启动Web API调用。
var response=wait http.post(url,body:json.encode(data));
//正在将服务器响应转换为变量。
var message=jsonDecode(response.body);
var dv_values=message.split(“#”);
UserDataDb user=newuserdatadb(dv_值[1],dv_值[2],dv_值[3],dv_值[4]);
//如果响应消息匹配。
如果(dv_值[0]='GoIt')
{
//隐藏循环压缩器指示器。
设置状态(){
可见=假;
});
//导航到配置文件屏幕并将电子邮件发送到下一屏幕。
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>PortalPage(用户:用户))
);
}否则{
//如果电子邮件或密码不匹配。
//隐藏循环压缩器指示器。
设置状态(){
可见=假;
});
//显示带有响应JSON消息的警报对话框。
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
标题:新文本(消息),
行动:[
扁平按钮(
子项:新文本(“确定”),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
},
);}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:新的appBar(
背景颜色:Colors.white,
标题:新中心(子项:新文本(“SBOATWS”,textAlign:textAlign.Center,style:TextStyle(颜色:Colors.redAccent)),
),
主体:容器(
装饰:盒子装饰(
梯度:线性梯度(
开始:Alignment.topCenter,
结束:对齐。底部中心,
颜色:[
颜色。来自RGBO(255,65,108,1.0),
颜色。来自RGBO(255,75,73,1.0)
] )
),
儿童:中心(
子:列(
儿童:[
填充物(
填充:常数边集全部(12.0),
子项:文本('用户登录表单',
样式:TextStyle(fontSize:21)),
分隔符(),
容器(
宽度:280,
填充:所有边缘设置(10.0),
孩子:TextField(
控制器:emailController,
自动更正:正确,
装饰:输入装饰(hintText:“在此处输入您的用户Id”),
)
),
容器(
宽度:280,
填充:所有边缘设置(10.0),
孩子:TextField(
控制器:密码控制器,
自动更正:正确,
蒙昧文字:对,
装饰:输入装饰(hintText:“在此处输入密码”),
)
),
升起的按钮(
onPressed:userLogin,
颜色:Colors.redAccent,
textColor:Colors.white,
填充:从LTRB(9,9,9,9)开始的边缘设置,
子项:文本('Login'),
),
可见度(
可见的,可见的,
子:容器(
页边距:仅限边集(底部:30),
子对象:循环进程指示器()
)
),
],
),
)));
}
}
门户页面代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:carousel/ProductsCarousel.dart';
import 'package:carousel/MyProfile.dart';
import 'package:carousel/LoginPage.dart';
import 'package:carousel/MyInvestment.dart';

import 'UserDataDb.dart';

class PortalPage extends StatefulWidget {

  final UserDataDb user;
  PortalPage({Key key, this.user}) : super(key: key);

  @override
  _PortalPageState createState() => _PortalPageState();
}

class _PortalPageState extends State<PortalPage> {
 // final String email;
  Offset _offset=Offset(0,0);
  GlobalKey _globalKey=GlobalKey();
  List<double> limits=[];
  bool ismenuopen=false;



  @override
  void initState() {
    limits=[0,0,0,0,0,0];

    WidgetsBinding.instance.addPostFrameCallback(getposition);
    super.initState();
  }

    getposition(duration)
    {
    RenderBox rb=_globalKey.currentContext.findRenderObject();
  final position=  rb.localToGlobal(Offset.zero);
    double start=position.dy-20;
    double constLimit=position.dy+rb.size.height-20;
    double step=(constLimit-start)/6;
    limits=[];
      for(double x=start;x<=constLimit;x=x+step)
        {
          limits.add(x);
        }
      setState(() {
        limits=limits;
      });
    }

    getfontsize(int indexbutton)
    {
      double size=(_offset.dy>limits[indexbutton] && _offset.dy<limits[indexbutton+1])?25:20;
      return size;
    }
  @override
  Widget build(BuildContext context) {
    //AssetImage useravatar = AssetImage('assets/bl.jpg');
    Size mediaQuery=MediaQuery.of(context).size;
    double sidebarwidth=mediaQuery.width * 0.65;
    double sidebarmenuheight=mediaQuery.height/2;
    var pic=widget.user.propic;
    return SafeArea(
      child: Scaffold(
        body: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(
              colors: [
                Color.fromRGBO(255, 65, 108, 1.0),
                Color.fromRGBO(255, 75, 73, 1.0)
              ] )
          ),
          width: mediaQuery.width,
          child: Stack(
            children: <Widget>[
              Center(
              //RathiN--bring profile image
                child: Center(
                  child: Column(
                    children: <Widget>[
                     
                      Text('Welcome to Home page',style: TextStyle(color: Colors.black87),)

                    ],
                  ),
                ),
              ),
              AnimatedPositioned(
                duration: Duration(milliseconds: 1500),
                left: ismenuopen?0:-sidebarwidth+20,
                top: 0,
                curve: Curves.elasticOut,
                child: SizedBox(
                  width: sidebarwidth,
                  child:GestureDetector(
                    onPanUpdate: (details){
                            if(details.localPosition.dx<=sidebarwidth)
                              {
                                setState(() {
                                  _offset=details.localPosition;
                                });
                              }
                            if(details.localPosition.dx>sidebarwidth+20 && details.delta.distanceSquared>2)
                              setState(() {
                                ismenuopen=true;
                              });

                    },
                    onPanEnd: (details){
                      _offset=Offset(0,0);
                    },
                  child: Stack(
                    children: <Widget>[
                      CustomPaint(
                        size: Size(sidebarwidth,mediaQuery.height),
                        painter:RathinPainter(offset: _offset) ,
                      ),
                      Container(
                        height: mediaQuery.height,
                        width: sidebarwidth,
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          mainAxisSize: MainAxisSize.max,
                          children: <Widget>[
                            Container(
                              height: mediaQuery.height*0.25,
                              child: Center(
                                child: Column(
                                  children: <Widget>[
                                    CircleAvatar(
                                      backgroundImage: NetworkImage(pic),
                                      radius: 50.0,
                                    ),
                                    SizedBox(
                                      height: 10.0,
                                    ),
                                    Text( widget.user.name.toString(),style: TextStyle(color: Colors.black87),),
                                    Text( " ( "+widget.user.job.toString()+" )",style: TextStyle(fontWeight:FontWeight.bold,color: Colors.redAccent,fontSize: 10.0),)
                                  ],
                                ),
                              ),

                            ),
                            Divider(thickness: 1,),
                            Container(
                              key: _globalKey,
                              width: double.infinity,
                              height: sidebarmenuheight,
                              child: Column(
                                children: <Widget>[
                                  MyButton(
                                    text:"Profile",
                                    iconData:Icons.person,
                                    textSize:getfontsize(0),
                                    height:(sidebarmenuheight)/5,
                                  ),
                                  MyButton(
                                    text:"Portfolio",
                                    iconData:Icons.redeem,
                                    textSize:getfontsize(1),
                                    height:(sidebarmenuheight)/5,
                                  ),
                                  MyButton(
                                    text:"Attendance",
                                    iconData:Icons.done_all,
                                    textSize:getfontsize(2),
                                    height:(sidebarmenuheight)/5,
                                  ),
                                  MyButton(
                                    text:"Applications",
                                    iconData:Icons.file_download,

                                    textSize:getfontsize(3),
                                    height:(sidebarmenuheight)/5,
                                  ),

                                  MyButton(
                                    text:"Logout",
                                    iconData:Icons.exit_to_app,
                                    textSize:getfontsize(4),
                                    height:(sidebarmenuheight)/5,
                                  ),
                                ],
                              ),
                            ),
                          ],

                        ),
                      ),
                      AnimatedPositioned
                        (
                              duration: Duration(milliseconds: 500),
                              right: (ismenuopen)?10:sidebarwidth,
                              bottom: 30,
                             child: IconButton(
                               enableFeedback: true,
                               icon: Icon(Icons.keyboard_backspace,color: Colors.redAccent,size: 30,),
                               onPressed: (){
                                 this.setState(() {
                                   ismenuopen=false;
                                 });
                               },
                             ),
                      ),
                    ],
                  ),
                  ),
                ),
              ),

            ],
          ),
        ),
      ),
    );
  }
}


class RathinPainter extends CustomPainter{
  final Offset offset;

  RathinPainter({this.offset});

  double getControlPointEx(double width){
    if(offset.dx==0){
      return width;
    }else{
      return offset.dx>width?offset.dx:width+75;
    }

  }
  @override
  void paint(Canvas canvas, Size size) {
    Paint p=Paint()..color=Colors.white..style= PaintingStyle.fill;
    Path path=Path();
    path.moveTo(-size.width, 0);
    path.lineTo(size.width, 0);
    path.quadraticBezierTo(getControlPointEx(size.width), offset.dy, size.width, size.height);
    path.lineTo(-size.width, size.height);
    path.close();
    canvas.drawPath(path, p);
    

  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
   return true;
  }
 
}


class MyButton extends StatelessWidget {
  final String text;
  final IconData iconData;
  final double textSize;
  final double height;

  MyButton(
      {
        this.text,
        this.iconData,
        this.textSize,
        this.height,
    }
      );


  @override
  Widget build(BuildContext context) {
    return MaterialButton(
      height: height,
      child: Row(
        mainAxisAlignment: MainAxisAlignment.start,
        mainAxisSize: MainAxisSize.max,
        children: <Widget>[
          Icon(
            iconData,
            color: Colors.black45,
          ),
          SizedBox(
            width: 10,
          ),
          Text(
            text,
            style: TextStyle(color: Colors.black45,fontSize: textSize),
          )
        ],
      ),
      onPressed: (){
        if(this.text=="Applications") {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => ProductsCarousel()),
          );
        }else  if(this.text=="Profile") {

          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => MyProfile()),
          );
        }//else if end
        else  if(this.text=="Portfolio") {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => MyInvestment()),
          );
        }//else if end
        else  if(this.text=="Logout") {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => LoginPage()),
          );
        }//else if end
       // print( this.text);
        },
    );
  }
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:carousel/PortalPage.dart';

import 'UserDataDb.dart';

class MyProfile extends StatelessWidget {



  var src="https://cdn.dnaindia.com/sites/default/files/styles/full/public/2018/08/21/721062-triptidimri-082218.jpg";
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Container(
            decoration: BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.topCenter,
                    end: Alignment.bottomCenter,
                    colors: [
                      Color.fromRGBO(255, 65, 108, 1.0),
                      Color.fromRGBO(255, 75, 73, 1.0)
                    ] )
            ),
            child: Container(
              width: double.infinity,
              height: 350.0,
              child: Center(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    CircleAvatar(
                      backgroundImage: NetworkImage(src),
                      radius: 50.0,
                    ),
                    SizedBox(
                      height: 10.0,
                    ),
                    Text("Dummy",
                    style:TextStyle(
                      fontSize: 22.0,fontFamily: "Verdaba",color: Colors.white,
                    ),
                    ),
                    SizedBox(
                      height: 10.0,
                    ),
                    Card(
                      margin: EdgeInsets.symmetric(horizontal: 20.0,vertical: 10.0),
                      clipBehavior: Clip.antiAlias,
                      color: Colors.white,
                      elevation: 8.0,

                      child: Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 20.0,vertical: 10.0),
                          child: Row(

                          children: <Widget>[
                            Expanded(
                              child: Column(
                                children: <Widget>[
                                Text("ID",
                                style:TextStyle(
                                  fontSize: 18.0,fontFamily: "Verdaba",color:Color.fromRGBO(199, 0, 57 , 0.9),fontWeight: FontWeight.bold,
                                ),
                                ),
                                  Text("Test",
                                    style:TextStyle(
                                      fontSize: 14.0,fontFamily: "Verdaba",color:Color.fromRGBO(144, 12, 63,1),fontWeight: FontWeight.bold,
                                    ),
                                  ),
                                ],
                              ),
                            ),
                            Expanded(
                              child: Column(
                                children: <Widget>[
                                  Text("Deposit",
                                    style:TextStyle(
                                      fontSize: 18.0,fontFamily: "Verdaba",color:Color.fromRGBO(199, 0, 57 , 0.9),fontWeight: FontWeight.bold,
                                    ),
                                  ),
                                  Text("77000",
                                    style:TextStyle(
                                      fontSize: 14.0,fontFamily: "Verdaba",color:Color.fromRGBO(144, 12, 63,1),fontWeight: FontWeight.bold,
                                    ),
                                  ),
                                ],
                              ),
                            ),
                            Expanded(
                              child: Column(
                                children: <Widget>[
                                  Text("Outstanding",
                                    style:TextStyle(
                                      fontSize: 18.0,fontFamily: "Verdaba",color:Color.fromRGBO(199, 0, 57 , 0.9),fontWeight: FontWeight.bold,
                                    ),
                                  ),
                                  Text("89000",
                                    style:TextStyle(
                                      fontSize: 14.0,fontFamily: "Verdaba",color:Color.fromRGBO(144, 12, 63,1),fontWeight: FontWeight.bold,
                                    ),
                                  ),
                                ],
                              ),
                            ),
                          ],
                        ),
                      ),
                    ),
                  ],


                ),
              ),
            ),
          ),
          //Second Part
          Container(
            child: Padding(
              padding: const EdgeInsets.symmetric(vertical: 30.0,horizontal: 16.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
               // mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text("About",
                    style:TextStyle(
                      fontSize: 14.0,fontFamily: "Verdaba",color:Color.fromRGBO(144, 12, 63,1),fontWeight: FontWeight.bold,
                    ),
                  ),
                  SizedBox(
                    height: 10.0,

                  ),
                  Text("Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae"),
                ],
              ),
            ),
          ),
          SizedBox(
            height: 10.0,

          ),
          Container(
           width: MediaQuery.of(context).size.width*.65,
            child: RaisedButton(
              onPressed: (){
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => PortalPage()),
                );
              },
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(50.0)
              ),
              elevation: 0.0,
              padding: EdgeInsets.all(8.0),
              child: Ink(
                decoration: BoxDecoration(
                    gradient: LinearGradient(
                        begin: Alignment.topCenter,
                        end: Alignment.bottomCenter,
                        colors: [
                          Color.fromRGBO(255, 65, 108, 1.0),
                          Color.fromRGBO(255, 75, 73, 1.0)
                        ] ),
                  borderRadius: BorderRadius.circular(10.0),

                ),
                child: Container(
                  constraints: BoxConstraints(
                    maxWidth: 300.0,
                    minHeight: 30.0,
                  ),
                  alignment: Alignment.center,
                  child: Text("Back",
                    style:TextStyle(
                      fontSize: 14.0,fontFamily: "Verdaba",color:Colors.white,fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
            ),
          ) ,
        ],
      ),
    );
  }
}
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“包装:旋转木马/产品旋转木马.dart”;
导入“package:carousel/MyProfile.dart”;
导入“包:carousel/LoginPage.dart”;
导入“包:carousel/MyInvestment.dart”;
导入“UserDataDb.dart”;
类PortalPage扩展StatefulWidget{
最终用户数据数据库用户;
PortalPage({Key-Key,this.user}):super(Key:Key);
@凌驾
_PortalPartate createState()=>\u PortalPartate();
}
类_portalPartate扩展状态{
//最终字符串电子邮件;
偏移量_Offset=偏移量(0,0);
GlobalKey _GlobalKey=GlobalKey();
列出限额=[];
bool-ismenuopen=false;
@凌驾
void initState(){
极限=[0,0,0,0,0,0];
WidgetsBinding.instance.addPostFrameCallback(getposition);
super.initState();
}
getposition(持续时间)
{
RenderBox rb=_globalKey.currentContext.FindEnderObject();
最终位置=rb.localToGlobal(偏移量为零);
双启动=位置dy-20;
双常数限值=位置.dy+rb.size.height-20;
双步骤=(恒限启动)/6;
限额=[];
对于(双x=开始;xlimits[indexbutton]&&&&&u offset.dy2)