Flutter启动屏幕插件init_screen的使用

Flutter启动屏幕插件init_screen的使用

init_screen 是一个易于使用的多功能启动屏幕插件,可以用来介绍你的应用程序。

示例用法

最简单的示例是在你的登录页面中返回 InitScreen 类。例如:

[@override](/user/override)
build(BuildContext context) {
    return InitScreen([Text("hi"), Text("am"), Text("sample content")]);
}

这将创建一个启动屏幕,并显示其三个子部件。你可以添加任何你想要的部件,但请注意 InitScreen 只会将它们居中。你需要自己设计布局。

修改

你可以改变很多与 InitScreen 类相关的行为和设置。有关完整的列表,请查看 InitScreen 类的文档。

这里有一个例子,展示如何自定义导航按钮:

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

    // 这个很重要!请确保 GlobalKey 是为 InitScreenState 设定的
    final GlobalKey<InitScreenState> _key = GlobalKey();

    _buildWithCustomNavs() {
        return InitScreen(
            // 显示的子部件
            [Text("test"), Text("[3]")],
            key: _key, // 需要用于回调
            customNavButtonBuilder: (index) { // 自定义导航按钮构建器
                return IconButton(
                    icon: Icon(Icons.ac_unit), // 使用你喜欢的图标
                    onPressed: () => _key.currentState.navBtnClick(index), // 必须使用公共回调
                );
            },
        );
    }

    [@override](/user/override)
    Widget build(BuildContext context) {
        return _buildWithCustomNavs();
    }
}

完整示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 init_screen 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'init_screen demo',
      home: MyHomePage(),
      theme: ThemeData(
        brightness: Brightness.light,
        primarySwatch: Colors.teal,
        primaryColor: Colors.teal.shade300,
      ),
      darkTheme: ThemeData(
        brightness: Brightness.dark,
        primarySwatch: Colors.teal,
        primaryColor: Colors.teal.shade300,
        accentColor: Colors.teal.shade300,
        toggleableActiveColor: Colors.teal.shade300,
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<InitScreenState> _key = GlobalKey();
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  var _controller = TextEditingController();
  final ValueNotifier<bool> isDone = ValueNotifier(false);
  bool done = false;

  _buildAGB() {
    return SingleChildScrollView(
      child: Container(
        padding: EdgeInsets.all(20),
        child: Text("AGB"), // 这里用 Text 代替 AGB 组件
      ),
    );
  }

  _buildWithCustomNavs() {
    return InitScreen(
      children: [Text("test"), _buildAGB(), Text("[3]")],
      key: _key, // 需要用于回调
      customNavButtonBuilder: (index) {
        // 自定义导航按钮构建器
        return IconButton(
          icon: Icon(Icons.ac_unit), // 使用你喜欢的图标
          onPressed: () => _key.currentState.navBtnClick(index), // 必须使用公共回调
        );
      },
    );
  }

  _buildWithValidator() {
    return InitScreen(
      children: [
        Padding(
          padding: EdgeInsets.only(left: 64, right: 64),
          child: Center(
            child: Form(
              key: _formKey,
              child: TextFormField(
                controller: _controller,
                validator: (val) {
                  if (val.isEmpty) return "Must not be empty!";
                  return null;
                },
              ),
            ),
          ),
        ),
        Text("Hey you reached me!")
      ],
      validatorKey: _formKey,
    );
  }

  _buildSimple() {
    isDone.addListener(() {
      setState(() {
        done = true;
      });
    });
    if (!done) {
      return InitScreen(
        isDoneNotifier: isDone,
        children: [Text("hi"), Text("am"), Text("simple")],
        // showNavHelpers: true,
      );
    } else {
      return Scaffold(
        body: Center(
          child: Text("done!"),
        ),
      );
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return _buildSimple();
  }
}

更多关于Flutter启动屏幕插件init_screen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter启动屏幕插件init_screen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用init_screen插件来显示启动屏幕的示例代码。这个插件可以帮助你在应用启动时显示一个自定义的启动屏幕,直到应用的主要内容加载完成。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  init_screen: ^x.y.z  # 替换为最新版本号

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

2. 创建启动屏幕布局

在你的lib目录下创建一个新的Dart文件,比如launch_screen.dart,来定义启动屏幕的布局:

import 'package:flutter/material.dart';

class LaunchScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Image.asset(
              'assets/launch_logo.png',  // 替换为你的启动Logo图片
              width: 200,
              height: 200,
            ),
            SizedBox(height: 20),
            CircularProgressIndicator(),  // 显示一个加载进度指示器
          ],
        ),
      ),
    );
  }
}

确保你的assets/launch_logo.png图片已经包含在项目中,并在pubspec.yaml中声明:

flutter:
  assets:
    - assets/launch_logo.png

3. 使用InitScreen包裹你的MaterialApp

在你的main.dart文件中,使用InitScreen来包裹你的MaterialApp,并指定启动屏幕和主页:

import 'package:flutter/material.dart';
import 'package:init_screen/init_screen.dart';
import 'launch_screen.dart';  // 导入启动屏幕布局
import 'home_screen.dart';  // 导入你的主页布局

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return InitScreen(
      screen: LaunchScreen(),  // 指定启动屏幕
      duration: 3000,  // 持续显示3秒(可以根据需要调整)
      onInitComplete: () {
        // 当初始化完成时,返回你的主页
        return MaterialApp(
          title: 'Flutter App',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: HomeScreen(),  // 替换为你的主页
        );
      },
    );
  }
}

4. 创建主页布局

最后,确保你有一个home_screen.dart文件来定义你的主页布局:

import 'package:flutter/material.dart';

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

总结

以上代码展示了如何在Flutter项目中使用init_screen插件来显示一个自定义的启动屏幕。你可以根据需要调整启动屏幕的布局和显示时间。希望这个示例对你有帮助!

回到顶部