daxu0403 7 gadi atpakaļ
vecāks
revīzija
32a5010cb3

BIN
.DS_Store


+ 1 - 1
.gitignore

@@ -1,3 +1,3 @@
 /android/*
 /ios/*
-/bulid/*
+/build/*

+ 16 - 0
README.md

@@ -0,0 +1,16 @@
+# logistics_client
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://flutter.io/docs/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://flutter.io/docs/cookbook)
+
+For help getting started with Flutter, view our 
+[online documentation](https://flutter.io/docs), which offers tutorials, 
+samples, guidance on mobile development, and a full API reference.

+ 89 - 0
lib/home_page.dart

@@ -0,0 +1,89 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'pages/order_taking_page.dart';
+import 'pages/order_management_page.dart';
+import 'pages/send_express_page.dart';
+import 'pages/my_page.dart';
+
+class HomePage extends StatefulWidget {
+  final Widget child;
+
+  HomePage({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _HomePageState createState() => _HomePageState();
+}
+
+class _HomePageState extends State < HomePage > with SingleTickerProviderStateMixin{
+  
+   TabController _controller;
+  int _currentIndex = 0;
+  List<Widget> pageList =[
+    OrderTakingPage(),
+    OrderManagementPage(),
+    SendExpressPage(),
+    MyPage()
+  ];
+
+  @override
+  void initState() {
+    super.initState();
+     _controller = TabController(length: pageList.length, vsync: this);
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return 
+      Scaffold(
+        body: TabBarView(
+          physics: NeverScrollableScrollPhysics(), //禁止滚动
+          controller: _controller,
+          children: [
+             OrderTakingPage(),
+              OrderManagementPage(),
+              SendExpressPage(),
+              MyPage()
+          ]),
+        bottomNavigationBar: BottomNavigationBar(
+          currentIndex: _currentIndex,
+          type: BottomNavigationBarType.fixed,
+          items:[
+            BottomNavigationBarItem(
+              icon: Image.asset('lib/images/icon_jiedan.png',scale: 1.6,),
+              title: Text('接单',style: TextStyle(color:_currentIndex==0?Color.fromRGBO(64, 98, 254, 1):Colors.grey,fontSize: ScreenUtil.getInstance().setSp(20)),),
+              activeIcon: Image.asset('lib/images/icon_jiedan01.png',scale: 1.6)
+            ),
+            BottomNavigationBarItem(
+               icon: Image.asset('lib/images/icon_dingdan.png',scale: 1.6),
+              title: Text('订单管理',style: TextStyle(color:_currentIndex==1?Color.fromRGBO(64, 98, 254, 1):Colors.grey,fontSize: ScreenUtil.getInstance().setSp(20)),),
+              activeIcon: Image.asset('lib/images/icon_dingdan01.png',scale: 1.6)
+            ),
+            BottomNavigationBarItem(
+               icon: Image.asset('lib/images/icon_fajian.png',scale: 1.6),
+              title: Text('发件',style: TextStyle(color:_currentIndex==2?Color.fromRGBO(64, 98, 254, 1):Colors.grey,fontSize: ScreenUtil.getInstance().setSp(20)),),
+              activeIcon: Image.asset('lib/images/icon_fajian01.png',scale: 1.6)
+            ),
+            BottomNavigationBarItem(
+               icon: Image.asset('lib/images/icon_wode.png',scale: 1.6),
+              title: Text('我的',style: TextStyle(color:_currentIndex==3?Color.fromRGBO(64, 98, 254, 1):Colors.grey,fontSize: ScreenUtil.getInstance().setSp(20)),),
+              activeIcon: Image.asset('lib/images/icon_wode01.png',scale: 1.6)
+            ),
+          ],
+          onTap: (index){
+            setState(() {
+              _currentIndex = index;
+            });
+            // if(_currentIndex==2){
+            //    Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
+            //       return SendExpressPage();
+            //     }));
+            // }else{
+               _controller.animateTo(_currentIndex);
+            //}
+          },
+        ),
+      );
+  }
+}

BIN
lib/images/.DS_Store


BIN
lib/images/icon_dayinji.png


BIN
lib/images/icon_dingdan.png


BIN
lib/images/icon_dingdan01.png


BIN
lib/images/icon_fajian.png


BIN
lib/images/icon_fajian01.png


BIN
lib/images/icon_huowu.png


BIN
lib/images/icon_jiedan.png


BIN
lib/images/icon_jiedan01.png


BIN
lib/images/icon_logo.png


BIN
lib/images/icon_mimas.png


BIN
lib/images/icon_saoyisao.png


BIN
lib/images/icon_send.png


BIN
lib/images/icon_shaixuan.png


BIN
lib/images/icon_shoujian.png


BIN
lib/images/icon_wode.png


BIN
lib/images/icon_wode01.png


BIN
lib/images/icon_zhandianss.png


BIN
lib/images/start_page.png


+ 111 - 0
lib/login_page.dart

@@ -0,0 +1,111 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'home_page.dart';
+import 'util/api.dart';
+
+
+class LoginPage extends StatefulWidget {
+
+  LoginPage({
+    Key key,
+  }): super(key: key);
+
+  _LoginPageState createState() => _LoginPageState();
+}
+
+class _LoginPageState extends State < LoginPage > {
+
+  String phone;
+  String password;
+  @override
+  void initState() {
+    // TODO: implement initState
+    super.initState();
+    getData();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    ScreenUtil.instance = ScreenUtil(width: 750, height: 1334,allowFontScaling:false)..init(context);
+    return Scaffold(
+      body: Container(
+        color: Colors.white,
+        child: ListView(
+          children: < Widget > [
+            Container(
+            padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(55), 0, ScreenUtil.getInstance().setHeight(55), 0),
+              child: Column(
+                children: < Widget > [
+                  Padding(
+                    padding: EdgeInsets.fromLTRB(0, ScreenUtil.getInstance().setHeight(150), 0, ScreenUtil.getInstance().setHeight(60)),
+                    child: Center(
+                      child: Image.asset(
+                        'lib/images/icon_logo.png',
+                        width: ScreenUtil.getInstance().setWidth(210),
+                        height: ScreenUtil.getInstance().setHeight(210),
+                        fit: BoxFit.cover,
+                      ),
+                    ),
+                  ),
+                  Padding(
+                    padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(60)),
+                    child: TextField(
+                      keyboardType: TextInputType.phone,
+                      decoration: InputDecoration(
+                        border: UnderlineInputBorder(),
+                        hintText: "请输入手机号",
+                        hintStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32), color: Color.fromRGBO(155, 155, 155, 1)),
+                      ),
+                      onChanged: (value){
+                        setState(() {
+                          phone = value;
+                        });
+                        print(phone);
+                      },
+                    ),
+                  ),
+                  Padding(
+                    padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(125)),
+                    child: TextField(
+                      cursorColor: Color.fromRGBO(153, 153, 153, 0.5),
+                      keyboardType: TextInputType.text,
+                      obscureText:true,
+                      decoration: InputDecoration(
+                        hintText: "请输入密码",
+                        hintStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32), color: Color.fromRGBO(155, 155, 155, 1)),
+                      ),
+                      onChanged: (value){
+                        setState(() {
+                          password =value;
+                        });
+                        print(password);
+                        print('111');
+                      },
+                    )
+                  ),
+                  GestureDetector(
+                    child: Container(
+                      height: ScreenUtil.getInstance().setHeight(100),
+                      decoration: BoxDecoration(
+                        color: Color.fromRGBO(64, 98, 254, 1),
+                        borderRadius: BorderRadius.circular(4),
+                      ),
+                      child: Center(
+                        child: Text('登录', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36), color: Colors.white)),
+                      ),
+                    ),
+                    onTap: () {
+                      Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
+                        return HomePage();
+                      }));
+                    },
+                  )
+                ],
+              ),
+            )
+          ],
+        ),
+      ),
+    );
+  }
+}

+ 18 - 0
lib/main.dart

@@ -0,0 +1,18 @@
+import 'package:flutter/material.dart';
+//import 'home_page.dart';
+import 'login_page.dart';
+void main()=>runApp(MyApp());
+
+class MyApp extends StatelessWidget {
+  final Widget child;
+  MyApp({Key key, this.child}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return MaterialApp(
+      debugShowCheckedModeBanner: false,
+      //debugShowMaterialGrid:true,
+      home: LoginPage(),
+    );
+  }
+}

+ 232 - 0
lib/pages/my_page.dart

@@ -0,0 +1,232 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'my_page/revise_password_page.dart';
+
+
+class MyPage extends StatefulWidget {
+  final Widget child;
+
+  MyPage({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _MyPageState createState() => _MyPageState();
+}
+
+class _MyPageState extends State < MyPage > with AutomaticKeepAliveClientMixin{
+  bool check = false;
+  @override
+  bool get wantKeepAlive => true;
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      child: Scaffold(
+        appBar: AppBar(
+          elevation: 0,
+          title: Text('我的',
+            style: TextStyle(
+              fontSize: ScreenUtil.getInstance().setSp(36)
+            ), ),
+          centerTitle: true,
+          backgroundColor: Color.fromRGBO(64, 98, 254, 1),
+        ),
+        body: Container(
+          color: Color.fromRGBO(246, 246, 254, 1),
+          child: Column(
+            children: < Widget > [
+              _avatarWidget(),
+              _funWrapWidget(check)
+            ],
+          ),
+        ),
+      )
+    );
+  }
+
+  Widget _avatarWidget() {
+    return Container(
+      color: Color.fromRGBO(64, 98, 254, 1),
+      padding: EdgeInsets.fromLTRB(0, ScreenUtil.getInstance().setHeight(59), 0, ScreenUtil.getInstance().setHeight(67), ),
+      child: Column(
+        children: < Widget > [
+          Center(
+            child: Padding(
+              padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setWidth(24), ),
+              child: ClipOval(
+                child: Image.network('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1551526964140&di=5c6270bf8b43e9ce83427b01da959481&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D3327849645%2C2696105688%26fm%3D214%26gp%3D0.jpg',
+                  fit: BoxFit.cover,
+                  width: ScreenUtil.getInstance().setWidth(120),
+                  height: ScreenUtil.getInstance().setWidth(120), ),
+              )
+
+            )
+          ),
+          Center(child: Text('Alisa Lin', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(255, 255, 255, 1)), ), )
+        ],
+      ),
+    );
+  }
+
+  Widget _funWrapWidget(bool check) {
+    return Container(
+      padding: EdgeInsets.only(top: ScreenUtil.getInstance().setHeight(20)),
+      child: Column(
+        children: < Widget > [
+          _switchSite(),
+          _passWordWidget(),
+          _linkPrint(check)
+        ],
+      ),
+    );
+  }
+
+  Widget _switchSite() {
+    return Container(
+      height: ScreenUtil.getInstance().setHeight(90),
+      color: Colors.white,
+      padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(30), 0, 0, 0),
+      child: Column(
+        children: < Widget > [
+          Expanded(
+            child: Center(
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: < Widget > [
+                  Expanded(
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.start,
+                      children: < Widget > [
+                        Padding(
+                          padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(22)),
+                          child: Image.asset('lib/images/icon_zhandianss.png',
+                            width: ScreenUtil.getInstance().setWidth(30),
+                            height: ScreenUtil.getInstance().setHeight(34),
+                          )
+                        ),
+                        Text('站点切换', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+                      ],
+                    ),
+                  ),
+                  Expanded(
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.end,
+                      children: < Widget > [
+                        Text('大兴站点', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(153, 153, 153, 1)), ),
+                        Icon(Icons.keyboard_arrow_right, color: Color.fromRGBO(199, 199, 204, 1))
+                      ],
+                    ),
+                  ),
+                ],
+              ),
+            ),
+          ),
+          Expanded(
+            flex: 0,
+            child: _underLine(),
+          )
+        ],
+      )
+    );
+  }
+
+  Widget _underLine() {
+    return Container(
+      height: ScreenUtil.getInstance().setHeight(1),
+      color: Color.fromRGBO(223, 223, 223, 1),
+    );
+  }
+
+  Widget _passWordWidget() {
+    return
+    GestureDetector(
+      child: Container(
+        height: ScreenUtil.getInstance().setHeight(90),
+        color: Colors.white,
+        padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(30), 0, 0, 0),
+        child: Column(
+          children: < Widget > [
+            Expanded(
+              child: Center(
+                child: Row(
+                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                  children: < Widget > [
+                    Expanded(
+                      child: Row(
+                        mainAxisAlignment: MainAxisAlignment.start,
+                        children: < Widget > [
+                          Padding(
+                            padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(22)),
+                            child: Image.asset('lib/images/icon_mimas.png',
+                              width: ScreenUtil.getInstance().setWidth(30),
+                              height: ScreenUtil.getInstance().setHeight(34),
+                            )
+                          ),
+                          Text('修改密码', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+                        ],
+                      ),
+                    ),
+                    Icon(Icons.keyboard_arrow_right, color: Color.fromRGBO(199, 199, 204, 1))
+                  ],
+                ),
+              ),
+            )
+          ],
+        )
+      ),
+      onTap: () {
+        Navigator.push(context, MaterialPageRoute(builder: (context) {
+          return RevisePasswordPage();
+        }));
+      },
+    );
+  }
+
+  Widget _linkPrint(bool check) {
+    return Container(
+      height: ScreenUtil.getInstance().setHeight(90),
+      color: Colors.white,
+      padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(30), 0, 0, 0),
+      margin: EdgeInsets.only(top: ScreenUtil.getInstance().setHeight(20)),
+      child: Column(
+        children: < Widget > [
+          Expanded(
+            child: Center(
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: < Widget > [
+                  Expanded(
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.start,
+                      children: < Widget > [
+                        Padding(
+                          padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(22)),
+                          child: Image.asset('lib/images/icon_dayinji.png',
+                            width: ScreenUtil.getInstance().setWidth(30),
+                            height: ScreenUtil.getInstance().setHeight(34),
+                          )
+                        ),
+                        Text('打印机连接', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+                      ],
+                    ),
+                  ),
+                  Switch(
+                    value: this.check,
+                    activeColor: Colors.blue,
+                    onChanged: (bool val) {
+                      print("val:${val}");
+                      this.setState(() {
+                        this.check = val;
+                      });
+                       print('check:${this.check}');
+                    },
+                  )
+                ],
+              ),
+            ),
+          )
+        ],
+      )
+    );
+  }
+}

+ 74 - 0
lib/pages/my_page/revise_password_page.dart

@@ -0,0 +1,74 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+
+class RevisePasswordPage extends StatefulWidget {
+  final Widget child;
+
+  RevisePasswordPage({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _RevisePasswordPageState createState() => _RevisePasswordPageState();
+}
+
+class _RevisePasswordPageState extends State < RevisePasswordPage > {
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        elevation: 0,
+        title: Text('修改密码',
+          style: TextStyle(
+            fontSize: ScreenUtil.getInstance().setSp(36)
+          ), ),
+        centerTitle: true,
+        backgroundColor: Color.fromRGBO(64, 98, 254, 1),
+      ),
+      body: Container(
+        color: Colors.white,
+        child: Column(
+          children: < Widget > [
+            Container(
+              padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(55), ScreenUtil.getInstance().setHeight(150), ScreenUtil.getInstance().setHeight(55), 0),
+              child: Column(
+                children: < Widget > [
+                  Padding(
+                    padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(60)),
+                    child: TextField(
+                      decoration: InputDecoration(
+                        border: UnderlineInputBorder(),
+                        hintText: "请输入旧密码",
+                        hintStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32), color: Color.fromRGBO(155, 155, 155, 1)),
+                      ),
+                    ),
+                  ),
+                  Padding(
+                    padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(125)),
+                    child:TextField(
+                    cursorColor: Color.fromRGBO(153, 153, 153, 0.5),
+                    decoration: InputDecoration(
+                      hintText: "请输入新密码",
+                      hintStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32), color: Color.fromRGBO(155, 155, 155, 1)),
+                    ),
+                  )
+                  ),
+                  Container(
+                    height: ScreenUtil.getInstance().setHeight(100),
+                    decoration: BoxDecoration(
+                      color: Color.fromRGBO(64,98,254,1),
+                      borderRadius: BorderRadius.circular(4),
+                    ),
+                    child: Center(
+                      child: Text('确认',style:TextStyle(fontSize:ScreenUtil.getInstance().setSp(36),color: Colors.white )),
+                    ),
+                  ), 
+                ],
+              ),
+            )
+          ],
+        ),
+      ),
+    );
+  }
+}

+ 277 - 0
lib/pages/order_management_page.dart

@@ -0,0 +1,277 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'order_management_page/order_detail_page.dart';
+
+class OrderManagementPage extends StatefulWidget {
+  final Widget child;
+
+  OrderManagementPage({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _OrderManagementPageState createState() => _OrderManagementPageState();
+}
+
+class _OrderManagementPageState extends State < OrderManagementPage > with AutomaticKeepAliveClientMixin {
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      child: Scaffold(
+        appBar: AppBar(
+          title: Text('订单管理', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36)), ),
+          centerTitle: true,
+          backgroundColor: Color.fromRGBO(64, 98, 254, 1),
+          // actions: < Widget > [
+          //   IconButton(
+          //     icon: Icon(Icons.add_circle_outline),
+          //     onPressed: () {},
+          //   )
+          // ],
+        ),
+        body: Container(
+          decoration: BoxDecoration(
+            color: Color.fromRGBO(246, 246, 254, 1)
+          ),
+          child: QueryWidget()
+
+        ),
+        resizeToAvoidBottomPadding: false //键盘弹出,页面不跟随向上滑动,防止出现溢出错误
+      )
+    );
+  }
+  @override
+  bool get wantKeepAlive => true;
+}
+
+class QueryWidget extends StatefulWidget { //搜索栏
+  final Widget child;
+
+  QueryWidget({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _QueryWidgetState createState() => _QueryWidgetState();
+}
+
+class _QueryWidgetState extends State < QueryWidget > {
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      child: Column(
+        children: < Widget > [
+          Container(
+            color: Colors.white,
+            height: ScreenUtil.getInstance().setHeight(222),
+            padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(20), ScreenUtil.getInstance().setWidth(20), ScreenUtil.getInstance().setWidth(20), 0),
+            child: Column(
+              children: < Widget > [
+                Container(
+                  height: ScreenUtil.getInstance().setHeight(100),
+                  decoration: BoxDecoration(
+                    border: Border.all(color: Color.fromRGBO(204, 204, 204, 1), width: 1),
+                    borderRadius: BorderRadius.all(Radius.circular(5))
+                  ),
+                  child: Row(
+                    children: < Widget > [
+                      Expanded(
+                        child: TextField(
+                          keyboardType: TextInputType.number,
+                          decoration: InputDecoration(
+                            border: InputBorder.none,
+                            hintText: "输入运单号查询物流",
+                            hintStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(26), color: Color.fromRGBO(155, 155, 155, 1)),
+                            contentPadding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(30), 0, ScreenUtil.getInstance().setWidth(30), 0)
+                          ),
+                        ),
+                      ),
+                      IconButton(
+                        icon: Image.asset('lib/images/icon_saoyisao.png',
+                          width: ScreenUtil.getInstance().setWidth(38),
+                          height: ScreenUtil.getInstance().setHeight(36),
+                        ),
+                        onPressed: () {},
+                      ),
+                      GestureDetector(
+                        child: Container(
+                          width: ScreenUtil.getInstance().setWidth(120),
+                          decoration: BoxDecoration(
+                            border: Border(left: BorderSide.merge(BorderSide(color: Color.fromRGBO(204, 204, 204, 1), width: 1), BorderSide(color: Color.fromRGBO(204, 204, 204, 1), width: 0)), )
+                          ),
+                          child: Center(
+                            child: Text("查询", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(26), color: Color.fromRGBO(64, 98, 254, 1)), ),
+                          ),
+                        ),
+                        onTap: () {
+                          print("查询");
+                        }
+                      ),
+                    ],
+                  ),
+                ),
+                Container(
+                  height: ScreenUtil.getInstance().setHeight(100),
+                  child: Container(
+                    padding: EdgeInsets.only(top: ScreenUtil.getInstance().setHeight(25)),
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceAround,
+                      children: < Widget > [
+                        Container(
+                          height: ScreenUtil.getInstance().setHeight(80),
+                          decoration: BoxDecoration(
+                            border: Border(bottom: BorderSide.merge(BorderSide(color: Colors.black, width: 1), BorderSide(color: Colors.black, width: 0)), )
+                          ),
+                          child: Center(
+                            child: Text("待取件", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30)), ),
+                          )
+                        ),
+                        Container(
+                          height: ScreenUtil.getInstance().setHeight(80),
+                          decoration: BoxDecoration(
+                            border: Border()
+                          ),
+                          child: Center(
+                            child: Text("运途中", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(155, 155, 155, 1)), ),
+                          )
+                        ),
+                        Container(
+                          height: ScreenUtil.getInstance().setHeight(80),
+                          decoration: BoxDecoration(
+                            border: Border()
+                          ),
+                          child: Center(
+                            child: Text("已完成", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(155, 155, 155, 1)), ),
+                          )
+                        ),
+                      ],
+                    )
+                  )
+                ),
+              ],
+            )
+          ),
+          Expanded(
+            child: Container(
+              padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(20), ScreenUtil.getInstance().setWidth(20), ScreenUtil.getInstance().setWidth(20), 0),
+              child: ListView(
+                children: < Widget > [
+                  _cardWiget(),
+                  _cardWiget(),
+                  _cardWiget(),
+                ],
+              ),
+            ),
+          )
+        ],
+      )
+    );
+  }
+  Widget _cardWiget() {
+    return GestureDetector(
+      child: Card(
+        color: Colors.white,
+        child: Container(
+          padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(20)),
+          child: Column(
+            children: < Widget > [
+              Padding(
+                padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(30)),
+                child: Row(
+                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                  children: < Widget > [
+                    Text('订单号:10893477897899', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(102, 102, 102, 1)), ),
+                    Text("待取货", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(126, 211, 33, 1)), ),
+                  ],
+                )
+              ),
+              Padding(
+                padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+                child: Row(
+                  children: < Widget > [
+                    Text('朝阳门大阳汽贸 --> 香河汽修厂', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30)), ),
+                  ],
+                )
+              ),
+              Padding(
+                padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(15)),
+                child: Row(
+                  children: < Widget > [
+                    SizedBox(
+                      width: ScreenUtil.getInstance().setWidth(355),
+                      child: Text('货物名称:汽车轮胎', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(155, 155, 155, 1)), ),
+                    ),
+                    Text('代收款:2800元', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(155, 155, 155, 1)), ),
+                  ],
+                ),
+              ),
+              Padding(
+                padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(30)),
+                child: Row(
+                  children: < Widget > [
+                    SizedBox(
+                      width: ScreenUtil.getInstance().setWidth(355),
+                      child: Text('货物件数:4件', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(155, 155, 155, 1)), ),
+                    ),
+                    Text('运费:280元', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(155, 155, 155, 1)), ),
+                  ],
+                ),
+              ),
+              Padding(
+                padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+                child: Container(
+                  height: ScreenUtil.getInstance().setHeight(1),
+                  color: Color.fromRGBO(223, 223, 223, 1),
+                ),
+              ),
+              Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: < Widget > [
+                  GestureDetector(
+                    child: Container(
+                      width: ScreenUtil.getInstance().setWidth(94),
+                      height: ScreenUtil.getInstance().setHeight(48),
+                      decoration: BoxDecoration(
+                        color: Color.fromRGBO(239, 243, 249, 1),
+                        borderRadius: BorderRadius.all(Radius.circular(4.0))
+                      ),
+                      child: Center(
+                        child: Text('作废', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(64, 98, 254, 1))),
+                      ),
+                    ),
+                    onTap: () {
+                      print("作废");
+                    },
+                  ),
+                  GestureDetector(
+                    child: Container(
+                      width: ScreenUtil.getInstance().setWidth(94),
+                      height: ScreenUtil.getInstance().setHeight(48),
+                      decoration: BoxDecoration(
+                        color: Color.fromRGBO(239, 243, 249, 1),
+                        borderRadius: BorderRadius.all(Radius.circular(4.0))
+                      ),
+                      child: Center(
+                        child: Text('寄件', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(64, 98, 254, 1))),
+                      ),
+                    ),
+                    onTap: () {
+                      print("寄件");
+                    },
+                  )
+
+                ],
+              )
+            ],
+          ),
+        )
+      ),
+      onTap: () {
+        Navigator.push(context, MaterialPageRoute(builder: (context) {
+          return OrderDetailPage(orderId: 123456, );
+        }));
+      },
+    );
+  }
+}

+ 313 - 0
lib/pages/order_management_page/order_detail_page.dart

@@ -0,0 +1,313 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+
+class OrderDetailPage extends StatefulWidget {
+  final int orderId;
+
+  OrderDetailPage({
+    Key key,
+    @required this.orderId
+  }): super(key: key);
+
+  _OrderDetailPageState createState() => _OrderDetailPageState();
+}
+
+class _OrderDetailPageState extends State < OrderDetailPage > {
+
+  final Map < Object,
+  String > sendInfo = {
+    "icon": 'lib/images/icon_send.png',
+    "title": "发件信息",
+    "phone": "010-8788 6890",
+    "code": "345678",
+    "name": "朝阳门大阳汽贸",
+    "address": "北京市朝阳区",
+    "addressDetail": "朝阳门外大街28号"
+  };
+
+  final Map < Object,
+  String > getInfo = {
+    "icon": 'lib/images/icon_shoujian.png',
+    "title": "收件信息",
+    "name": "香河汽修厂",
+    "phone": "010-6734 3426",
+    "address": "河北省廊坊市",
+    "addressDetail": "香河县东大街29号院18栋3单元206"
+  };
+
+  @override
+  void initState() {
+    super.initState();
+    //print(sendInfo.title);
+  }
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: Text("订单详情", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36)), ),
+        centerTitle: true,
+        backgroundColor: Color.fromRGBO(64, 98, 254, 1),
+      ),
+      body: Container(
+        padding: EdgeInsets.fromLTRB(0, ScreenUtil.getInstance().setHeight(20), 0, ScreenUtil.getInstance().setHeight(20)),
+        color: Color.fromRGBO(246, 246, 254, 1),
+        child: ListView(
+          children: < Widget > [
+            _sendInfo(sendInfo),
+            _getInfo(getInfo),
+            ItemInfoWidget(),
+            submitBtn()
+          ],
+        )
+      ),
+      //resizeToAvoidBottomPadding: false //键盘弹出,页面不跟随向上滑动,防止出现溢出错误
+    );
+  }
+
+  Widget _sendInfo(Map str) {
+    return Container(
+      color: Colors.white,
+      margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+      child: Column(
+        children: < Widget > [
+          titleWidget(str['icon'], str['title']),
+          underLine(),
+          contentWiget('电话', str['phone']),
+          contentWiget('企业编码', str['code']),
+          contentWiget('企业名称', str['name']),
+          contentWiget('城市/区域', str['address']),
+          lastContentWiget('详细地址', str['addressDetail'])
+        ],
+      )
+    );
+  }
+
+  Widget _getInfo(Map str) {
+    return Container(
+      color: Colors.white,
+      margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+      child: Column(
+        children: < Widget > [
+          titleWidget(str['icon'], str['title']),
+          underLine(),
+          contentWiget('企业名称', str['name']),
+          contentWiget('电话', str['phone']),
+          contentWiget('城市/区域', str['address']),
+          lastContentWiget('详细地址', str['addressDetail'])
+        ],
+      )
+    );
+  }
+}
+
+
+class ItemInfoWidget extends StatefulWidget {
+
+  ItemInfoWidget({
+    Key key
+  }): super(key: key);
+
+  _ItemInfoWidgetState createState() => _ItemInfoWidgetState();
+}
+
+class _ItemInfoWidgetState extends State < ItemInfoWidget > {
+
+  Map < String,
+  String > _itemInfo = {
+    "icon": "lib/images/icon_huowu.png",
+    "title": "货物信息",
+    "itemName": "汽车轮胎",
+    "itemNo": "4",
+    "expressPrice": "15",
+    "collectionPrice": "15800",
+    "supportPrice": "5000",
+    "weight": "600",
+    "itemDesc": "轮胎请核对数量轮胎请"
+  };
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      child: Container(
+        color: Colors.white,
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: < Widget > [
+            titleWidget(_itemInfo['icon'], "货物信息"),
+            underLine(),
+            contentWiget("货物名称", _itemInfo["itemName"]),
+            _inputWidget("数量", _itemInfo["itemNo"]),
+            _inputWidget("运费", _itemInfo["expressPrice"]),
+            _inputWidget("代收", _itemInfo["collectionPrice"]),
+            contentWiget("保价", _itemInfo["supportPrice"]),
+            contentWiget("重量", _itemInfo["weight"]),
+            _descWidget(_itemInfo['itemDesc'])
+          ],
+        ),
+      )
+    );
+  }
+
+  Widget _inputWidget(String key, String value) {
+    return Padding(
+      padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
+      child: Column(
+        children: < Widget > [
+           SizedBox(
+              height: ScreenUtil.getInstance().setHeight(89),
+              child: Center(
+                child: Row(
+                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                  children: < Widget > [
+                    Text(key, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+                    Container(
+                      width: ScreenUtil.getInstance().setWidth(300),
+                      child: Row(
+                        mainAxisAlignment: MainAxisAlignment.end,
+                        children: < Widget > [
+                          Expanded(
+                            //padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(20)),
+                            //child: Text(value,style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
+                            child: Center(
+                              child: TextField(
+                                keyboardType: TextInputType.number,
+                                textAlign: TextAlign.end,
+                                style: TextStyle(
+                                  fontSize: ScreenUtil.getInstance().setSp(30),
+                                  color: Color.fromRGBO(136, 136, 136, 1)
+                                ),
+                                decoration: InputDecoration(
+                                  border: InputBorder.none,
+                                  hintText: value,
+                                  hintStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)),
+                                  contentPadding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(20), 0, 0, 0),
+                                ),
+                              ),
+                            )
+                          ),
+                          Icon(Icons.keyboard_arrow_right, color: Color.fromRGBO(199, 199, 204, 1), )
+                        ],
+                      )
+                    )
+                  ],
+                ),
+              )
+          ),
+          Expanded(
+            flex: 0,
+            child: underLine()
+          )
+        ],
+      )
+    );
+  }
+
+  Widget _descWidget(String str) {
+    return
+    Container(
+      padding: EdgeInsets.all(ScreenUtil.getInstance().setWidth(30)),
+      child: Text(str, maxLines: 100, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+    );
+  }
+}
+
+Widget titleWidget(String iconUrl, String str) {
+  return Container(
+    height: ScreenUtil.getInstance().setHeight(90),
+    padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
+    child: Center(
+      child: Row(
+        mainAxisAlignment: MainAxisAlignment.start,
+        children: < Widget > [
+          Padding(
+            padding: EdgeInsets.only(right: ScreenUtil.getInstance().setHeight(20)),
+            child: Image.asset(
+              iconUrl,
+              width: ScreenUtil.getInstance().setWidth(40),
+              height: ScreenUtil.getInstance().setHeight(40),
+            )
+          ),
+          Text(str, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32)), )
+        ],
+      ),
+    ),
+  );
+}
+
+Widget underLine() {
+  return Container(
+    color: Color.fromRGBO(223, 223, 223, 1),
+    height: ScreenUtil.getInstance().setHeight(1),
+  );
+}
+
+Widget contentWiget(String key, String value) {
+  return Padding(
+    padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
+    child: Column(
+      children: < Widget > [
+        Padding(
+          padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(30)),
+          child: SizedBox(
+            height: ScreenUtil.getInstance().setHeight(89),
+            child: Center(
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: < Widget > [
+                  Text('${key}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+                  Text('${value}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
+                ],
+              ),
+            )
+          )
+        ),
+        Expanded(
+          flex: 0,
+          child: underLine()
+        )
+      ],
+    )
+  );
+}
+
+Widget lastContentWiget(String key, String value) {
+  return Padding(
+    padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
+    child:
+    Padding(
+      padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(30)),
+      child: SizedBox(
+        height: ScreenUtil.getInstance().setHeight(89),
+        child: Center(
+          child: Row(
+            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            children: < Widget > [
+              Text('${key}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+              Text('${value}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
+            ],
+          ),
+        )
+      )
+    ),
+  );
+}
+
+
+Widget submitBtn() {
+  return GestureDetector(
+    child: Container(
+      margin: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(50), ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(40)),
+      height: ScreenUtil.getInstance().setHeight(88),
+      decoration: BoxDecoration(
+        borderRadius: BorderRadius.all(Radius.circular(4)),
+        color: Color.fromRGBO(37, 102, 242, 1),
+      ),
+      child: Center(
+        child: Text("提交", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32), color: Colors.white), ),
+      ),
+    ),
+    onTap: () {
+      print('提交');
+    },
+  );
+}

+ 294 - 0
lib/pages/order_taking_page.dart

@@ -0,0 +1,294 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+
+class OrderTakingPage extends StatefulWidget {
+
+  OrderTakingPage({
+    Key key
+  }): super(key: key);
+
+  _OrderTakingPageState createState() => _OrderTakingPageState();
+}
+
+class _OrderTakingPageState extends State < OrderTakingPage >  with AutomaticKeepAliveClientMixin {
+  
+  @override
+  void initState() {
+    // TODO: implement initState
+    super.initState();
+    print("重绘页面");
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    super.build(context);
+    return Container(
+      child: Scaffold(
+        appBar: AppBar(
+          title: Text('接单', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36)), ),
+          centerTitle: true,
+          backgroundColor: Color.fromRGBO(64, 98, 254, 1),
+          actions: < Widget > [
+            Container(
+              child: PopupMenuButton<String>(
+              icon: Icon(Icons.add_circle_outline),
+              offset: Offset(0, 60),
+              padding: EdgeInsets.zero,
+              //child: IconButton(icon: Image.asset('lib/images/icon_shaixuan.png', scale: 1.8, ),onPressed: (){},),
+              itemBuilder: (BuildContext context)=><PopupMenuEntry<String>>[
+                PopupMenuItem<String>(
+                  child:Text("hahahahahh"),
+                ),
+                PopupMenuDivider(height: 1.0),
+                PopupMenuItem<String>(
+                  child:Text("hahahahahh"),
+                ),
+                PopupMenuDivider(height: 1.0),
+                PopupMenuItem<String>(
+                  child:Text("hahahahahh"),
+                ),
+                PopupMenuDivider(height: 1.0),
+              ]
+            )
+            ),
+          ],
+        ),
+        body: Container(
+         padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(20), ScreenUtil.getInstance().setWidth(20), ScreenUtil.getInstance().setWidth(20), 0),
+          decoration: BoxDecoration(
+            color: Color.fromRGBO(246, 246, 254, 1)
+          ),
+          child: ListView(
+            children: < Widget > [
+              OrderCard(),
+              OrderCard(),
+              OrderCard(),
+               OrderCard(),
+            ],
+          ),
+        )
+      ),
+    );
+  }
+
+  @override
+  bool get wantKeepAlive => true;
+}
+
+
+
+class OrderCard extends StatefulWidget {
+  final Widget child;
+
+  OrderCard({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _OrderCardState createState() => _OrderCardState();
+}
+
+class _OrderCardState extends State < OrderCard > {
+
+
+  @override
+  Widget build(BuildContext context) {
+    return Card(
+      color: Colors.white,
+      elevation: 3.0,
+      child: Column(
+        children: < Widget > [
+          OrderCardContainer()
+        ],
+      ),
+    );
+  }
+}
+
+class OrderCardContainer extends StatefulWidget {
+  final Widget child;
+
+  OrderCardContainer({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _OrderCardContainerState createState() => _OrderCardContainerState();
+}
+
+class _OrderCardContainerState extends State < OrderCardContainer > with SingleTickerProviderStateMixin {
+  Animation < double > animation;
+  AnimationController controller;
+  String str="联系方式";
+  bool animationStatus =true;
+  @override
+  initState() {
+    super.initState();
+    controller = new AnimationController(
+    duration: const Duration(milliseconds: 200), vsync: this);
+    animation = new Tween(begin: 0.0, end: 230.0).animate(controller);
+    animation.addStatusListener((status){
+      if (status == AnimationStatus.completed) {
+        //动画执行结束时反向执行动画
+       setState(() {
+         animationStatus = false;
+         str="收起";
+       });
+      } else if (status == AnimationStatus.dismissed) {
+        //动画恢复到初始状态时执行动画(正向)
+       setState(() {
+         animationStatus=true;
+         str="联系方式";
+       });
+      }
+    });
+  }
+  
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(30), 0),
+      child: Column(
+        children: < Widget > [
+          orderNoRow(),
+          orderAddress(),
+          orderItem('货物名称', '汽车轮胎', 15),
+          orderItem('货物件数', '2件', 30),
+          orderCutLine(),
+          orderBtn(animationStatus,controller,str),
+          AnimatedOpen(animation: animation)
+        ],
+      ),
+    );
+  }
+   dispose() {
+    //路由销毁时需要释放动画资源
+    controller.dispose();
+    super.dispose();
+  }
+}
+
+Widget orderBtn(bool animationStatus,AnimationController controller,String str){
+   return Container(
+    margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+    child: Row(
+      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+      children: < Widget > [
+        GestureDetector(
+          child: Container(
+            width: ScreenUtil.getInstance().setWidth(100),
+            height: ScreenUtil.getInstance().setHeight(48),
+            color: Colors.white,
+            child: Center(
+              child: Text(str, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Color.fromRGBO(64, 98, 254, 1)), ),
+            )
+          ),
+          onTap: () {
+              if (animationStatus) {
+                //动画恢复到初始状态时执行动画(正向)
+                controller.forward();
+              } else{
+                //动画执行结束时反向执行动画
+                controller.reverse();
+              }
+          },
+        ),
+        GestureDetector(
+          child: Container(
+            width: ScreenUtil.getInstance().setWidth(94),
+            height: ScreenUtil.getInstance().setWidth(48),
+            decoration: BoxDecoration(
+              color: Color.fromRGBO(252, 97, 128, 1),
+              borderRadius: BorderRadius.all(Radius.circular(4.0))
+            ),
+            child: Center(
+              child: Text("接单", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(24), color: Colors.white), ),
+            ),
+          ),
+          onTap: () {
+            print("22222");
+          },
+        )
+      ],
+    )
+  );
+}
+
+class AnimatedOpen extends AnimatedWidget {
+  AnimatedOpen({
+    Key key,
+    Animation < double > animation
+  }): super(key: key, listenable: animation);
+
+  Widget build(BuildContext context) {
+    final Animation < double > animation = listenable;
+    return Container(
+      height: ScreenUtil.getInstance().setHeight(animation.value),
+      child: orderDetailInfo(),
+    );
+  }
+}
+Widget orderNoRow() { //订单号及时间
+  return Container(
+    margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(30)),
+    child: Row(
+      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+      children: < Widget > [
+        Text("订单号:10893477897899", style: TextStyle(color: Color.fromRGBO(153, 153, 153, 1), fontSize: ScreenUtil.getInstance().setSp(24)), ),
+        Text("2019/02/24 14:23", style: TextStyle(color: Color.fromRGBO(153, 153, 153, 1), fontSize: ScreenUtil.getInstance().setSp(24)), ),
+      ],
+    ),
+  );
+}
+
+Widget orderAddress() { //运送路线
+  return Container(
+    margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+    child: Row(children: < Widget > [
+      Text('朝阳门大阳汽贸 ---> 朝阳门大阳汽贸', style: TextStyle(color: Colors.black, fontSize: ScreenUtil.getInstance().setSp(30)), ),
+    ], )
+  );
+}
+
+Widget orderItem(String key, String value, int marginBottom) {
+  return Container(
+    margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(marginBottom)),
+    child: Row(children: < Widget > [
+      Text('${key}:${value}', style: TextStyle(color: Color.fromRGBO(153, 153, 153, 1), fontSize: ScreenUtil.getInstance().setSp(24)), ),
+    ], )
+  );
+}
+
+Widget orderPhone(String key, String value, int marginBottom) {
+  return Container(
+    margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(marginBottom)),
+    child: Row(children: < Widget > [
+      Text('${key}:', style: TextStyle(color: Color.fromRGBO(153, 153, 153, 1), fontSize: ScreenUtil.getInstance().setSp(24)), ),
+      Text('${value}', style: TextStyle(color: Color.fromRGBO(64, 98, 254, 1), fontSize: ScreenUtil.getInstance().setSp(24)), ),
+    ], )
+  );
+}
+
+Widget orderCutLine() { //分割线
+  return Container(
+    margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+    height: ScreenUtil.getInstance().setHeight(1),
+    color: Color.fromRGBO(223, 223, 223, 1),
+  );
+}
+
+
+Widget orderDetailInfo() {//卡片展开信息
+  return Container(
+    child: Wrap(
+      children: < Widget > [
+        orderCutLine(),
+        orderPhone('发件电话', '010-8788 6890', 15),
+        orderItem('发件地址', '北京市朝阳区朝阳门外大街28号', 30),
+        orderPhone('收件电话', '010-8788 6890', 15),
+        orderItem('收件地址', '河北省廊坊市香河县东大街29号院18', 30),
+      ],
+    )
+  );
+}
+

+ 297 - 0
lib/pages/send_express_page.dart

@@ -0,0 +1,297 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+
+
+class SendExpressPage extends StatefulWidget {
+  final Widget child;
+
+  SendExpressPage({
+    Key key,
+    this.child
+  }): super(key: key);
+
+  _SendExpressPageState createState() => _SendExpressPageState();
+}
+
+class _SendExpressPageState extends State < SendExpressPage > with AutomaticKeepAliveClientMixin{
+
+  @override
+  bool get wantKeepAlive => true;
+
+  final Map < Object,
+  String > sendInfo = {
+    "icon": 'lib/images/icon_send.png',
+    "title": "发件信息",
+    "phone": "010-8788 6890",
+    "code": "345678",
+    "name": "朝阳门大阳汽贸",
+    "address": "北京市朝阳区",
+    "addressDetail": "朝阳门外大街28号"
+  };
+
+  final Map < Object,
+  String > getInfo = {
+    "icon": 'lib/images/icon_shoujian.png',
+    "title": "收件信息",
+    "name": "香河汽修厂",
+    "phone": "010-6734 3426",
+    "address": "河北省廊坊市",
+    "addressDetail": "香河县东大街29号院18栋3单元206"
+  };
+
+  Map < String,
+  String > _itemInfo = {
+    "icon": "lib/images/icon_huowu.png",
+    "title": "货物信息",
+    "itemName": "汽车轮胎",
+    "itemNo": "4",
+    "expressPrice": "15",
+    "collectionPrice": "15800",
+    "supportPrice": "5000",
+    "weight": "600",
+    "itemDesc": "轮胎请核对数量轮胎请"
+  };
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      child: Scaffold(
+        appBar: AppBar(
+          title: Text('发件', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36)), ),
+          centerTitle: true,
+          backgroundColor: Color.fromRGBO(64, 98, 254, 1),
+          // leading: GestureDetector(
+          //   child: Icon(Icons.arrow_back),
+          //   onTap: (){
+          //      Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
+          //       return HomePage();
+          //     }));
+          //   },
+          // ),
+        ),
+        body: Container(
+          color: Color.fromRGBO(246, 246, 254, 1),
+          padding: EdgeInsets.fromLTRB(0, ScreenUtil.getInstance().setHeight(20), 0, ScreenUtil.getInstance().setHeight(20)),
+          child: ListView(
+            children: < Widget > [
+              _sendInfo(sendInfo),
+              _getInfo(getInfo),
+              _itemInfoWidget(_itemInfo),
+              _submitBtn()
+            ],
+          ),
+        ),
+        resizeToAvoidBottomPadding: false //键盘弹出,页面不跟随向上滑动,防止出现溢出错误
+      ),
+    );
+  }
+
+  Widget _sendInfo(Map str) {
+    return Container(
+      color: Colors.white,
+      margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+      child: Column(
+        children: < Widget > [
+          _titleWidget(str['icon'], str['title']),
+          _underLine(),
+          _contentWiget('电话', str['phone']),
+          _contentWiget('企业编码', str['code']),
+          _contentWiget('企业名称', str['name']),
+          _contentWiget('城市/区域', str['address']),
+          _lastContentWiget('详细地址', str['addressDetail'])
+        ],
+      )
+    );
+  }
+
+   Widget _getInfo(Map str) {
+    return Container(
+      color: Colors.white,
+      margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
+      child: Column(
+        children: < Widget > [
+          _titleWidget(str['icon'], str['title']),
+          _underLine(),
+          _contentWiget('企业名称', str['name']),
+          _contentWiget('电话', str['phone']),
+          _contentWiget('城市/区域', str['address']),
+          _lastContentWiget('详细地址', str['addressDetail'])
+        ],
+      )
+    );
+  }
+
+  Widget _itemInfoWidget(Map _itemInfo){
+    return Container(
+      child: Container(
+        color: Colors.white,
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: < Widget > [
+            _titleWidget(_itemInfo['icon'], "货物信息"),
+            _underLine(),
+            _contentWiget("货物名称", _itemInfo["itemName"]),
+            _contentWiget("数量", _itemInfo["itemNo"]),
+            _contentWiget("运费", _itemInfo["expressPrice"]),
+            _contentWiget("代收", _itemInfo["collectionPrice"]),
+            _contentWiget("保价", _itemInfo["supportPrice"]),
+            _contentWiget("重量", _itemInfo["weight"]),
+            _descWidget(_itemInfo['itemDesc'])
+          ],
+        ),
+      )
+    );
+  }
+
+  Widget _titleWidget(String iconUrl, String str) {
+    return Container(
+      height: ScreenUtil.getInstance().setHeight(90),
+      padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
+      child: Center(
+        child: Row(
+          mainAxisAlignment: MainAxisAlignment.start,
+          children: < Widget > [
+            Padding(
+              padding: EdgeInsets.only(right: ScreenUtil.getInstance().setHeight(20)),
+              child: Image.asset(
+                iconUrl,
+                width: ScreenUtil.getInstance().setWidth(40),
+                height: ScreenUtil.getInstance().setHeight(40),
+              )
+            ),
+            Text(str, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32)), )
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _underLine() {
+    return Container(
+      color: Color.fromRGBO(223, 223, 223, 1),
+      height: ScreenUtil.getInstance().setHeight(1),
+    );
+  }
+
+  Widget _contentWiget(String key, String value) {
+    return Padding(
+      padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
+      child: Column(
+        children: < Widget > [
+          SizedBox(
+            height: ScreenUtil.getInstance().setHeight(89),
+            child: Center(
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: < Widget > [
+                  Expanded(
+                    flex: 0,
+                    child: Text('${key}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+                  ),
+                  Expanded(
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.end,
+                      children: < Widget > [
+                        //Text('${value}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
+                        SizedBox(
+                          width: ScreenUtil.getInstance().setWidth(500),
+                          child:TextField(
+                            keyboardType: TextInputType.number,
+                            textAlign: TextAlign.end,
+                            decoration: InputDecoration(
+                              border: InputBorder.none
+                            ),
+                          ),
+                        ),
+                        
+                        Icon(Icons.keyboard_arrow_right,color:Color.fromRGBO(199,199,204,1) ,)
+                      ],
+                    )
+                  )
+                ],
+              ),
+            )
+          ),
+          Expanded(
+            flex: 0,
+            child: _underLine()
+          )
+        ],
+      )
+    );
+  }
+
+  Widget _lastContentWiget(String key, String value) {
+    return Padding(
+      padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
+      child: SizedBox(
+          height: ScreenUtil.getInstance().setHeight(89),
+          child: Center(
+            child: Row(
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              children: < Widget > [
+                Expanded(
+                    flex: 0,
+                    child: Text('${key}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+                  ),
+                  Expanded(
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.end,
+                      children: < Widget > [
+                        //Text('${value}', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
+                        SizedBox(
+                          width: ScreenUtil.getInstance().setWidth(500),
+                          child:TextField(
+                            keyboardType: TextInputType.number,
+                            textAlign: TextAlign.end,
+                            decoration: InputDecoration(
+                              border: InputBorder.none
+                            ),
+                          ),
+                        ),
+                        
+                        Icon(Icons.keyboard_arrow_right,color:Color.fromRGBO(199,199,204,1) ,)
+                      ],
+                    )
+                  )
+              ],
+            ),
+          )
+        )
+    );
+  }
+
+
+  Widget _descWidget(String str) {
+    return
+    Container(
+      padding: EdgeInsets.all(ScreenUtil.getInstance().setWidth(30)),
+      //child: Text(str, maxLines: 100, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
+      child: TextField(
+        maxLines: 3,
+        decoration: InputDecoration(
+          border: InputBorder.none,
+          hintText: "请输入备注内容"
+        ),
+      ),
+    );
+  }
+
+  Widget _submitBtn() {
+    return GestureDetector(
+      child: Container(
+        margin: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(50), ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(40)),
+        height: ScreenUtil.getInstance().setHeight(88),
+        decoration: BoxDecoration(
+          borderRadius: BorderRadius.all(Radius.circular(4)),
+          color: Color.fromRGBO(37, 102, 242, 1),
+        ),
+        child: Center(
+          child: Text("提交", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32), color: Colors.white), ),
+        ),
+      ),
+      onTap: () {
+        print('提交');
+      },
+    );
+  }
+}

+ 33 - 0
lib/start_page.dart

@@ -0,0 +1,33 @@
+import 'package:flutter/material.dart';
+import 'login_page.dart';
+class StartPage extends StatefulWidget {
+  final Widget child;
+
+  StartPage({Key key, this.child}) : super(key: key);
+
+  _StartPageState createState() => _StartPageState();
+}
+
+class _StartPageState extends State<StartPage> {
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+       child: Stack(
+        alignment:Alignment.center,//如果子widget没有定位,此属性定位
+        children: <Widget>[
+          Container(
+            child:Image.asset(
+              "lib/images/start_page.png",//本地图片路径必须和配置文件的图片路径一致
+              fit:BoxFit.cover
+            )
+          ),
+          Positioned(
+            top: 30.0,
+            right: 10.0,
+            child:Text("99",textDirection: TextDirection.ltr,)
+          )
+        ],
+      )
+    );
+  }
+}

+ 10 - 0
lib/util/api.dart

@@ -0,0 +1,10 @@
+import 'request.dart';
+
+
+
+
+Future getData()async{
+  var response = await Http().get(
+                "query",data: {"name":"haha"});
+    print(response);
+}

+ 5 - 0
lib/util/config.dart

@@ -0,0 +1,5 @@
+class Config{
+  String baseUrl = "https://www.easy-mock.com/mock/5c7356c306ffee27c6b2f0ff/example/";
+  int connectTimeout = 5000;
+  int receiveTimeout = 5000;
+}

+ 103 - 0
lib/util/request.dart

@@ -0,0 +1,103 @@
+import 'package:dio/dio.dart';
+
+import 'config.dart'; //用于配置公用常量
+
+class Http {
+  static Http instance;
+  static String token;
+  static Config _config = Config();
+  static Dio _dio;
+  BaseOptions _options;
+
+  static Http getInstance() {
+    print("getInstance");
+    if (instance == null) {
+      instance = new Http();
+    }
+  }
+
+  Http() {
+    // 初始化 Options
+    _options = BaseOptions(
+      baseUrl: _config.baseUrl,
+      connectTimeout: _config.connectTimeout,
+      receiveTimeout: _config.receiveTimeout,
+      headers: {}
+    );
+
+    _dio = new Dio(_options);
+
+    // //发送请求拦截处理,例如:添加token使用
+    //   _dio.interceptor.request.onSend = (Options options) async{
+
+    //     print(options.baseUrl);
+    //     return options;
+    //   };
+
+    // //请求成功拦截,简化代码中调用难度
+    //   _dio.interceptor.response.onSuccess = (Response response) async{
+    //     print(response.statusCode);
+    //     return response;
+    //   };
+    // 	//请求失败拦截
+    //   _dio.interceptor.response.onError = (DioError e) {
+    //     print(e);
+    //     return e;
+    //   };
+
+  }
+
+  // get 请求封装
+  get(url, {
+    options,
+    cancelToken,
+    data = null
+  }) async {
+    print('get:::url:$url ,body: $data');
+    Response response;
+    try {
+        response = await _dio.get(
+          url,
+          queryParameters: data,
+          cancelToken: cancelToken
+        );
+    }
+    on DioError
+    catch (e) {
+      if (CancelToken.isCancel(e)) {
+        print('get请求取消! ' + e.message);
+      } else {
+        print('get请求发生错误:$e');
+      }
+    }
+    return response.data;
+  }
+
+  // post请求封装
+  post(url, {
+    options,
+    cancelToken,
+    data = null
+  }) async {
+    print('post请求::: url:$url ,body: $data');
+    Response response;
+
+    try {
+      response = await _dio.post(
+        url,
+        data: data != null ? data : {},
+        cancelToken: cancelToken
+      );
+      print(response);
+    }
+    on DioError
+    catch (e) {
+      if (CancelToken.isCancel(e)) {
+        print('get请求取消! ' + e.message);
+      } else {
+        print('get请求发生错误:$e');
+      }
+    }
+    return response.data;
+  }
+}

+ 18 - 0
logistics_client.iml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
+      <excludeFolder url="file://$MODULE_DIR$/.idea" />
+      <excludeFolder url="file://$MODULE_DIR$/.pub" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Dart SDK" level="project" />
+    <orderEntry type="library" name="Flutter Plugins" level="project" />
+    <orderEntry type="library" name="Dart Packages" level="project" />
+  </component>
+</module>

+ 168 - 0
pubspec.lock

@@ -0,0 +1,168 @@
+# Generated by pub
+# See https://www.dartlang.org/tools/pub/glossary#lockfile
+packages:
+  async:
+    dependency: transitive
+    description:
+      name: async
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.8"
+  boolean_selector:
+    dependency: transitive
+    description:
+      name: boolean_selector
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.4"
+  charcode:
+    dependency: transitive
+    description:
+      name: charcode
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.2"
+  collection:
+    dependency: transitive
+    description:
+      name: collection
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.14.11"
+  cookie_jar:
+    dependency: transitive
+    description:
+      name: cookie_jar
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.0"
+  cupertino_icons:
+    dependency: "direct main"
+    description:
+      name: cupertino_icons
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.1.2"
+  dio:
+    dependency: "direct main"
+    description:
+      name: dio
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.14"
+  flutter:
+    dependency: "direct main"
+    description: flutter
+    source: sdk
+    version: "0.0.0"
+  flutter_screenutil:
+    dependency: "direct main"
+    description:
+      name: flutter_screenutil
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.5.1"
+  flutter_test:
+    dependency: "direct dev"
+    description: flutter
+    source: sdk
+    version: "0.0.0"
+  matcher:
+    dependency: transitive
+    description:
+      name: matcher
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.12.3+1"
+  meta:
+    dependency: transitive
+    description:
+      name: meta
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.6"
+  path:
+    dependency: transitive
+    description:
+      name: path
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.6.2"
+  quiver:
+    dependency: transitive
+    description:
+      name: quiver
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.1"
+  shared_preferences:
+    dependency: "direct main"
+    description:
+      name: shared_preferences
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.5.1+1"
+  sky_engine:
+    dependency: transitive
+    description: flutter
+    source: sdk
+    version: "0.0.99"
+  source_span:
+    dependency: transitive
+    description:
+      name: source_span
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.4.1"
+  stack_trace:
+    dependency: transitive
+    description:
+      name: stack_trace
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.9.3"
+  stream_channel:
+    dependency: transitive
+    description:
+      name: stream_channel
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.6.8"
+  string_scanner:
+    dependency: transitive
+    description:
+      name: string_scanner
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.4"
+  term_glyph:
+    dependency: transitive
+    description:
+      name: term_glyph
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.1"
+  test_api:
+    dependency: transitive
+    description:
+      name: test_api
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.2.1"
+  typed_data:
+    dependency: transitive
+    description:
+      name: typed_data
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.6"
+  vector_math:
+    dependency: transitive
+    description:
+      name: vector_math
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.8"
+sdks:
+  dart: ">=2.0.0 <3.0.0"
+  flutter: ">=0.1.4 <2.0.0"

+ 92 - 0
pubspec.yaml

@@ -0,0 +1,92 @@
+name: logistics_client
+description: A new Flutter project.
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# Read more about versioning at semver.org.
+version: 1.0.0+1
+
+environment:
+  sdk: ">=2.0.0-dev.68.0 <3.0.0"
+
+dependencies:
+  flutter:
+    sdk: flutter
+
+  # The following adds the Cupertino Icons font to your application.
+  # Use with the CupertinoIcons class for iOS style icons.
+  cupertino_icons: ^0.1.2
+  # 请求
+  dio: ^2.0.11
+  # 屏幕匹配包
+  flutter_screenutil: ^0.5.1
+  # 本地数据存储
+  shared_preferences: ^0.5.0
+
+dev_dependencies:
+  flutter_test:
+    sdk: flutter
+
+
+# For information on the generic Dart part of this file, see the
+# following page: https://www.dartlang.org/tools/pub/pubspec
+
+# The following section is specific to Flutter.
+flutter:
+
+  # The following line ensures that the Material Icons font is
+  # included with your application, so that you can use the icons in
+  # the material Icons class.
+  uses-material-design: true
+
+  # To add assets to your application, add an assets section, like this:
+  # assets:
+  #  - images/a_dot_burr.jpeg
+  #  - images/a_dot_ham.jpeg
+  assets:
+    - lib/images/start_page.png
+    - lib/images/icon_jiedan.png
+    - lib/images/icon_jiedan01.png
+    - lib/images/icon_dingdan.png
+    - lib/images/icon_dingdan01.png
+    - lib/images/icon_fajian.png
+    - lib/images/icon_fajian01.png
+    - lib/images/icon_wode.png
+    - lib/images/icon_wode01.png
+    - lib/images/icon_shaixuan.png
+    - lib/images/icon_send.png
+    - lib/images/icon_shoujian.png
+    - lib/images/icon_huowu.png
+    - lib/images/icon_saoyisao.png
+    - lib/images/icon_logo.png
+    - lib/images/icon_zhandianss.png
+    - lib/images/icon_mimas.png
+    - lib/images/icon_dayinji.png
+  # An image asset can refer to one or more resolution-specific "variants", see
+  # https://flutter.io/assets-and-images/#resolution-aware.
+
+  # For details regarding adding assets from package dependencies, see
+  # https://flutter.io/assets-and-images/#from-packages
+
+  # To add custom fonts to your application, add a fonts section here,
+  # in this "flutter" section. Each entry in this list should have a
+  # "family" key with the font family name, and a "fonts" key with a
+  # list giving the asset and other descriptors for the font. For
+  # example:
+  # fonts:
+  #   - family: Schyler
+  #     fonts:
+  #       - asset: fonts/Schyler-Regular.ttf
+  #       - asset: fonts/Schyler-Italic.ttf
+  #         style: italic
+  #   - family: Trajan Pro
+  #     fonts:
+  #       - asset: fonts/TrajanPro.ttf
+  #       - asset: fonts/TrajanPro_Bold.ttf
+  #         weight: 700
+  #
+  # For details regarding fonts from package dependencies,
+  # see https://flutter.io/custom-fonts/#from-packages

+ 30 - 0
test/widget_test.dart

@@ -0,0 +1,30 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility that Flutter provides. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:logistics_client/main.dart';
+
+void main() {
+  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
+    // Build our app and trigger a frame.
+    await tester.pumpWidget(MyApp());
+
+    // Verify that our counter starts at 0.
+    expect(find.text('0'), findsOneWidget);
+    expect(find.text('1'), findsNothing);
+
+    // Tap the '+' icon and trigger a frame.
+    await tester.tap(find.byIcon(Icons.add));
+    await tester.pump();
+
+    // Verify that our counter has incremented.
+    expect(find.text('0'), findsNothing);
+    expect(find.text('1'), findsOneWidget);
+  });
+}