Flutter微信功能集成插件wx_box的使用
Flutter微信功能集成插件wx_box的使用
wx_box
是一个用于在 Flutter 中创建具有可定制高度的盒子布局的插件。它允许你轻松地创建矩形、圆形、椭圆等形状的盒子,并且可以自定义颜色、边框、阴影等属性。
使用说明
要了解更多关于 wx_box
类及其引用的其他类,请参阅 API 参考文档。
示例代码
// 创建一个简单的矩形盒子
WxBox(
width: 50,
height: 50,
)
// 创建一个带阴影的圆形盒子
WxBox.circle(
color: Colors.amber,
radius: 25,
borderWidth: 5,
borderStyle: BorderStyle.solid,
borderColor: Theme.of(context).colorScheme.surface,
borderOffset: BorderSide.strokeAlignOutside,
alignment: Alignment.center,
child: Text(
'1',
style: Theme.of(context).textTheme.titleLarge,
),
)
// 创建一个椭圆形盒子
WxBox.stadium(
color: Colors.amber,
width: 150,
height: 50,
borderSide: BorderSide(
width: 5,
style: BorderStyle.solid,
color: Colors.black,
strokeAlign: BorderSide.strokeAlignOutside,
),
alignment: Alignment.center,
child: Text(
'text',
style: Theme.of(context).textTheme.titleLarge,
),
)
完整示例
以下是一个完整的 Flutter 应用程序示例,展示了如何使用 wx_box
插件来创建不同形状和样式的盒子。
import 'package:flutter/material.dart';
import 'package:wx_box/wx_box.dart';
import 'package:wx_text/wx_text.dart';
import 'package:wx_anchor/wx_anchor.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'WxBox Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: false,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 40),
const WxText.displayMedium('WxBox'),
const SizedBox(height: 40),
const Wrapper(
title: 'Rectangle Shape',
child: Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
spacing: 20,
children: [
WxAnimatedBox(
alignment: Alignment.center,
constraints: BoxConstraints(
minHeight: 45,
maxWidth: 100,
),
color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20,
vertical: 5,
),
borderStyle: BorderStyle.solid,
borderColor: Colors.red,
borderWidth: 1,
borderOffset: 7,
borderRadius: BorderRadius.all(Radius.circular(5)),
child: Text(
'Text',
style: TextStyle(
height: 1.15,
),
),
),
WxBox.square(
size: 45,
borderRadius: BorderRadius.all(Radius.circular(4)),
alignment: Alignment.center,
color: Colors.amber,
child: Text(
'Text',
style: TextStyle(
height: 1.15,
),
),
),
WxBox.square(
borderWidth: 1,
borderStyle: BorderStyle.solid,
borderColor: Colors.black87,
borderOffset: BorderSide.strokeAlignOutside,
borderRadius: BorderRadius.all(Radius.circular(4)),
padding: EdgeInsets.all(5),
child: Text(
'Text',
style: TextStyle(
height: 1.15,
),
),
),
],
),
),
const SizedBox(height: 20),
const Wrapper(
title: 'Circle Shape',
child: Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
spacing: 20,
children: [
WxBox.circle(
elevation: 2,
color: Colors.amber,
padding: EdgeInsets.all(10),
child: Text(
'9',
style: TextStyle(
height: 1.2,
),
),
),
WxAnimatedBox.circle(
radius: 25,
alignment: Alignment.center,
shadows: [
BoxShadow(
color: Colors.grey,
spreadRadius: 3,
blurRadius: 3,
offset: Offset(0, 0), // 改变阴影的位置
),
],
gradient: LinearGradient(
colors: [
Colors.teal,
Colors.indigo,
],
),
child: Text(
'Text',
style: TextStyle(
color: Colors.white,
height: 1.15,
),
),
),
ElevatedBox(),
],
),
),
const SizedBox(height: 20),
Wrapper(
title: 'Stadium Shape',
child: Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
spacing: 20,
children: [
const WxBox.stadium(
color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20,
vertical: 5,
),
child: Text(
'Text',
style: TextStyle(
height: 1.15,
),
),
),
WxAnimatedBox.stadium(
width: 150,
height: 50,
borderWidth: 1,
borderStyle: BorderStyle.solid,
borderColor: Theme.of(context).colorScheme.onSurface,
borderOffset: BorderSide.strokeAlignOutside,
clipBehavior: Clip.antiAlias,
child: Material(
type: MaterialType.transparency,
child: InkWell(
onTap: () {},
child: Center(
child: Text(
'Text',
style: Theme.of(context)
.textTheme
.titleLarge
?.copyWith(height: 1.15),
),
),
),
),
),
],
),
),
const SizedBox(height: 40),
],
),
),
),
);
}
}
class ElevatedBox extends StatefulWidget {
const ElevatedBox({super.key});
[@override](/user/override)
State<ElevatedBox> createState() => _ElevatedBoxState();
}
class _ElevatedBoxState extends State<ElevatedBox> {
bool _isHover = false;
bool _isPressed = false;
_setIsHover(bool val) {
setState(() => _isHover = val);
}
_setIsPressed(bool val) {
setState(() => _isPressed = val);
}
double get _elevation =>
_isPressed
? 0
: _isHover
? 3
: 0;
[@override](/user/override)
Widget build(BuildContext context) {
return WxAnchor.circle(
radius: 25,
onHover: (hover) => _setIsHover(hover),
onTapUp: (_) => _setIsPressed(false),
onTapDown: (_) => _setIsPressed(true),
onTapCancel: () => _setIsPressed(false),
child: WxAnimatedBox.circle(
elevation: _elevation,
radius: 25,
color: Colors.amber,
alignment: Alignment.center,
child: const Text(
'Text',
style: TextStyle(
color: Colors.white,
height: 1.15,
),
),
),
);
}
}
class Wrapper extends StatelessWidget {
const Wrapper({
super.key,
required this.title,
required this.child,
});
final String title;
final Widget child;
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(10, 0, 0, 0),
child: WxText.labelLarge(title),
),
SizedBox(
width: 300,
height: 100,
child: Card.outlined(
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Center(child: child),
),
),
),
],
);
}
}
更多关于Flutter微信功能集成插件wx_box的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter微信功能集成插件wx_box的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成微信功能,你可以使用wx_box
这个插件。wx_box
是一个用于集成微信登录、支付等功能的Flutter插件。以下是一个基本的代码示例,展示如何在Flutter项目中集成并使用wx_box
插件。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加wx_box
依赖:
dependencies:
flutter:
sdk: flutter
wx_box: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android和iOS
Android配置
在android/app/src/main/AndroidManifest.xml
中添加微信SDK所需的权限和Activity配置:
<uses-permission android:name="android.permission.INTERNET"/>
<application
... >
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="你的APPID"/> <!-- 替换为你的微信APPID -->
</intent-filter>
</activity>
</application>
创建wxapi
包和WXEntryActivity
类:
在android/app/src/main/java/com/yourpackage/
(替换为你的包名)下创建wxapi
包,并在其中添加WXEntryActivity.java
:
package com.yourpackage.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, "你的APPID", false);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {}
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {
if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
Toast.makeText(this, "分享成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "分享失败", Toast.LENGTH_SHORT).show();
}
}
finish();
}
}
iOS配置
在ios/Runner/Info.plist
中添加微信SDK所需的配置:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>weixinqbapi</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>你的APPID</string> <!-- 替换为你的微信APPID -->
</array>
</dict>
</array>
在ios/Runner/
目录下创建WXApiHandler.swift
(如果已存在则无需创建):
import UIKit
import WeChatSDK
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
WXApi.registerApp("你的APPID", with: self) // 替换为你的微信APPID
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return WXApi.handleOpen(url, delegate: self)
}
}
extension AppDelegate: WXApiDelegate {
func onReq(_ req: BaseReq) {
// 处理微信请求
}
func onResp(_ resp: BaseResp) {
if resp.type == WXResponseType.sendMessageToWX {
if resp.errCode == WXErrCode.success {
// 分享成功
} else {
// 分享失败
}
}
}
}
3. 使用wx_box
插件
在你的Flutter代码中,你可以这样使用wx_box
插件:
import 'package:flutter/material.dart';
import 'package:wx_box/wx_box.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('微信功能集成示例'),
),
body: Center(
child: ElevatedButton(
onPressed: _loginWithWeChat,
child: Text('微信登录'),
),
),
),
);
}
Future<void> _loginWithWeChat() async {
try {
// 初始化微信SDK(通常在应用启动时调用一次)
await WXBox.init("你的APPID"); // 替换为你的微信APPID
// 发起微信登录
var result = await WXBox.login();
print("微信登录结果: $result");
} catch (e) {
print("微信登录失败: $e");
}
}
}
请确保你已经正确配置了微信开放平台的APPID和相关权限,并且已经在微信开放平台上注册了你的应用。
注意:这只是一个基本的示例,实际应用中你可能需要处理更多的错误情况和用户交互。另外,由于微信SDK的更新和Flutter插件的维护情况,代码可能需要根据你的具体需求和环境进行调整。