猫哥说

这是个主动治理响应界面解决的组件,比拟适宜在 flutter web 的我的项目中。

主动治理了你的 Resizing、最大、最小尺寸、Scaling 缩放比例,然而我没有发现布局的管制,然而这曾经很不错了,又能够少写代码了。

  • 最小尺寸成果

https://gallery.codelessly.co...

  • Flutter.dev 官网

https://gallery.codelessly.co...

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

微信群 ducafecat

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

原文

https://medium.com/flutterdev...

代码

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

参考

  • https://pub.dev/packages/resp...

注释

Flutter 是 Google 的用户界面工具宝库,用于从一个代码库生成优良的、本地编译的 iOS 和 Android 应用程序。为了构建任何应用程序,咱们从小部件开始ー Flutter 应用程序的构建方块。窗口小部件依据以后的设计和状态形容他们的视图应该相似的内容。它整合了一个文本小部件、行小部件、列小部件、容器小部件等等。

本文利用 Flutter 响应框架软件包对 Flutter 响应框架进行了钻研。有了软件包的帮忙,咱们能够很容易地实现一个响应屏幕。那么让咱们开始吧。

响应式框架

响应式框架会主动调整你的用户界面以适应不同的屏幕尺寸。创立您的用户界面一次,并有它显示像素完满的挪动,平板电脑和桌面!

反对多种显示大小通常意味着屡次从新创立雷同的布局。在传统的 Bootstrap 办法下,构建响应式 UI 是耗时、令人丧气和反复的。此外,让所有像素完满简直是不可能的,简略的编辑须要几个小时。

实施方案

  • 第一步: 增加依赖项

将依赖项增加到 pubspec.yaml 文件。

依赖性:

dependencies:  responsive_framework: ^0.1.4
  • 第二步: 导入
import 'package:responsive_framework/responsive_framework.dart';
  • 第三步: 启用 AndriodX
org.gradle.jvmargs=-Xmx1536Mandroid.enableR8=trueandroid.useAndroidX=trueandroid.enableJetifier=true

代码实现

你须要别离在你的代码中实现它

在创立相似于响应式框架的 UI 之前,咱们在 main 的 Material 利用部件中增加了 ResponsiveWrapper.builder() 。文件中初始化 MaxWith,MinWith 和 Breakpoints 的 List 类型,在它外部调整设施的大小,如挪动设施,平板电脑,桌面,并且主动缩放值是定义的,让咱们了解它与上面的代码援用。

ResponsiveWrapper.builder(    BouncingScrollWrapper.builder(context, widget!),    maxWidth: 1200,    minWidth: 450,    defaultScale: true,    breakpoints: [      ResponsiveBreakpoint.resize(450, name: MOBILE),      ResponsiveBreakpoint.autoScale(800, name: MOBILE),      ResponsiveBreakpoint.autoScale(800, name: TABLET),      ResponsiveBreakpoint.autoScale(1000, name: TABLET),      ResponsiveBreakpoint.resize(1200, name: DESKTOP),      ResponsiveBreakpoint.autoScale(2460, name: "4K"),    ],    background: Container(color: Color(0xFFF5F5F5))  ),

主动缩放按比例放大和扩大布局,放弃 UI 的准确外观。这就打消了手动调整布局以适应挪动设施、平板电脑和桌面的须要。

在此之后,咱们创立了一个用户配置文件屏幕,其中是用户的图像,以及两种不同类型的列表,其中图像和一些文本曾经给出。

全副代码

