Flutter新用户引导插件qs_onboarding_package的使用

Flutter新用户引导插件qs_onboarding_package的使用

功能

qs_onboarding_package 是一个用于提供高效的新用户引导流程的 Flutter 包。它支持版本更新检查和用户通知,非常适合需要流畅新用户引导体验的应用。

  • 版本更新检查
  • 用户通知(适用于各种状态)
  • 易于与现有项目集成

开始使用

要使用此包,请在 pubspec.yaml 文件中添加 qs_onboarding_package 作为依赖项:

dependencies:
  qs_onboarding_package: ^0.0.2

使用示例

以下是一个完整的示例,展示了如何在应用中使用 qs_onboarding_package

示例代码

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:qs_onboarding_package/onboarding_screen.dart';
import 'package:qs_onboarding_package/screens/error_page.dart';
import 'package:restart_app/restart_app.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const BoardingPage(),
      routes: {
        '/home': (context) => const HomePage(),
        '/error': (context) => ErrorPage(
          onRestart: () => Restart.restartApp(),
        ),
      },
    );
  }
}

class BoardingPage extends StatefulWidget {
  const BoardingPage({super.key});

  @override
  State<BoardingPage> createState() => _BoardingPageState();
}

class _BoardingPageState extends State<BoardingPage> {
  late Future<PackageInfo> _packageInfoFuture;

  @override
  void initState() {
    super.initState();
    _packageInfoFuture = _initPackageInfo();
  }

  Future<PackageInfo> _initPackageInfo() async {
    return await PackageInfo.fromPlatform();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<PackageInfo>(
      future: _packageInfoFuture,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const Center(child: CircularProgressIndicator());
        } else if (snapshot.hasError) {
          return Scaffold(
            body: Center(
              child: Text('Error: ${snapshot.error}'),
            ),
          );
        } else if (snapshot.hasData) {
          final packageInfo = snapshot.data!;
          return OnboardingWidget(
            baseUrl: 'http://172.20.10.2:8000/api',
            applicationId: 'md01',
            version: packageInfo.version,
            platform: Platform.isAndroid ? 'android' : 'ios',
            onRestart: () => Restart.restartApp(),
          );
        } else {
          return const Scaffold(
            body: Center(
              child: Text('Failed to load package info'),
            ),
          );
        }
      },
    );
  }
}

说明

  1. 初始化

    • MyApp 类中,我们定义了 MaterialApp 的基本配置,并将其初始页面设置为 BoardingPage
    • routes 字段定义了应用的路由表,以便根据不同的路径加载不同的页面。
  2. BoardingPage 类

    • 这是一个 StatefulWidget,用于处理引导页面的逻辑。
    • initState 方法中,我们调用 _initPackageInfo 方法来获取应用的信息。
    • _initPackageInfo 方法通过 PackageInfo.fromPlatform() 获取当前应用的信息。
  3. FutureBuilder

    • FutureBuilder 用于异步加载数据并根据加载状态显示不同的界面。
    • 当数据加载完成时,我们创建了一个 OnboardingWidget 实例,并传递必要的参数如 baseUrlapplicationIdversionplatform
  4. OnboardingWidget

    • OnboardingWidgetqs_onboarding_package 提供的一个组件,用于展示引导页。
    • onRestart 回调函数用于重新启动应用。

许可证

该包遵循 MIT 许可证。

// 这个包遵循 MIT 许可证。

更多关于Flutter新用户引导插件qs_onboarding_package的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter新用户引导插件qs_onboarding_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


qs_onboarding_package 是一个用于 Flutter 应用的新用户引导插件,它可以帮助开发者快速实现应用的新手引导功能。通过这个插件,你可以在应用启动时展示一系列引导页,帮助用户快速了解应用的主要功能和操作。

安装

首先,你需要在 pubspec.yaml 文件中添加 qs_onboarding_package 依赖:

dependencies:
  flutter:
    sdk: flutter
  qs_onboarding_package: ^1.0.0  # 请使用最新版本

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

