Flutter响应式布局插件responsiveui_container的使用

Flutter响应式布局插件responsiveui_container的使用

Responsive Container

此组件通过包装LayoutBuilder来提供一个响应式的容器。它可用于构建移动设备、平板电脑和桌面的布局。

  • 移动端组件是必需的。
  • 如果缺少平板组件,则会渲染移动端组件。
  • 如果缺少桌面组件,则会渲染平板组件。
  • 平板组件的默认最小宽度为800像素,桌面组件的默认最小宽度为1200像素。

使用

要使用此插件,添加responsiveui_container依赖项到你的pubspec.yaml文件中。

示例

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: '响应式容器演示',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RContainer(
        mobile: MobileHomePage(),
        tablet: TabHomePage(),
        desktop: DesktopHomePage(),
      ),
    );
  }
}

class MobileHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("移动页面"),
      ),
      drawer: drawer(),
      body: Container(
        height: double.infinity,
        width: double.infinity,
        color: Colors.red,
      ),
    );
  }
}

class TabHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Row(
        children: [
          drawer(),
          Expanded(
            child: Container(
              height: double.infinity,
              width: double.infinity,
              color: Colors.blue,
            ),
          ),
        ],
      ),
    );
  }
}

class DesktopHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          desktopMenu(),
          Expanded(
            child: Container(
              height: double.infinity,
              width: double.infinity,
              color: Colors.green,
            ),
          ),
        ],
      ),
    );
  }
}

Widget drawer() {
  return Drawer(
    child: ListView(
      children: [
        ListTile(
          leading: Icon(Icons.home),
          title: Text("首页"),
        ),
        ListTile(
          leading: Icon(Icons.person),
          title: Text("登录"),
        ),
        ListTile(
          leading: Icon(Icons.info),
          title: Text("关于"),
        ),
      ],
    ),
  );
}

Widget desktopMenu() {
  return Row(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    children: [
      TextButton(onPressed: () {}, child: Icon(Icons.home)),
      TextButton(onPressed: () {}, child: Icon(Icons.person)),
      TextButton(onPressed: () {}, child: Icon(Icons.info)),
    ],
  );
}

移动端

class MobileHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("移动页面"),
      ),
      drawer: drawer(),
      body: Container(
        height: double.infinity,
        width: double.infinity,
        color: Colors.red,
      ),
    );
  }
}

平板端

class TabHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Row(
        children: [
          drawer(),
          Expanded(
            child: Container(
              height: double.infinity,
              width: double.infinity,
              color: Colors.blue,
            ),
          ),
        ],
      ),
    );
  }
}

桌面端

class DesktopHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          desktopMenu(),
          Expanded(
            child: Container(
              height: double.infinity,
              width: double.infinity,
              color: Colors.green,
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter响应式布局插件responsiveui_container的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter响应式布局插件responsiveui_container的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


responsiveui_container 是一个用于 Flutter 的响应式布局插件,它可以帮助你更轻松地创建适应不同屏幕尺寸的布局。这个插件允许你根据屏幕的宽度或高度来调整小部件的大小和位置。

安装

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

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

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

基本用法

responsiveui_container 提供了一个 ResponsiveContainer 小部件,它可以根据屏幕的宽度或高度来调整其子小部件的大小和位置。

1. 使用 ResponsiveContainer

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ResponsiveUI Container Example'),
        ),
        body: ResponsiveContainer(
          widthPercent: 0.8,  // 宽度占屏幕宽度的80%
          heightPercent: 0.5, // 高度占屏幕高度的50%
          child: Container(
            color: Colors.blue,
            child: Center(
              child: Text(
                'Responsive Container',
                style: TextStyle(color: Colors.white, fontSize: 20),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

在这个例子中,ResponsiveContainer 的宽度占屏幕宽度的80%,高度占屏幕高度的50%。它的子小部件是一个蓝色的 Container,其中包含一个居中的文本。

2. 使用 ResponsiveBuilder

ResponsiveBuilder 是一个更灵活的组件,它允许你根据屏幕的宽度或高度来动态调整布局。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ResponsiveUI Builder Example'),
        ),
        body: ResponsiveBuilder(
          builder: (context, constraints) {
            if (constraints.maxWidth > 600) {
              return Container(
                color: Colors.green,
                child: Center(
                  child: Text(
                    'Large Screen',
                    style: TextStyle(color: Colors.white, fontSize: 24),
                  ),
                ),
              );
            } else {
              return Container(
                color: Colors.red,
                child: Center(
                  child: Text(
                    'Small Screen',
                    style: TextStyle(color: Colors.white, fontSize: 18),
                  ),
                ),
              );
            }
          },
        ),
      ),
    );
  }
}
回到顶部