import 'package:flutter/material.dart';import 'package:responsive_framwork_demo/Constants/Constants.dart';import 'package:responsive_framwork_demo/device_size.dart';import 'package:responsive_framwork_demo/model/popular_course_model.dart';import 'package:responsive_framwork_demo/model/result_model.dart';class ProfileScreen extends StatefulWidget {  @override  _ProfileScreenState createState() => _ProfileScreenState();}class _ProfileScreenState extends State<ProfileScreen> {  late List<PopularCourseModel> popularCourseModel;  late List<ResultModel> resultModel;  @override  void initState() {    popularCourseModel = Constants.getPopularCourseModel();    resultModel = Constants.getResultModel();    super.initState();  }  @override  Widget build(BuildContext context) {    return Scaffold(      backgroundColor: Colors.white,      appBar: AppBar(        backgroundColor: Colors.white,        elevation: 0.0,        title: Text(          'PROFILE',          style: TextStyle(              fontFamily: 'Poppins Medium',              color: Colors.black,              fontSize: 15,              fontWeight: FontWeight.bold,              letterSpacing: 0.5),        ),        centerTitle: true,      ),      body: SingleChildScrollView(        child: Container(          padding: EdgeInsets.only(top: 20),          child: Column(            children: [              ClipOval(                child: CircleAvatar(                  maxRadius: 50,                  child: Image.asset(                    'assets/images/mans_img.jpeg',                    width: DeviceSize.width(context),                    fit: BoxFit.fill,                  ),                ),              ),              SizedBox(                height: 30,              ),              Text(                'Crowley Singer',                style: TextStyle(                    fontFamily: 'Poppins Medium',                    color: Colors.black,                    fontSize: 15,                    fontWeight: FontWeight.bold,                    letterSpacing: 0.3),              ),              Container(                margin: EdgeInsets.only(top: 25, left: 20, right: 20),                child: Row(                  mainAxisAlignment: MainAxisAlignment.spaceAround,                  children: [                    Column(                      children: [                        Text(                          '22',                          style: TextStyle(                              fontFamily: 'Poppins Medium',                              color: Colors.black,                              fontSize: 15,                              fontWeight: FontWeight.bold,                              letterSpacing: 0.5),                        ),                        SizedBox(                          height: 10,                        ),                        Text(                          'Courses',                          style: TextStyle(                              fontFamily: 'Poppins Regular',                              color: Colors.black45,                              fontSize: 11,                              fontWeight: FontWeight.bold,                              letterSpacing: 0.3),                        ),                      ],                    ),                    Container(                      height: 32,                      width: 1,                      color: Colors.black12,                    ),                    Column(                      children: [                        Text(                          '32',                          style: TextStyle(                              fontFamily: 'Poppins Medium',                              color: Colors.black,                              fontSize: 15,                              fontWeight: FontWeight.bold,                              letterSpacing: 0.5),                        ),                        SizedBox(                          height: 10,                        ),                        Text(                          'Mentors',                          style: TextStyle(                              fontFamily: 'Poppins Regular',                              color: Colors.black45,                              fontSize: 11,                              fontWeight: FontWeight.bold,                              letterSpacing: 0.3),                        ),                      ],                    ),                    Container(                      height: 32,                      width: 1,                      color: Colors.black12,                    ),                    Column(                      children: [                        Text(                          '48',                          style: TextStyle(                              fontFamily: 'Poppins Medium',                              color: Colors.black,                              fontSize: 15,                              fontWeight: FontWeight.bold,                              letterSpacing: 0.5),                        ),                        SizedBox(                          height: 10,                        ),                        Text(                          'Friends',                          style: TextStyle(                              fontFamily: 'Poppins Regular',                              color: Colors.black45,                              fontSize: 11,                              fontWeight: FontWeight.bold,                              letterSpacing: 0.3),                        ),                      ],                    ),                  ],                ),              ),              Container(                margin: EdgeInsets.only(top: 30, left: 20, right: 20),                height: 1,                color: Colors.black12,                width: DeviceSize.width(context),              ),              Container(                margin: EdgeInsets.only(top: 30, left: 20, right: 20),                child: Row(                  mainAxisAlignment: MainAxisAlignment.spaceBetween,                  children: [                    Text(                      'YOUR COURSES',                      style: TextStyle(                          fontFamily: 'Poppins Medium',                          color: Colors.black,                          fontSize: 12,                          fontWeight: FontWeight.w700,                          letterSpacing: 0.5),                    ),                    Icon(Icons.more_horiz),                  ],                ),              ),              Container(                margin: EdgeInsets.only(top: 10, left: 20, right: 20),                height: DeviceSize.height(context) / 7,                // color:Colors.purple,                child: ListView.separated(                  separatorBuilder: (BuildContext context, int index) {                    return SizedBox(width: 10);                  },                  scrollDirection: Axis.horizontal,                  // padding:EdgeInsets.only(left:10),                  //shrinkWrap: true,                  itemCount: popularCourseModel.length,                  itemBuilder: (BuildContext context, int index) {                    return _buildYourCourseModel(                        popularCourseModel[index], index);                  },                ),              ),              Container(                margin: EdgeInsets.only(top: 30, left: 20, right: 20),                child: Row(                  mainAxisAlignment: MainAxisAlignment.spaceBetween,                  children: [                    Text(                      'YOUR PROGRESS',                      style: TextStyle(                          fontFamily: 'Poppins Medium',                          color: Colors.black,                          fontSize: 12,                          fontWeight: FontWeight.w700,                          letterSpacing: 0.5),                    ),                    Icon(Icons.more_horiz),                  ],                ),              ),              Container(                //  height:DeviceSize.height(context),                width: DeviceSize.width(context),                margin: EdgeInsets.only(top: 20),                child: ListView.separated(                  separatorBuilder: (BuildContext context, int index) {                    return SizedBox(height: 10);                  },                  scrollDirection: Axis.vertical,                  // padding:EdgeInsets.only(left:10),                  physics: NeverScrollableScrollPhysics(),                  shrinkWrap: true,                  itemCount: resultModel.length,                  itemBuilder: (BuildContext context, int index) {                    return _buildResultModel(resultModel[index], index);                  },                ),              ),            ],          ),        ),      ),    );  }  Widget _buildYourCourseModel(PopularCourseModel items, int index) {    return Container(      width: 70,      child: Column(        //mainAxisAlignment: MainAxisAlignment.spaceEvenly,        children: <Widget>[          Container(            decoration: BoxDecoration(              shape: BoxShape.circle,              color: Colors.white,              boxShadow: [                BoxShadow(                  color: Colors.blueGrey.shade50,                  offset: const Offset(                    5.0,                    5.0,                  ),                  blurRadius: 10.0,                  spreadRadius: 2.0,                ), //BoxShadow                BoxShadow(                  color: Colors.white,                  offset: const Offset(0.0, 0.0),                  blurRadius: 0.0,                  spreadRadius: 0.0,                ), //BoxShadow              ],            ),            child: ClipOval(              child: CircleAvatar(                backgroundColor: Colors.white,                maxRadius: 30,                //  child:Image.asset('assets/images/earth.png',height:45,color:Colors.blueAccent,) ,                child: Padding(                  padding: EdgeInsets.all(4),                  child: Image.asset(                    items.img,                    fit: BoxFit.cover,                    scale: 7,                  ),                ),              ),            ),          ),          Expanded(            child: Container(              padding: EdgeInsets.only(top: 0),              alignment: Alignment.center,              child: Text(                items.title,                style: TextStyle(                    fontFamily: 'Poppins Medium',                    fontWeight: FontWeight.w700,                    letterSpacing: 0.3,                    fontSize: 11,                    color: Colors.black),              ),            ),          ),        ],      ),    );  }  Widget _buildResultModel(ResultModel items, int index) {    return Container(      margin: EdgeInsets.only(left: 20, right: 20),      height: DeviceSize.height(context) / 9,//     / color:Colors.pink,      child: Row(        children: [          Container(            decoration: BoxDecoration(              shape: BoxShape.circle,              color: Colors.white,              boxShadow: [                BoxShadow(                  color: Colors.blueGrey.shade50,                  offset: const Offset(                    5.0,                    5.0,                  ),                  blurRadius: 10.0,                  spreadRadius: 2.0,                ), //BoxShadow                BoxShadow(                  color: Colors.white,                  offset: const Offset(0.0, 0.0),                  blurRadius: 0.0,                  spreadRadius: 0.0,                ), //BoxShadow              ],            ),            child: ClipOval(              child: CircleAvatar(                backgroundColor: Colors.white,                maxRadius: 28,                //  child:Image.asset('assets/images/earth.png',height:45,color:Colors.blueAccent,) ,                child: Padding(                  padding: EdgeInsets.all(4),                  child: Image.asset(                    items.img,                    fit: BoxFit.cover,                    scale: 7,                  ),                ),              ),            ),          ),          SizedBox(            width: 20,          ),          Column(            mainAxisAlignment: MainAxisAlignment.center,            crossAxisAlignment: CrossAxisAlignment.start,            children: [              Text(                items.title,                style: TextStyle(                    fontFamily: 'Poppins Medium',                    color: Colors.black,                    fontSize: 11.5,                    fontWeight: FontWeight.w700,                    letterSpacing: 0.5),              ),              SizedBox(                height: 5,              ),              Text(                items.subTitle,                style: TextStyle(                    fontFamily: 'Poppins Regular',                    color: Colors.black45,                    fontSize: 11,                    fontWeight: FontWeight.w700,                    letterSpacing: 0.5),              ),            ],          ),        ],      ),    );  }}

总结

在这篇文章中,我解释了在 Flutter 响应框架,你能够依据本人的批改和试验,这个小介绍是从咱们这边的 Flutter 响应框架演示。


© 猫哥

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...

开源我的项目

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...