Flutter 应用程序和 Web 自适应 UI 布局

标签 flutter flutter-layout flutter-dependencies flutter-web

我一直在开发 flutter 移动应用程序,已经向 AppStore/PlayStore 发布了多个版本。 该代码是为移动应用程序设计而构建的。

我目前正在寻求使用相同代码库的支持网站。

同时支持移动应用和 Web 的问题之一是 UI 布局不同。

例如:我们将在网络中使用顶部栏操作,而在移动应用程序中使用底部栏导航。 我想我可以使用 kIsWeb 来创建不同的 appBar 和 BottomNavigationBar 对于每个屏幕中的每个 Scaffold 小部件。

if (kIsWeb){
\\ web code
}
else{
\\ app code
}

构建适用于使用相同代码库的移动应用和网站的自适应 UI 的最佳策略是什么?

最佳答案

根据您的用例修改此内容:)

1.) 定义约束

const mobileWidth = 480;
const tabletWidth = 900;
const desktopWidth = 1180;

2.) 创建一个响应式小部件,根据屏幕尺寸更改布局

class ResponsiveLayout extends StatelessWidget {
  const ResponsiveLayout({
    Key? key,
    this.mobileView,
    this.tabletView,
    this.desktopView,
  }) : super(key: key);
  final Widget? mobileView;
  final Widget? tabletView;
  final Widget? desktopView;

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(builder: (context, dimens) {
      if (dimens.maxWidth <= tabletWidth) {
        if (dimens.maxWidth <= mobileWidth) {
          return mobileView ?? Text("Mobile view");
        } else {
          return tabletView ?? Text("Tablet view");
        }
      } else {
        return desktopView ?? Text("Desktop view");
      }
    });
  }
}

3.) 在您想要的地方使用此响应式小部件

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

  @override
  Widget build(BuildContext context) {
    return const ResponsiveLayout(
      mobileView: CourseMobileScreen(),
      tabletView: CourseTabletScreen(),
      desktopView: CourseDesktopScreen(),
    );
  }
}

关于Flutter 应用程序和 Web 自适应 UI 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73759828/

相关文章:

flutter - Flutter 中的 Widgets Library 错误捕获的异常

listview - 调整平面按钮的大小并在 flutter 中提供水平滚动选项

dart - 如何在 flutter 中禁用手机后退

flutter - 读取后如何从StreamBuilder中删除数据?

flutter - flutter 中带有圆角的警报对话框

flutter - 使用 Flutter new integration_test 进行示例集成测试?

Flutter Scrollcontroller maxScrollExtent 不会到达列表末尾

Flutter AppBar 图标在所有屏幕上均不响应

android - 参数类型 'Object?' 不能分配给参数类型 'int'