Flutter实战开发(2)——实现条形码扫描获取商品信息

Flutter实战开发(2)——实现条形码扫描获取商品信息实现条形码和二维码扫描前言准备工具配置后端接口编写调用接口方法页面布局前言上一篇博客就大致讲了一下qrscan这个插件的使用,没有具体的实现,这篇博客就来个实战吧,来做一个反盗版商品的例子准备工具

前言

上一篇博客就大致讲了一下qrscan这个插件的使用,没有具体的实现,这篇博客就来个实战吧,来做一个反盗版商品的例子

准备工具

这套课程是采用Android Studio进行开发的。当前在此之前请准备好Flutter开发环境,我这里就不进行讲解了,基础知识请到条形码和二维码扫描这篇博客学习

配置后端接口

本次项目主要是调用公开的api,可能没有及时的更新,商品的信息有点些出入
创建一个config文件夹,创建一个service_url.dart文件

const serviceUrl='http://www.mxnzp.com';
const servicePath={ 
   
  'getProductMessage':serviceUrl+'/api/barcode/goods/details',  //获取活动信息
};

编写调用接口方法

创建一个service文件夹,创建一个service_method.dart

import 'package:dio/dio.dart';
import 'dart:async';
import '../config/service_url.dart';

// 获取商品的信息
Future request(barcode) async{ 
   
  try { 
   
    print('开始获取信息');
    Response response;
    Dio dio=new Dio();
    String barCode=barcode.toString();
    var data={ 
   "barcode":barCode};
    print(data);
    response=await dio.get("http://www.mxnzp.com/api/barcode/goods/details",queryParameters: data);
    print(response.data['code']);
    if(response.data['code']==1){ 
   
      print(response.data['data']);
      return response.data['data'];
    }else{ 
   
      throw Exception('后端端口异常');
    }
  } catch (e) { 
   
    return print('ERROR:=========>${e}');
  }
}

页面布局

采用卡片布局,感觉代码蛮简单的,就不给大家解释了,直接上代码

import 'package:flutter/material.dart';
import 'package:qrscan/qrscan.dart' as scanner;
import './service/service_method.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget { 
   
  MyApp({ 
   Key key}) : super(key: key);

  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> { 
   
  String barcode = null;

  @override
  initState() { 
   
    super.initState();
  }

  @override
  Widget build(BuildContext context) { 
   
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: Text('反盗版商品'),
          
        ),
        body: Container(
          margin: EdgeInsets.only(top: 0),
          child: Column(
            //mainAxisAlignment: MainAxisAlignment.end,
            children: <Widget>[
              FutureBuilder(
                future: request(barcode),
                builder: (context,snapshot){ 
   
                  if(snapshot.hasData){ 
   
                    Map projectItem=snapshot.data;

                    return projectMessage(projectItem:projectItem);

                  }else{ 
   
                      return Center(
                        child:Text('请扫描相关的条形码')
                      );
                    }
                },
              ),
              //Text(barcode),
              MaterialButton(
                onPressed: scan,
                child: Text("Scan"),
                color: Colors.blue,
                textColor: Colors.white,
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future scan() async { 
   
    try { 
   
      String barcode = await scanner.scan();
      setState(() => this.barcode = barcode);
    } on Exception catch (e) { 
   
      if (e == scanner.CameraAccessDenied) { 
   
        setState(() { 
   
          this.barcode = 'The user did not grant the camera permission!';
        });
      } else { 
   
        setState(() => this.barcode = 'Unknown error: $e');
      }
    } on FormatException { 
   
      setState(() => this.barcode = 'null (User returned using the "back"-button before scanning anything. Result)');
    } catch (e) { 
   
      setState(() => this.barcode = 'Unknown error: $e');
    }
  }
}

 class projectMessage extends StatelessWidget { 
   
    final Map projectItem;

    const projectMessage({ 
   Key key,this.projectItem}) : super(key: key);
  
    @override
    Widget build(BuildContext context) { 
   
      return Container(
        child: Card(
          child: Column(
            children: <Widget>[
              ListTile(
                title:new Text('商品名字',style: TextStyle(fontWeight: FontWeight.w500),),
                subtitle: new Text(projectItem['goodsName']),
                leading: new Icon(Icons.account_box,color: Colors.lightBlue,),
              ),
              new Divider(),
              ListTile(
                title:new Text('商品价格',style: TextStyle(fontWeight: FontWeight.w500),),
                subtitle: new Text(projectItem['price']),
                leading: new Icon(Icons.account_box,color: Colors.lightBlue,),
              ),
              new Divider(),
              ListTile(
                title:new Text('商标名称',style: TextStyle(fontWeight: FontWeight.w500),),
                subtitle: new Text(projectItem['brand']),
                leading: new Icon(Icons.account_box,color: Colors.lightBlue,),
              ),
              new Divider(),
              ListTile(
                title:new Text('生产公司',style: TextStyle(fontWeight: FontWeight.w500),),
                subtitle: new Text(projectItem['supplier']),
                leading: new Icon(Icons.account_box,color: Colors.lightBlue,),
              ),
            ],
          ),
        ),
      );
    }
  }

class Qrscan { 
   
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整的代码请到我的GitHub观看吧,编写不易,感觉有用的话,请给我一个赞和star吧。

今天的文章Flutter实战开发(2)——实现条形码扫描获取商品信息分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65835.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注