Flutter 使用ListView实现类似物流的时间轴(详细)

Flutter 使用ListView实现类似物流的时间轴(详细)前言效果图具体代码返回数据的结构结束语前言本文部分代码参考了Flutter 类似物流的 时间轴 ListView 时间轴 - 简书 ,前排感谢。使用的接口是阿里云的:易源数据-快递物流查询API接口,具体使用和一些细节打算专门再写一个博客。效果图先上效果图,手机截图略大,见谅具体代码直接看代码吧,讲解啥的都写在注释里了,有点啰嗦,想尽量讲的详细一点,莫怪莫怪(吐槽一下CSDN居然没有dart语言的代码块,用Java将就看下吧)
摘要由CSDN通过智能技术生成

Flutter 使用ListView实现类似物流的时间轴(详细)

前言

本文部分代码参考了Flutter 类似物流的 时间轴 ListView 时间轴 - 简书 ,前排感谢。
使用的接口是阿里云的:易源数据-快递物流查询API接口,具体使用和一些细节打算专门再写一个博客。

效果图

先上效果图,手机截图略大,见谅

效果图

具体代码

直接看代码吧,讲解啥的都写在注释里了,有点啰嗦,想尽量讲的详细一点,莫怪莫怪
(吐槽一下CSDN居然没有dart语言的代码块,用Java将就看下吧)

import 'dart:convert';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class DeliverInfoPage extends StatefulWidget{
   

  //从上一个页面传过来的快递单号
  String trackingNum;

  DeliverInfoPage(this.trackingNum);

  @override
  State<StatefulWidget> createState() {
   
    return DeliverInfoPageState(trackingNum);
  }
}

class DeliverInfoPageState extends State<DeliverInfoPage>{
   

  String trackingNum;
  //get请求获取的数据
  Map jsonMap;

  DeliverInfoPageState(this.trackingNum);

  @override
  void initState() {
   
    //NetInterface是自己封装的网络接口类,把项目中用到的接口都放在一起,便于管理
    //对于阿里云接口的具体使用看另一个帖子吧。毕竟不是所有人都用的这个,就不在这里展开了
    NetInterface.getDeliverInfo(trackingNum).then((response) {
   
//      print("getDeliverInfo=>"+response.toString());
      //jsonMap的具体格式请看阿里云API购买页面,本博最后也会贴出来
      jsonMap = json.decode(response.toString());
      setState(() {
    });
    }).catchError((response) {
   
      //ToastUtil也是封装的一个类,具体代码是:
      /*class ToastUtil{
        static void print(String msg){
          Fluttertoast.showToast(
          msg: msg,
          toastLength: Toast.LENGTH_SHORT,
          gravity: ToastGravity.CENTER,
          timeInSecForIosWeb: 1,
          );
        }
      }*/
      ToastUtil.print("出现错误,请重试");
      print("getDeliverInfo Error=>"+response.toString());
    });
  }

  @override
  Widget build(BuildContext context) {
   
    //因为这个项目是安卓和flutter混合开发,所以用了WillPopScope拦截退出事件
    return WillPopScope(
      child: Scaffold(
        appBar: AppBar(
          title: Text("物流追踪"),
          leading: IconButton(
              icon: Icon(Icons.arrow_back),
              onPressed: () {
   
                Navigator.pop(context);
              }
          ),
        ),
        //未获取到数据就居中显示加载图标
        body: jsonMap != null ?  buildBody(context) : showLoading(),
      ),
      onWillPop: (){
   
        Navigator.pop(context);
      },
    );
  }

  Widget buildBody(BuildContext context){
   
    return Column(
      children: <Widget>[
        Container(
          padding: EdgeInsets.fromLTRB(10, 0, 0, 0),
          width: double.infinity,
          color: Colors.white,
          height: 70,
          child: Container(
            margin: EdgeInsets.all(5),
            child: Row(
              children
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值