Flutter引导页插件onboarding_slider_flutter的使用

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

Flutter引导页插件onboarding_slider_flutter的使用

onboarding_slider_flutter 是一个用于创建引导页的 Flutter 插件。它允许开发者轻松地为应用添加美观且功能丰富的引导页面。

示例代码

以下是一个完整的示例代码,展示了如何使用 onboarding_slider_flutter 插件来创建引导页:

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  final PageController _pageController = PageController();

  HomeScreen({super.key});
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: OnBoard(
        pageController: _pageController,
        // 提供跳过回调或跳过按钮来处理跳过状态
        onSkip: () {
          // print('skipped');
        },
        // 提供完成回调或下一步按钮来处理完成状态
        onDone: () {
          // print('done tapped');
        },
        onBoardData: onBoardData,
        titleStyles: const TextStyle(
          color: Color(0xffFDFDFD),
          fontSize: 24,
          fontWeight: FontWeight.w600,
        ),
        descriptionStyles: const TextStyle(
          fontSize: 16,
          color: Color(0xffF0F0F0),
          fontWeight: FontWeight.w400,
        ),
        pageIndicatorStyle: const PageIndicatorStyle(
          width: 50,
          inactiveColor: Color(0xff9CC2E1),
          activeColor: Color(0xff0A74D7),
          inactiveSize: Size(12, 5),
          activeSize: Size(12, 5),
        ),
        startButton: SizedBox(
          width: 358,
          height: 42,
          child: ElevatedButton(
            style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all<Color>(
                const Color(0xff0A74D7),
              ),
            ),
            child: const Text(
              "Get Started",
              style: TextStyle(
                  fontWeight: FontWeight.w600,
                  color: Color(
                    0xfffdfdfd,
                  )),
            ),
            onPressed: () {},
          ),
        ),
        showSkip: true,

        imageWidth: 320,
        imageHeight: 320,
        decoration: const BoxDecoration(
          gradient: LinearGradient(
            begin: Alignment.topCenter,
            end: Alignment.bottomCenter,
            colors: [
              Color(0xff0a74d7),
              Color(0xff105DA5),
              Color(0xff144A7D),
              Color(0xff173B5D),
              Color(0xff1B2D3D),
              Color(0xff1D252E),
              Color(0xff1E1F1F),
            ],
          ),
        ),
      ),
    );
  }
}

// 引导数据列表
final List<OnBoardModel> onBoardData = [
  const OnBoardModel(
    title: "Flutter基础:入门指南",
    description: "通过此引导屏幕学习 Flutter 的基础知识",
    image: "assets/images/onboarding_carousel_1.png",
  ),
  const OnBoardModel(
    title: "精通 Flutter:高级技术和技巧",
    description: "通过此高级引导屏幕将你的 Flutter 技能提升到新的水平",
    image: 'assets/images/onboarding_carousel_2.png',
  ),
  const OnBoardModel(
    title: "设计师的 Flutter:创建令人惊叹的用户界面",
    description: "通过此面向设计师的引导屏幕释放你的创造力",
    image: 'assets/images/onboarding_carousel_3.png',
  ),
];

说明

  1. 导入包

    import 'package:flutter/material.dart';
    import 'package:onboarding_slider_flutter/onboarding_slider_flutter.dart';
    
  2. 初始化页面控制器

    final PageController _pageController = PageController();
    
  3. 定义引导数据

    final List<OnBoardModel> onBoardData = [
      const OnBoardModel(
        title: "Flutter基础:入门指南",
        description: "通过此引导屏幕学习 Flutter 的基础知识",
        image: "assets/images/onboarding_carousel_1.png",
      ),
      const OnBoardModel(
        title: "精通 Flutter:高级技术和技巧",
        description: "通过此高级引导屏幕将你的 Flutter 技能提升到新的水平",
        image: 'assets/images/onboarding_carousel_2.png',
      ),
      const OnBoardModel(
        title: "设计师的 Flutter:创建令人惊叹的用户界面",
        description: "通过此面向设计师的引导屏幕释放你的创造力",
        image: 'assets/images/onboarding_carousel_3.png',
      ),
    ];
    
  4. 使用 OnBoard 组件

    return Scaffold(
      body: OnBoard(
        pageController: _pageController,
        onSkip: () {
          // 跳过逻辑
        },
        onDone: () {
          // 完成逻辑
        },
        onBoardData: onBoardData,
        titleStyles: const TextStyle(
          color: Color(0xffFDFDFD),
          fontSize: 24,
          fontWeight: FontWeight.w600,
        ),
        descriptionStyles: const TextStyle(
          fontSize: 16,
          color: Color(0xffF0F0F0),
          fontWeight: FontWeight.w400,
        ),
        pageIndicatorStyle: const PageIndicatorStyle(
          width: 50,
          inactiveColor: Color(0xff9CC2E1),
          activeColor: Color(0xff0A74D7),
          inactiveSize: Size(12, 5),
          activeSize: Size(12, 5),
        ),
        startButton: SizedBox(
          width: 358,
          height: 42,
          child: ElevatedButton(
            style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all<Color>(
                const Color(0xff0A74D7),
              ),
            ),
            child: const Text(
              "Get Started",
              style: TextStyle(
                  fontWeight: FontWeight.w600,
                  color: Color(
                    0xfffdfdfd,
                  )),
            ),
            onPressed: () {},
          ),
        ),
        showSkip: true,
        imageWidth: 320,
        imageHeight: 320,
        decoration: const BoxDecoration(
          gradient: LinearGradient(
            begin: Alignment.topCenter,
            end: Alignment.bottomCenter,
            colors: [
              Color(0xff0a74d7),
              Color(0xff105DA5),
              Color(0xff144A7D),
              Color(0xff173B5D),
              Color(0xff1B2D3D),
              Color(0xff1D252E),
              Color(0xff1E1F1F),
            ],
          ),
        ),
      ),
    );
    

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

