Flutter JSON API交互插件wp_json_api的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter JSON API交互插件 wp_json_api 的使用

概述

wp_json_api 是一个用于与 WordPress 和 WooCommerce 进行 JSON API 交互的 Dart 包,适用于 Flutter 应用。要使用此包,您需要先在您的 WordPress 网站上安装 WP JSON API 插件

安装

在您的 Flutter 项目中添加依赖:

dependencies:
  wp_json_api: ^4.2.1

初始化

在使用 wp_json_api 之前,您需要初始化它并指定您的 WordPress 站点的基础 URL:

import 'package:wp_json_api/wp_json_api.dart';

void main() {
  WPJsonAPI.instance.init(baseUrl: "https://mysite.com");
}

使用示例

登录用户

以下是一个完整的示例,展示了如何使用 wp_json_api 来登录用户,并获取用户信息:

import 'package:flutter/material.dart';
import 'package:wp_json_api/enums/wp_auth_type.dart';
import 'package:wp_json_api/models/responses/wp_user_info_response.dart';
import 'package:wp_json_api/models/responses/wp_user_login_response.dart';
import 'package:wp_json_api/wp_json_api.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'WooSignal Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'WooSignal Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TextEditingController _tfEmailController = TextEditingController();
  TextEditingController _tfPasswordController = TextEditingController();

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

    // 初始化 WP JSON API
    WPJsonAPI.instance.init(baseUrl: "http://mysite.com");
  }

  Future<void> _login() async {
    String email = _tfEmailController.text;
    String password = _tfPasswordController.text;

    try {
      // 尝试登录
      WPUserLoginResponse wpUserLoginResponse = await WPJsonAPI.instance.api((request) =>
          request.wpLogin(email: email, password: password, authType: WPAuthType.WpEmail));

      if (wpUserLoginResponse == null || wpUserLoginResponse.data == null) {
        print("无效的登录信息");
        return;
      }

      print("用户 Token: ${wpUserLoginResponse.data?.userToken}");
      print("用户 ID: ${wpUserLoginResponse.data?.userId}");

      // 获取用户信息
      WPUserInfoResponse wpUserInfoResponse =
          await WPJsonAPI.instance.api((request) => request.wpGetUserInfo());

      if (wpUserInfoResponse != null && wpUserInfoResponse.data != null) {
        print("First Name: ${wpUserInfoResponse.data?.firstName}");
        print("Last Name: ${wpUserInfoResponse.data?.lastName}");
      } else {
        print("获取用户信息失败");
      }
    } catch (e) {
      print("登录失败: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              controller: _tfEmailController,
              keyboardType: TextInputType.emailAddress,
              decoration: InputDecoration(labelText: "Email"),
            ),
            TextField(
              controller: _tfPasswordController,
              keyboardType: TextInputType.text,
              obscureText: true,
              decoration: InputDecoration(labelText: "Password"),
            ),
            MaterialButton(
              child: Text("Login"),
              onPressed: _login,
            )
          ],
        ),
      ),
    );
  }
}

注册用户

以下是如何使用 wp_json_api 注册新用户的示例:

Future<void> _register() async {
  String email = _tfEmailController.text;
  String password = _tfPasswordController.text;

  try {
    WPUserRegisterResponse wpUserRegisterResponse = await WPJsonAPI.instance.api((request) =>
        request.wpRegister(email: email, password: password));

    if (wpUserRegisterResponse != null && wpUserRegisterResponse.data != null) {
      print("注册成功: 用户名 ${wpUserRegisterResponse.data?.username}");
    } else {
      print("注册失败");
    }
  } catch (e) {
    print("注册失败: $e");
  }
}

获取用户信息

在用户登录后,您可以调用以下方法来获取用户信息:

WPUserInfoResponse wpUserInfoResponse = await WPJsonAPI.instance.api((request) => request.wpGetUserInfo());
if (wpUserInfoResponse != null && wpUserInfoResponse.data != null) {
  print("First Name: ${wpUserInfoResponse.data?.firstName}");
  print("Last Name: ${wpUserInfoResponse.data?.lastName}");
} else {
  print("获取用户信息失败");
}

更新用户信息

在用户登录后,您可以调用以下方法来更新用户信息:

WPUserInfoUpdatedResponse wpUserInfoUpdatedResponse = await WPJsonAPI.instance.api((request) => request.wpUpdateUserInfo(
  firstName: "NewFirstName",
  lastName: "NewLastName",
  displayName: "NewDisplayName"
));
if (wpUserInfoUpdatedResponse != null && wpUserInfoUpdatedResponse.data != null) {
  print("用户信息更新成功");
} else {
  print("用户信息更新失败");
}

