Flutter数据库查询插件open_brewery_db的使用

Flutter数据库查询插件open_brewery_db的使用

特性

列表啤酒厂 获取啤酒厂 搜索啤酒厂

开始使用

安装

添加包

dependencies:
  open_brewery_db: ^0.0.6

在项目目录中运行

$ flutter pub get

导入它

import 'package:open_brewery_db/open_brewery_db.dart';

使用

获取啤酒厂ID

用法

Future<Brewery> getBrewery({required String id})

示例

OpenBreweryDb.getBrewery(id: "sierra-nevada-brewing-co-chico")

列出啤酒厂

用法

Future<List<Brewery>> listBreweries({
    String? byCity,
    LatLng? byDist,
    String? byName,
    String? byState,
    String? byPostal,
    BreweryType? byType,
    int? byPage,
    int? perPage,
    List<SortFieldType> sortFields = const [],
    Sort? sortOrder,
  })

示例

OpenBreweryDb.listBreweries(
          byCity: "Sacramento",
          sortFields: [SortFieldType.name],
          sortOrder: Sort.asc,
        ),
OpenBreweryDb.listBreweries(
          byState: "California",
          byCity: "San Diego",
          sortFields: [SortFieldType.street],
          sortOrder: Sort.desc,
        ),
OpenBreweryDb.listBreweries(
          byDist: LatLng(latitude: 38.5816, longitude: -121.4944), // Sacramento, CA
        ),

搜索啤酒厂

用法

Future<List<Brewery>> searchBreweries({
    required String query,
  })

示例

OpenBreweryDb.searchBreweries(query: "Sierra Nevada")
OpenBreweryDb.searchBreweries(query: "Chico California")

数据结构

Future<Brewery>
Future<List<Brewery>>

Brewery

  final String? id;
  final String? name;
  final String? breweryType;
  final String? street;
  final String? address_2;
  final String? address_3;
  final String? city;
  final String? state;
  final String? countyProvince;
  final String? postalCode;
  final String? country;
  final String? longitude;
  final String? latitude;
  final String? phone;
  final String? websiteUrl;
  final String? updatedAt;
  final String? createdAt;

路线图

  • ✅ 添加文档注释
  • ❌ 添加自动完成端点
  • ❌ 编写完整的 get brewery 测试(目前只实现了简单的测试)
  • ❌ 编写完整的 list breweries 测试(目前只实现了简单的测试)
  • ❌ 编写完整的 search breweries 测试(目前只实现了简单的测试)

额外信息

欢迎提交拉取请求!


示例代码

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:open_brewery_db_example/widget_examples.dart/get_brewery.dart';
import 'package:open_brewery_db_example/widget_examples.dart/list_breweries.dart';
import 'package:open_brewery_db_example/widget_examples.dart/search_breweries.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Body(),
    );
  }
}

class Body extends StatefulWidget {
  const Body({
    Key? key,
  }) : super(key: key);

  [@override](/user/override)
  State<Body> createState() => _BodyState();
}

class _BodyState extends State<Body> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: const Color(0xffFFBB00),
        title: const Text(
          'Open Brewery DB Example',
          style: TextStyle(color: Colors.black),
        ),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            SizedBox(
              width: MediaQuery.of(context).size.width,
              child: OutlinedButton(
                style: OutlinedButton.styleFrom(
                  primary: Colors.black,
                ),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => const ListBreweries(),
                    ),
                  );
                },
                child: const Text('List Breweries'),
              ),
            ),
            SizedBox(
              width: MediaQuery.of(context).size.width,
              child: OutlinedButton(
                style: OutlinedButton.styleFrom(
                  primary: Colors.black,
                ),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => const GetBrewery(),
                    ),
                  );
                },
                child: const Text('Get Brewery'),
              ),
            ),
            SizedBox(
              width: MediaQuery.of(context).size.width,
              child: OutlinedButton(
                style: OutlinedButton.styleFrom(
                  primary: Colors.black,
                ),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => const SearchBreweries(),
                    ),
                  );
                },
                child: const Text('Search Breweries'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter数据库查询插件open_brewery_db的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库查询插件open_brewery_db的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,使用open_brewery_db插件可以让你方便地访问Open Brewery DB的API,从而获取全球啤酒厂的数据。尽管open_brewery_db本身不是一个数据库插件,而是一个网络API客户端,但你可以使用它来获取数据并在本地存储或查询。

下面是一个简单的示例,展示了如何使用open_brewery_db插件从API获取数据,并在Flutter应用中显示这些数据。为了简单起见,这里不会涉及到本地数据库的存储和查询,而是直接展示如何调用API和显示结果。

首先,确保你已经在pubspec.yaml文件中添加了open_brewery_db依赖:

dependencies:
  flutter:
    sdk: flutter
  open_brewery_db: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中创建一个新的Dart文件,比如brewery_service.dart,用于封装对open_brewery_db的调用:

import 'package:open_brewery_db/open_brewery_db.dart';
import 'package:http/http.dart' as http;

class BreweryService {
  final OpenBreweryDb _openBreweryDb;

  BreweryService() : _openBreweryDb = OpenBreweryDb(client: http.Client());

  Future<List<Brewery>> fetchBreweries() async {
    try {
      final response = await _openBreweryDb.fetchBreweries(by: 'name');
      return response.breweries;
    } catch (e) {
      throw e;
    } finally {
      _openBreweryDb.client.close();
    }
  }
}

注意:在最新版本中,OpenBreweryDb的构造方法可能有所变化,请根据实际情况调整代码。

然后,在你的主文件(比如main.dart)中,使用这个服务来获取并显示啤酒厂数据:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Open Brewery DB Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: BreweryListScreen(),
    );
  }
}

class BreweryListScreen extends StatefulWidget {
  @override
  _BreweryListScreenState createState() => _BreweryListScreenState();
}

class _BreweryListScreenState extends State<BreweryListScreen> {
  List<Brewery> breweries = [];
  bool isLoading = true;

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

  Future<void> fetchBreweries() async {
    setState(() {
      isLoading = true;
    });
    try {
      final service = BreweryService();
      breweries = await service.fetchBreweries();
    } catch (e) {
      print('Error fetching breweries: $e');
    }
    setState(() {
      isLoading = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Breweries'),
      ),
      body: isLoading
          ? Center(child: CircularProgressIndicator())
          : ListView.builder(
              itemCount: breweries.length,
              itemBuilder: (context, index) {
                final brewery = breweries[index];
                return ListTile(
                  title: Text(brewery.name),
                  subtitle: Text(brewery.city),
                );
              },
            ),
    );
  }
}

这个示例展示了如何使用open_brewery_db插件从API获取啤酒厂列表,并在Flutter应用中显示这些列表。你可以根据需要对这个基础代码进行扩展,比如添加错误处理、分页加载、搜索功能等。

请注意,由于open_brewery_db是一个网络API客户端,因此在实际应用中,你可能需要考虑网络请求的缓存、错误重试机制以及API速率限制等问题。此外,对于敏感数据或大量数据的存储和查询,你可能需要考虑使用Flutter的本地数据库插件,如sqflitefloor

回到顶部