Flutter数据搜索与自动补全插件dadata的使用

Flutter数据搜索与自动补全插件dadata的使用

MIT License pub version ci

Yet another DaData Suggestions 库。

实现的功能:

  • 地址建议
  • 反向地理编码
  • 护照签发单位

完整示例Demo

以下是一个完整的示例代码,展示了如何在Flutter应用中使用dadata插件进行地址搜索与自动补全。

import 'package:flutter/material.dart';

import 'suggestions_screen.dart';

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

class MyApp extends StatelessWidget {
  // 这个widget是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DadataSuggestions Demo'),
      ),
      body: Center(
        child: Padding(
          padding: EdgeInsets.all(24),
          child: TextFormField(
            decoration: InputDecoration(
              hintText: "粘贴DaData API令牌并按回车键",
            ),
            onFieldSubmitted: (string) {
              Navigator.of(context).push(
                PageRouteBuilder(
                  opaque: false,
                  pageBuilder: (BuildContext context, a, b) {
                    return SuggestionsScreen(token: string);
                  },
                ),
              );
            },
          ),
        ),
      ),
    );
  }
}

SuggestionsScreen

SuggestionsScreen 是一个简单的页面,用于展示搜索结果。以下是该类的示例代码:

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

class SuggestionsScreen extends StatefulWidget {
  final String token;

  SuggestionsScreen({required this.token});

  [@override](/user/override)
  _SuggestionsScreenState createState() => _SuggestionsScreenState();
}

class _SuggestionsScreenState extends State<SuggestionsScreen> {
  List<String> suggestions = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    fetchSuggestions(widget.token);
  }

  Future<void> fetchSuggestions(String token) async {
    var client = DaDataClient(token: token);
    var response = await client.suggest(SuggestionType.address, '');

    if (response != null && response.success) {
      setState(() {
        suggestions = response.suggestions.map((e) => e.value).toList();
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('搜索结果'),
      ),
      body: ListView.builder(
        itemCount: suggestions.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(suggestions[index]),
          );
        },
      ),
    );
  }
}

更多关于Flutter数据搜索与自动补全插件dadata的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据搜索与自动补全插件dadata的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用Dadata进行数据搜索和自动补全可以通过集成Dadata的API来实现。Dadata是一个提供地址、公司、银行等数据补全和验证服务的API。以下是如何在Flutter中使用Dadata进行数据搜索和自动补全的步骤:

1. 获取Dadata API密钥

首先,你需要在Dadata注册并获取API密钥。

2. 添加依赖

pubspec.yaml文件中添加http包,用于发送HTTP请求:

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3

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

3. 创建Dadata服务类

创建一个Dadata服务类,用于发送请求和处理响应。

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

class DadataService {
  final String apiKey;
  final String baseUrl = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address';

  DadataService(this.apiKey);

  Future<List<String>> getSuggestions(String query) async {
    final response = await http.post(
      Uri.parse(baseUrl),
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Authorization': 'Token $apiKey',
      },
      body: jsonEncode({
        'query': query,
        'count': 5,
      }),
    );

    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      final suggestions = data['suggestions'] as List;
      return suggestions.map<String>((suggestion) => suggestion['value'] as String).toList();
    } else {
      throw Exception('Failed to load suggestions');
    }
  }
}

4. 在UI中使用Dadata服务

在你的Flutter应用中,使用TextFieldFutureBuilder来实现自动补全功能。

import 'package:flutter/material.dart';
import 'darta_service.dart'; // 导入Dadata服务类

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Dadata Autocomplete Example'),
        ),
        body: AutocompleteExample(),
      ),
    );
  }
}

class AutocompleteExample extends StatefulWidget {
  [@override](/user/override)
  _AutocompleteExampleState createState() => _AutocompleteExampleState();
}

class _AutocompleteExampleState extends State<AutocompleteExample> {
  final DadataService dadataService = DadataService('YOUR_DADATA_API_KEY');

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Autocomplete<String>(
        optionsBuilder: (TextEditingValue textEditingValue) async {
          if (textEditingValue.text.isEmpty) {
            return const Iterable<String>.empty();
          }
          return await dadataService.getSuggestions(textEditingValue.text);
        },
        onSelected: (String selection) {
          print('You just selected $selection');
        },
      ),
    );
  }
}
回到顶部