1 回复

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


当然,以下是如何在Flutter项目中使用onboarding_slider_flutter插件来创建引导页的一个简单示例。这个插件允许你通过滑动的方式展示一系列的引导页面。

首先,确保你已经在pubspec.yaml文件中添加了onboarding_slider_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  onboarding_slider_flutter: ^2.0.0  # 请检查最新版本号

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

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个完整的示例,展示如何创建一个包含三个引导页面的应用:

import 'package:flutter/material.dart';
import 'package:onboarding_slider_flutter/onboarding_slider.dart';

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

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

class OnboardingScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    List<Map<String, Object>> slides = [
      {
        "title": "Welcome!",
        "description": "This is the first slide of your onboarding process.",
        "image": Image.asset("assets/images/slide1.png"),  // 请确保你有这个资源文件
      },
      {
        "title": "Features",
        "description": "Discover the amazing features of our app.",
        "image": Image.asset("assets/images/slide2.png"),  // 请确保你有这个资源文件
      },
      {
        "title": "Get Started",
        "description": "Let's begin your journey with us.",
        "image": Image.asset("assets/images/slide3.png"),  // 请确保你有这个资源文件
      },
    ];

    return Scaffold(
      body: OnboardingSlider(
        .pages: List.generate(
          slides.length,
          (index) {
            return OnboardingSliderPage(
              title: Text(slides[index]["title"].toString()),
              description: Text(slides[index]["description"].toString()),
              image: slides[index]["image"],
              backgroundColor: Colors.white,
              bodyAlignment: Alignment.center,
              titleTextStyle: TextStyle(
                fontSize: 24.0,
                fontWeight: FontWeight.bold,
              ),
              descriptionTextStyle: TextStyle(
                fontSize: 18.0,
              ),
            );
          },
        ),
        dotsContainerBuilder: (BuildContext context, int currentPage) {
          return Container(
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.circular(10.0),
            ),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: List.generate(
                slides.length,
                (index) {
                  bool isActive = currentPage == index;

                  return Container(
                    width: isActive ? 12.0 : 8.0,
                    height: isActive ? 12.0 : 8.0,
                    margin: EdgeInsets.symmetric(horizontal: 4.0),
                    decoration: BoxDecoration(
                      shape: BoxShape.circle,
                      color: isActive ? Colors.blue : Colors.grey,
                    ),
                  );
                },
              ),
            );
          };
        },
        onCompleted: () {
          // 用户完成所有滑动后,执行的逻辑
          Navigator.pushReplacement(
            context,
            MaterialPageRoute(builder: (context) => HomeScreen()),
          );
        },
        skip: Text(
          'Skip',
          style: TextStyle(color: Colors.blue),
        ),
        next: Text(
          'Next',
          style: TextStyle(color: Colors.blue),
        ),
        dotColor: Colors.grey,
        activeDotColor: Colors.blue,
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text('Welcome to the Home Screen!'),
    );
  }
}

注意事项

  1. 资源文件:确保你在assets文件夹下有slide1.png, slide2.png, 和 slide3.png这三张图片。
  2. 插件版本:在pubspec.yaml文件中,请检查并使用onboarding_slider_flutter的最新版本。
  3. 自定义:你可以根据需要自定义每个页面的标题、描述、图片、背景颜色、文本样式等。

这个示例展示了如何使用onboarding_slider_flutter插件来创建一个简单的引导页流程,并在用户完成所有滑动后跳转到主屏幕。

回到顶部