其他可用 API 请求

  • 获取 Nonce:

    WPNonceResponse wpNonceResponse = await WPJsonAPI.instance.api((request) => request.wpNonce());
    
  • 验证 Nonce:

    WPNonceVerifiedResponse wpNonceVerifiedResponse = await WPJsonAPI.instance.api((request) => request.wpNonceVerify(nonce: nonce));
    
  • 删除用户:

    WPUserDeleteResponse wpUserDeleteResponse = await WPJsonAPI.instance.api((request) => request.wpUserDelete());
    
  • 添加角色给用户:

    WPUserAddRoleResponse wpUserAddRoleResponse = await WPJsonAPI.instance.api((request) => request.wpUserAddRole(role: "customer"));
    
  • 移除用户的角色:

    WPUserRemoveRoleResponse wpUserRemoveRoleResponse = await WPJsonAPI.instance.api((request) => request.wpUserRemoveRole(role: "customer"));
    
  • 获取 WooCommerce 用户信息:

    WCCustomerInfoResponse wcCustomerInfoResponse = await WPJsonAPI.instance.api((request) => request.wcCustomerInfo(userToken));
    
  • 更新 WooCommerce 用户信息:

    WCCustomerUpdatedResponse wcCustomerUpdatedResponse = await WPJsonAPI.instance.api((request) => request.wcUpdateCustomerInfo(firstName: "NewFirstName"));
    
  • 获取用户积分:

    WcPointsAndRewardUser wcPointsAndRewardUser = await WPJsonAPI.instance.api((request) => request.wcPointsAndRewardsUser());
    
  • 计算积分价值:

    WcPointsAndRewardCalculatePoints wcPointsAndRewardsCalculatePoints = await WPJsonAPI.instance.api((request) => request.wcPointsAndRewardsCalculatePoints(points: 100));
    

结论

通过 wp_json_api,您可以轻松地与 WordPress 和 WooCommerce 进行交互,执行诸如用户注册、登录、获取和更新用户信息等操作。确保您已经在 WordPress 站点上安装了 WP JSON API 插件,以确保这些 API 请求能够正常工作。


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

1 回复

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


当然,以下是一个关于如何在Flutter中使用wp_json_api插件与WordPress的JSON API进行交互的代码示例。wp_json_api插件为WordPress网站提供了一个RESTful API接口,使你可以通过HTTP请求获取和发布内容。

首先,确保你已经在pubspec.yaml文件中添加了http依赖,因为我们将使用它来发送HTTP请求。

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 请检查最新版本号

然后,你可以创建一个Flutter服务类来处理与WordPress API的交互。以下是一个简单的示例:

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

class WordPressService {
  final String apiUrl;

  WordPressService({required this.apiUrl});

  // 获取帖子列表
  Future<List<dynamic>> fetchPosts() async {
    final response = await http.get(Uri.parse('$apiUrl/wp/v2/posts'));

    if (response.statusCode == 200) {
      List<dynamic> posts = jsonDecode(response.body);
      return posts;
    } else {
      throw Exception('Failed to load posts');
    }
  }

  // 获取单个帖子
  Future<dynamic> fetchPost(int id) async {
    final response = await http.get(Uri.parse('$apiUrl/wp/v2/posts/$id'));

    if (response.statusCode == 200) {
      dynamic post = jsonDecode(response.body);
      return post;
    } else {
      throw Exception('Failed to load post');
    }
  }

  // 创建新帖子(示例数据)
  Future<dynamic> createPost({
    required String title,
    required String content,
  }) async {
    final url = Uri.parse('$apiUrl/wp/v2/posts');
    final body = jsonEncode({
      'title': {'rendered': title},
      'content': {'rendered': content},
      'status': 'publish',
    });

    final response = await http.post(url, headers: <String, String>{
      'Content-Type': 'application/json',
    }, body: body);

    if (response.statusCode == 201) {
      dynamic post = jsonDecode(response.body);
      return post;
    } else {
      throw Exception('Failed to create post');
    }
  }
}

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final WordPressService _service = WordPressService(apiUrl: 'https://yourwordpresssite.com/wp-json');
  List<dynamic> _posts = [];

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

  Future<void> _fetchPosts() async {
    try {
      final posts = await _service.fetchPosts();
      setState(() {
        _posts = posts;
      });
    } catch (error) {
      print(error);
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('WordPress API Demo'),
        ),
        body: ListView.builder(
          itemCount: _posts.length,
          itemBuilder: (context, index) {
            final post = _posts[index];
            return ListTile(
              title: Text(post['title']['rendered']),
              subtitle: Text(post['excerpt']['rendered']),
            );
          },
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () async {
            try {
              final newPost = await _service.createPost(
                title: 'New Post Title',
                content: 'This is the content of the new post.',
              );
              print('New post created: ${newPost['title']['rendered']}');
              _fetchPosts(); // 重新获取帖子列表以显示新帖子
            } catch (error) {
              print(error);
            }
          },
          tooltip: 'Create Post',
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个WordPressService类来处理与WordPress API的交互,包括获取帖子列表、获取单个帖子和创建新帖子。然后在MyApp中,我们使用这个服务来显示帖子列表并提供一个按钮来创建新帖子。

请注意,你需要将https://yourwordpresssite.com/wp-json替换为你自己的WordPress网站的JSON API URL。此外,确保你的WordPress网站已经安装了并启用了wp_json_api插件或WordPress内置的REST API功能。

回到顶部