使用步骤

  1. 导入包

    在你的 Dart 文件中导入 qs_onboarding_package

    import 'package:qs_onboarding_package/qs_onboarding_package.dart';
    
  2. 创建引导页内容

    你可以使用 OnboardingPage 类来创建引导页内容。每个引导页可以包含一个图片、一个标题、一个描述和一个按钮。

    final List<OnboardingPage> onboardingPages = [
      OnboardingPage(
        image: 'assets/images/onboarding1.png',
        title: 'Welcome to My App',
        description: 'This is a simple onboarding screen for your app.',
        buttonText: 'Next',
      ),
      OnboardingPage(
        image: 'assets/images/onboarding2.png',
        title: 'Explore Features',
        description: 'Discover all the amazing features of the app.',
        buttonText: 'Next',
      ),
      OnboardingPage(
        image: 'assets/images/onboarding3.png',
        title: 'Get Started',
        description: 'Start using the app and enjoy the experience.',
        buttonText: 'Get Started',
      ),
    ];
    
  3. 在应用中使用引导页

    你可以在应用的 main.dart 文件中使用 OnboardingScreen 来展示引导页。通常,你可以在用户首次启动应用时展示这些引导页。

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      
      // 例如,检查用户是否已经看过引导页
      bool hasSeenOnboarding = await checkIfUserHasSeenOnboarding();
    
      runApp(MyApp(hasSeenOnboarding: hasSeenOnboarding));
    }
    
    class MyApp extends StatelessWidget {
      final bool hasSeenOnboarding;
    
      const MyApp({Key? key, required this.hasSeenOnboarding}) : super(key: key);
    
      [@override](/user/override)
      Widget build(BuildContext context) {
        return MaterialApp(
          home: hasSeenOnboarding ? HomeScreen() : OnboardingScreen(
            pages: onboardingPages,
            onDone: () {
              // 用户完成引导页后的操作,例如导航到主页面
              Navigator.of(context).pushReplacement(
                MaterialPageRoute(builder: (context) => HomeScreen()),
              );
            },
          ),
        );
      }
    }
    
  4. 自定义引导页

    你可以根据需要自定义引导页的样式、动画等。qs_onboarding_package 提供了一些可配置的选项,例如:

    • backgroundColor: 引导页的背景颜色。
    • textColor: 引导页的文字颜色。
    • buttonColor: 引导页按钮的颜色。
    • buttonTextColor: 引导页按钮文字的颜色。
    • skipButtonText: 跳过按钮的文本。
    • skipButtonTextStyle: 跳过按钮的文本样式。

    例如:

    OnboardingScreen(
      pages: onboardingPages,
      onDone: () {
        Navigator.of(context).pushReplacement(
          MaterialPageRoute(builder: (context) => HomeScreen()),
        );
      },
      backgroundColor: Colors.white,
      textColor: Colors.black,
      buttonColor: Colors.blue,
      buttonTextColor: Colors.white,
      skipButtonText: 'Skip',
      skipButtonTextStyle: TextStyle(color: Colors.grey),
    );
    

示例代码

以下是一个完整的示例代码:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  bool hasSeenOnboarding = await checkIfUserHasSeenOnboarding();

  runApp(MyApp(hasSeenOnboarding: hasSeenOnboarding));
}

Future<bool> checkIfUserHasSeenOnboarding() async {
  // 在这里检查用户是否已经看过引导页
  return false; // 假设用户没有看过
}

class MyApp extends StatelessWidget {
  final bool hasSeenOnboarding;

  const MyApp({Key? key, required this.hasSeenOnboarding}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: hasSeenOnboarding ? HomeScreen() : OnboardingScreen(
        pages: onboardingPages,
        onDone: () {
          Navigator.of(context).pushReplacement(
            MaterialPageRoute(builder: (context) => HomeScreen()),
          );
        },
      ),
    );
  }
}

final List<OnboardingPage> onboardingPages = [
  OnboardingPage(
    image: 'assets/images/onboarding1.png',
    title: 'Welcome to My App',
    description: 'This is a simple onboarding screen for your app.',
    buttonText: 'Next',
  ),
  OnboardingPage(
    image: 'assets/images/onboarding2.png',
    title: 'Explore Features',
    description: 'Discover all the amazing features of the app.',
    buttonText: 'Next',
  ),
  OnboardingPage(
    image: 'assets/images/onboarding3.png',
    title: 'Get Started',
    description: 'Start using the app and enjoy the experience.',
    buttonText: 'Get Started',
  ),
];

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: Text('Welcome to the home screen!'),
      ),
    );
  }
}
回到顶部