老铁记得 转发 ,猫哥会出现更多 Flutter 好文~~~~

微信 flutter 研修群 ducafecat

我的项目地址

https://github.com/ducafecat/...

界面

代码剖析

外围代码 lib/responsive.dart

通过 MediaQuery 查问界面宽高尺寸,来决定你是那个布局计划。

import 'package:flutter/material.dart';class Responsive extends StatelessWidget {  final Widget mobile;  final Widget tablet;  final Widget desktop;  const Responsive({    Key key,    @required this.mobile,    this.tablet,    @required this.desktop,  }) : super(key: key);// This size work fine on my design, maybe you need some customization depends on your design  // This isMobile, isTablet, isDesktop helep us later  static bool isMobile(BuildContext context) =>      MediaQuery.of(context).size.width < 850;  static bool isTablet(BuildContext context) =>      MediaQuery.of(context).size.width < 1100 &&      MediaQuery.of(context).size.width >= 850;  static bool isDesktop(BuildContext context) =>      MediaQuery.of(context).size.width >= 1100;  @override  Widget build(BuildContext context) {    final Size _size = MediaQuery.of(context).size;    // If our width is more than 1100 then we consider it a desktop    if (_size.width >= 1100) {      return desktop;    }    // If width it less then 1100 and more then 850 we consider it as tablet    else if (_size.width >= 850 && tablet != null) {      return tablet;    }    // Or less then that we called it mobile    else {      return mobile;    }  }}

业务界面解决细节

通过 if (!Responsive.isMobile(context)) 这样的形式去判断执行

lib/screens/main/main_screen.dart

class MainScreen extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Scaffold(      key: context.read<MenuController>().scaffoldKey,      drawer: SideMenu(),      body: SafeArea(        child: Row(          crossAxisAlignment: CrossAxisAlignment.start,          children: [            // We want this side menu only for large screen            if (Responsive.isDesktop(context))              Expanded(                // default flex = 1                // and it takes 1/6 part of the screen                child: SideMenu(),              ),            Expanded(              // It takes 5/6 part of the screen              flex: 5,              child: DashboardScreen(),            ),          ],        ),      ),    );  }}
  • lib/screens/dashboard/dashboard_screen.dart
class DashboardScreen extends StatelessWidget {  @override  Widget build(BuildContext context) {    return SafeArea(      child: SingleChildScrollView(        padding: EdgeInsets.all(defaultPadding),        child: Column(          children: [            Header(),            SizedBox(height: defaultPadding),            Row(              crossAxisAlignment: CrossAxisAlignment.start,              children: [                Expanded(                  flex: 5,                  child: Column(                    children: [                      MyFiels(),                      SizedBox(height: defaultPadding),                      RecentFiles(),                      if (Responsive.isMobile(context))                        SizedBox(height: defaultPadding),                      if (Responsive.isMobile(context)) StarageDetails(),                    ],                  ),                ),                if (!Responsive.isMobile(context))                  SizedBox(width: defaultPadding),                // On Mobile means if the screen is less than 850 we dont want to show it                if (!Responsive.isMobile(context))                  Expanded(                    flex: 2,                    child: StarageDetails(),                  ),              ],            )          ],        ),      ),    );  }}

© 猫哥

https://ducafecat.tech/

https://github.com/ducafecat

往期

开源

GetX Quick Start

https://github.com/ducafecat/...

新闻客户端

https://github.com/ducafecat/...

strapi 手册译文

https://getstrapi.cn

微信探讨群 ducafecat

系列汇合

译文

https://ducafecat.tech/catego...

Dart 编程语言根底

https://space.bilibili.com/40...

Flutter 零根底入门

https://space.bilibili.com/40...

Flutter 实战从零开始 新闻客户端

https://space.bilibili.com/40...

Flutter 组件开发

https://space.bilibili.com/40...

Flutter Bloc

https://space.bilibili.com/40...

Flutter Getx4

https://space.bilibili.com/40...

Docker Yapi

https://space.bilibili.com/40...