Flutter Shopify店铺管理插件shopify_sheet的使用

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

Flutter Shopify店铺管理插件shopify_sheet的使用

功能

Shopify Sheet Flutter插件是一个强大的工具,可以将Shopify Checkout Sheet SDK无缝集成到您的Flutter应用中。该插件提供了简洁的API来启动Shopify Checkout Sheet,并处理完成、取消和错误等事件。

主要功能

  • 在Flutter应用中启动Shopify Checkout Sheet。
  • 使用结构化的枚举处理完成、取消和失败等事件。
  • 全面兼容Flutter的现代嵌入(v2)。

开始使用

1. 安装

pubspec.yaml文件中添加以下依赖:

dependencies:
  shopify_sheet: ^0.0.2

然后运行以下命令以获取包:

flutter pub get

2. Android配置

2.1 更新MainActivity

为了支持Shopify Checkout Sheet,您的应用的MainActivity必须继承自FlutterFragmentActivity而不是FlutterActivity

更新您的MainActivity

路径: android/app/src/main/kotlin/<your-package-name>/MainActivity.kt

package <your-package-name>

import io.flutter.embedding.android.FlutterFragmentActivity

class MainActivity : FlutterFragmentActivity() {
    // 不需要额外的代码
}

2.2 更新AndroidManifest.xml

确保您的AndroidManifest.xml文件引用了更新后的MainActivity

路径: android/app/src/main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="<your-package-name>">

    <application
        android:label="your_app"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/NormalTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

2.3 更新build.gradle

应用级build.gradle

在您的应用级build.gradle文件的dependencies块中添加以下依赖项:

路径: android/app/build.gradle

dependencies {
    implementation "androidx.activity:activity:1.7.2" // 对于ComponentActivity兼容性
    implementation "androidx.fragment:fragment:1.5.7" // 支持片段(由FlutterFragmentActivity内部使用)
    implementation "com.google.android.material:material:1.9.0" // 如果需要,Material组件
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1" // 事件处理生命周期
}

2.4 最低SDK版本

确保您的build.gradle文件中的minSdkVersion至少为23:

android {
    defaultConfig {
        minSdkVersion 23
    }
}

3. iOS配置

确保项目的依赖版本大于或等于13.0。


4. 使用

4.1 启动Shopify Checkout

以下是启动Shopify Checkout Sheet并监听事件的方法:

import 'package:shopify_sheet/shopify_sheet.dart';
import 'package:flutter/material.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 MaterialApp(
      home: ShopifyCheckoutDemo(),
    );
  }
}

class ShopifyCheckoutDemo extends StatefulWidget {
  [@override](/user/override)
  State<ShopifyCheckoutDemo> createState() => _ShopifyCheckoutDemoState();
}

class _ShopifyCheckoutDemoState extends State<ShopifyCheckoutDemo> {
  final ShopifySheet _shopifySheet = ShopifySheet();

  [@override](/user/override)
  void initState() {
    super.initState();

    // 监听checkout事件
    _shopifySheet.checkoutEvents.listen((event) {
      switch (event.type) {
        case ShopifySheetEventType.completed:
          print("Checkout Completed");
          break;
        case ShopifySheetEventType.canceled:
          print("Checkout Canceled");
          break;
        case ShopifySheetEventType.failed:
          print("Checkout Failed: ${event.error}");
          break;
        case ShopifySheetEventType.pixelEvent:
          print("Pixel Event: ${event.data}");
          break;
        case ShopifySheetEventType.unknown:
        default:
          print("Unknown Event");
      }
    });
  }

  void _launchCheckout() {
    _shopifySheet.launchCheckout(
      "https://your-shopify-store.myshopify.com/cart/c/valid-key"
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Shopify Checkout Plugin")),
      body: Center(
        child: ElevatedButton(
          onPressed: _launchCheckout,
          child: const Text("Launch Checkout"),
        ),
      ),
    );
  }
}

更多关于Flutter Shopify店铺管理插件shopify_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Shopify店铺管理插件shopify_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用shopify_sheet插件来管理Shopify店铺的示例代码。shopify_sheet是一个假设的插件名称,因为实际上在Flutter社区中可能没有一个直接名为shopify_sheet的官方插件。不过,我会基于一般的Shopify API集成流程来展示一个类似的实现方法。

在实际应用中,你可能会使用如flutter_graphql_clientdio等HTTP客户端库来与Shopify的GraphQL API进行交互。以下是一个基本的示例,展示了如何设置Shopify API客户端并获取店铺信息。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加必要的依赖,比如用于HTTP请求的库:

dependencies:
  flutter:
    sdk: flutter
  dio: ^4.0.0  # 用于HTTP请求的库
  flutter_graphql_client: ^5.0.0  # 假设你使用GraphQL客户端库

2. 设置Shopify API客户端

创建一个新的Dart文件,比如shopify_api_client.dart,用于封装Shopify API的请求逻辑。

import 'package:dio/dio.dart';

class ShopifyApiClient {
  final String storefrontAccessToken;
  final String storeDomain;

  late Dio dio;

  ShopifyApiClient({required this.storefrontAccessToken, required this.storeDomain}) {
    dio = Dio(
      BaseOptions(
        baseUrl: "https://$storeDomain.myshopify.com/admin/api/2022-10/graphql.json",
        headers: {
          'X-Shopify-Storefront-Access-Token': storefrontAccessToken,
          'Content-Type': 'application/json',
        },
      ),
    );
  }

  Future<Map<String, dynamic>> query(String query) async {
    try {
      Response<Map<String, dynamic>> response = await dio.post(
        '',
        data: {'query': query},
      );
      return response.data;
    } catch (e) {
      throw e;
    }
  }
}

3. 使用Shopify API客户端获取店铺信息

在你的主应用逻辑中,使用上述客户端来获取店铺信息。

import 'package:flutter/material.dart';
import 'package:your_app/shopify_api_client.dart';

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

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

class _MyAppState extends State<MyApp> {
  late ShopifyApiClient shopifyApiClient;
  String? shopName;

  @override
  void initState() {
    super.initState();
    // 初始化Shopify API客户端
    shopifyApiClient = ShopifyApiClient(
      storefrontAccessToken: 'YOUR_STOREFRONT_ACCESS_TOKEN',
      storeDomain: 'YOUR_STORE_DOMAIN',
    );

    // 获取店铺信息
    _fetchShopInfo();
  }

  Future<void> _fetchShopInfo() async {
    String query = """
    {
      shop {
        name
      }
    }
    """;

    try {
      Map<String, dynamic> result = await shopifyApiClient.query(query);
      if (result['data']?['shop'] != null) {
        setState(() {
          shopName = result['data']['shop']['name'];
        });
      }
    } catch (e) {
      print('Error fetching shop info: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Shopify Shop Management'),
        ),
        body: Center(
          child: shopName != null
              ? Text('Shop Name: $shopName')
              : CircularProgressIndicator(),
        ),
      ),
    );
  }
}

注意事项

  1. 安全性:不要将API密钥和域名硬编码在应用中,特别是在生产环境中。考虑使用安全存储或环境变量。
  2. 错误处理:在实际应用中,添加更详细的错误处理和用户反馈。
  3. 依赖管理:确保你使用的库版本与Flutter和Dart的当前版本兼容。
  4. Shopify API限制:了解Shopify API的速率限制和配额,以避免触发限制。

这个示例展示了如何在Flutter应用中集成Shopify API以获取店铺信息。根据你的具体需求,你可能需要调整查询语句或添加更多的API调用。

回到顶部