Flutter公交API集成插件sg_bus_api的使用

Flutter公交API集成插件sg_bus_api的使用

概述

本包允许您在您的Flutter应用中无缝地集成当前的新加坡公交API。以下是该包的功能和用法说明。

功能

  • <code>SGBuses.get(_busID)</code>:此方法可以获取指定公交车ID的相关信息,您可以利用这些信息进行其他操作。

开始使用

要开始使用此包,只需导入该包:

import "package:sg_bus_api/src/bus_model.dart"

使用示例

以下是一个完整的示例,展示如何使用sg_bus_api插件来获取并展示新加坡公交车的信息。

示例代码

import 'package:flutter/material.dart';
import 'package:sg_bus_api/src/bus_model.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('新加坡公交API插件示例'),
        ),
        body: Center(
          child: BusInfoWidget(),
        ),
      ),
    );
  }
}

class BusInfoWidget extends StatefulWidget {
  @override
  _BusInfoWidgetState createState() => _BusInfoWidgetState();
}

class _BusInfoWidgetState extends State<BusInfoWidget> {
  String _busInfo = '加载中...';

  @override
  void initState() {
    super.initState();
    // 获取指定公交车ID的信息
    getBusInformation('10');
  }

  Future<void> getBusInformation(String busID) async {
    try {
      // 调用SGBuses.get方法获取公交车信息
      var busData = await SGBuses.get(busID);
      setState(() {
        _busInfo = '公交车ID: ${busData.busId}\n路线: ${busData.route}';
      });
    } catch (e) {
      setState(() {
        _busInfo = '加载失败: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Text(
      _busInfo,
      style: TextStyle(fontSize: 20),
    );
  }
}

说明

  1. 导入依赖

    import 'package:flutter/material.dart';
    import 'package:sg_bus_api/src/bus_model.dart';
    

    这两行代码分别导入了Flutter框架和sg_bus_api包。

  2. 主应用类

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('新加坡公交API插件示例'),
            ),
            body: Center(
              child: BusInfoWidget(),
            ),
          ),
        );
      }
    }
    

    MyApp类定义了应用的基本结构,包括标题栏和主体部分。主体部分显示了一个BusInfoWidget小部件。

  3. 获取公交信息

    class BusInfoWidget extends StatefulWidget {
      @override
      _BusInfoWidgetState createState() => _BusInfoWidgetState();
    }
    
    class _BusInfoWidgetState extends State<BusInfoWidget> {
      String _busInfo = '加载中...';
    
      @override
      void initState() {
        super.initState();
        // 获取指定公交车ID的信息
        getBusInformation('10');
      }
    
      Future<void> getBusInformation(String busID) async {
        try {
          // 调用SGBuses.get方法获取公交车信息
          var busData = await SGBuses.get(busID);
          setState(() {
            _busInfo = '公交车ID: ${busData.busId}\n路线: ${busData.route}';
          });
        } catch (e) {
          setState(() {
            _busInfo = '加载失败: $e';
          });
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Text(
          _busInfo,
          style: TextStyle(fontSize: 20),
        );
      }
    }
    

更多关于Flutter公交API集成插件sg_bus_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter公交API集成插件sg_bus_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


sg_bus_api 是一个用于集成新加坡公交API的Flutter插件。通过这个插件,开发者可以轻松地获取新加坡公交的相关信息,如公交路线、到站时间、公交车站位置等。以下是如何在Flutter项目中使用 sg_bus_api 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 sg_bus_api 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  sg_bus_api: ^1.0.0  # 请使用最新的版本号

然后运行 flutter pub get 来获取依赖。

2. 获取API密钥

在使用 sg_bus_api 之前,你需要从 LTA DataMall 获取一个API密钥。

3. 初始化插件

在你的Dart代码中,首先需要导入 sg_bus_api 并初始化插件。

import 'package:sg_bus_api/sg_bus_api.dart';

void main() {
  SgBusApi.initialize(apiKey: 'YOUR_API_KEY');
}

4. 使用插件获取数据

sg_bus_api 提供了多种方法来获取公交数据。以下是一些常见的使用示例。

获取公交路线信息

void getBusRoutes() async {
  try {
    List<BusRoute> routes = await SgBusApi.getBusRoutes();
    for (var route in routes) {
      print('Route: ${route.route}, Service: ${route.service}');
    }
  } catch (e) {
    print('Error: $e');
  }
}

获取公交到站时间

void getBusArrivalTimes(String busStopCode) async {
  try {
    List<BusArrival> arrivals = await SgBusApi.getBusArrival(busStopCode);
    for (var arrival in arrivals) {
      print('Bus: ${arrival.busNumber}, Arrival Time: ${arrival.estimatedArrival}');
    }
  } catch (e) {
    print('Error: $e');
  }
}

获取公交车站信息

void getBusStops() async {
  try {
    List<BusStop> stops = await SgBusApi.getBusStops();
    for (var stop in stops) {
      print('Stop Code: ${stop.busStopCode}, Name: ${stop.busStopName}');
    }
  } catch (e) {
    print('Error: $e');
  }
}

5. 处理错误

在使用API时,可能会遇到网络错误或API限制等问题。建议在使用 try-catch 块来捕获和处理这些错误。

void getBusRoutes() async {
  try {
    List<BusRoute> routes = await SgBusApi.getBusRoutes();
    for (var route in routes) {
      print('Route: ${route.route}, Service: ${route.service}');
    }
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部