Flutter分屏显示插件flutter_split_view的使用

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

Flutter分屏显示插件flutter_split_view的使用

flutter_split_view 是一个基于 Navigator 2.0 的 Flutter 插件,它可以根据可用空间自动将屏幕分成两个视图。以下是如何使用该插件的详细说明和示例代码。

使用方法

Material 风格

MaterialApp(
  title: 'SplitView Demo',
  home: SplitView.material(
    child: MainPage(),
  ),
);

Cupertino 风格

CupertinoApp(
  title: 'SplitView Demo',
  home: SplitView.cupertino(
    child: MainPage(),
  ),
);

导航

推送页面

SplitView.of(context).push(SecondPage());

推送页面时可以设置一个可选的标题,该标题将在 Cupertino 风格中用作返回按钮的标题:

SplitView.of(context).push(
  SecondPage(),
  title: 'Second',
);

返回上一页

SplitView.of(context).pop();

返回到第 n 页:

SplitView.of(context).popUntil(1);

设置次级视图显示的页面

SplitView.of(context).setSecondary(SecondPage());

这将清除栈并推送新页面,使其成为栈中的第二页。

检查次级视图是否可见

SplitView.of(context).isSecondaryVisible;

示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_split_view 插件:

// ignore_for_file: prefer_const_constructors, prefer_const_constructors_in_immutables

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: SplitView.material(
        child: MainPage(),
        placeholder: PlaceholderPage(),
      ),
    );
  }
}

class MainPage extends StatelessWidget {
  const MainPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: ElevatedButton(
          child: Text('click'),
          onPressed: () {
            SplitView.of(context).setSecondary(
              SecondPage(),
              title: 'Second',
            );
          },
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  const SecondPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second'),
      ),
      body: Center(
        child: Builder(builder: (context) {
          return Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              ElevatedButton(
                child: Text('back'),
                onPressed: () {
                  SplitView.of(context).pop();
                },
              ),
              SizedBox(height: 16),
              ElevatedButton(
                child: Text('forward'),
                onPressed: () {
                  SplitView.of(context).push(
                    ThirdPage(),
                    title: 'Third',
                  );
                },
              ),
            ],
          );
        }),
      ),
    );
  }
}

class ThirdPage extends StatelessWidget {
  const ThirdPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Third'),
      ),
      body: Center(
        child: Builder(builder: (context) {
          return ElevatedButton(
            child: Text('back'),
            onPressed: () {
              SplitView.of(context).pop();
            },
          );
        }),
      ),
    );
  }
}

class PlaceholderPage extends StatelessWidget {
  const PlaceholderPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          'Click the button in main view to push to here',
          style: TextStyle(
            fontSize: 16,
            color: Colors.grey,
          ),
        ),
      ),
    );
  }
}

通过上述代码,你可以看到如何在主视图中点击按钮来显示次级视图,并在次级视图中进行导航操作。希望这些信息对你有所帮助!


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

1 回复

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


当然,以下是一个关于如何使用 flutter_split_view 插件在 Flutter 中实现分屏显示的示例代码。这个插件允许你在一个屏幕上并排显示两个或多个子视图,并且可以调整它们之间的分隔线位置。

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

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

然后运行 flutter pub get 以获取依赖。

接下来是一个简单的示例代码,展示如何使用 flutter_split_view 来创建一个分屏显示:

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final double initialPrimaryPaneWeight = 0.7; // 初始主窗格权重

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Split View Example'),
      ),
      body: SplitView(
        orientation: Axis.horizontal, // 水平分屏,也可以设置为 Axis.vertical 垂直分屏
        initialPrimaryPaneWeight: initialPrimaryPaneWeight,
        primaryPane: Container(
          color: Colors.blueGrey,
          child: Center(
            child: Text(
              'Primary Pane',
              style: TextStyle(color: Colors.white, fontSize: 24),
            ),
          ),
        ),
        secondaryPane: Container(
          color: Colors.amber,
          child: Center(
            child: Text(
              'Secondary Pane',
              style: TextStyle(color: Colors.black, fontSize: 24),
            ),
          ),
        ),
        onPaneWeightChanged: (newWeight) {
          // 当窗格权重变化时,可以在这里处理逻辑
          print('Primary Pane Weight: $newWeight');
        },
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个基本的 Flutter 应用,并添加了 flutter_split_view 依赖。
  2. SplitView 组件用于创建分屏视图。orientation 属性决定了分屏的方向(水平或垂直)。
  3. initialPrimaryPaneWeight 属性用于设置初始主窗格的权重(0.0 到 1.0 之间)。
  4. primaryPanesecondaryPane 分别定义了主窗格和次窗格的内容。
  5. onPaneWeightChanged 回调用于在窗格权重变化时执行一些逻辑(例如,打印新的权重)。

运行这个代码,你将看到一个水平分屏的界面,可以拖动分隔线来调整两个窗格的宽度。

希望这个示例能帮助你理解如何在 Flutter 中使用 flutter_split_view 插件实现分屏显示。

回到顶部