【flutter】架构之商城main入口

news2024/11/6 9:43:29

架构之商城main入口

  • 前言
  • 一、项目模块的划分
  • 二、入口main的配置
  • 三、配置文件怎么做
  • 总结


前言

本栏目我们将完成一个商城项目的架构搭建,并完善中间的所有功能,总页面大概200个,如果你能看完整个栏目,你肯定能独立完成flutter 项目的整体研发工作。

首先新建一个叫blog_mall 的项目,能看到这里的,我想都知道该怎么创建项目了,这里就不再赘述。


一、项目模块的划分

在开始前,我们先介绍一下项目的整体架构
在这里插入图片描述

由上图我们可以看到,我把整个项目的文件夹分为了5个模块:

  • app: 整个项目的主题文件夹
  • config: 项目的基础配置文件
  • http:网络模块
  • utils:工具模块
  • widget:通用的child 模块

二、入口main的配置

在配置main 入口文件之前,我们先导入本项目主要的框架插件:

#  设备适配
flutter_screenutil: ^5.8.4 
#  状态管理
get: ^4.6.5
#  收起键盘
keyboard_dismisser: ^3.0.0
#  加载器
flutter_easyloading: ^3.0.5
  • flutter_screenutil:做前端的,最重要的是,没错,就是适配,这个组件会完美的解决你的问题。
  • get:大家可以看到,我将使用getx 作为整个项目的状态管理器,如果有对getx 这个组件不太了解的,可以翻看我之前写的相关文章。
  • keyboard_dismisser:当你使用文本输入框的,键盘怎么回收?单个设置?麻烦不你,这里教你一键解决。
  • flutter_easyloading:网络请求?吐司?菊花?这个全都有。

上面我们介绍导入的四个组件,下面我们来看看主要针对main 文件做了什么改造:

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  
  
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      // 一般情况下,你的设计师的UI比例初始值都是它
      designSize: const Size(375, 812),
      minTextAdapt: true,
      splitScreenMode: true,
      builder: (context, child) {
        return KeyboardDismisser(
          gestures: const [GestureType.onTap],
          child: GetMaterialApp(
            // 项目的主题走起来
            theme: FhTheme.getTheme(),
            debugShowCheckedModeBanner: false,
            title: '即时零售',
            // 配置的路由文件,什么?routes??? 不需要,完全不需要
            getPages: GetPages.getPages,
            initialBinding: BaseBindings(),
            builder: (context, child) {
              // 初始化你的loading 
              EasyLoading.init();
              // 看不懂这个是什么???你想你的APP 字体会跟随系统字体大小去改变的话,你尽管干掉它
              return MediaQuery(
                data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
                child: FlutterEasyLoading(child: child ?? Container(),),
              );
            },
          ),
        );
      },
    );
  }
}

看完上面的代码,如果你还有什么疑问的话,那么我只想说,你没救了,还是尽快换个行业比较好。

三、配置文件怎么做

上面的代码中,你看到了"GetPages.getPages" 路由的配置,“FhTheme.getTheme()” 主题色的配置,“BaseBindings()” bindings 的配置,那么这些文件夹里面都是什么呢?带着疑问我们继续看。

import 'package:get/get.dart';

/// 1 * FileName: get_pages
/// 2 * Author: tiger -- 范虎  
/// 3 * Date: 2023/9/20 11:52
/// 4 * Description:  
/// 5 * 作者博客:半身风雪

class GetPages{
  // static String home = '/home';
  static List<GetPage> getPages = [
   //  GetPage(name: home, page: () => const HomePage()),
  ];

}

GetPages 啥也不是,他就只是一个GetPage 的数组,后期我们所有的路由都将在这里进行配置,具体可参考示例。

import 'package:get/get.dart';

/// 1 * FileName: base_bindings
/// 2 * Author: tiger -- 范虎  
/// 3 * Date: 2023/9/20 11:54
/// 4 * Description:  
/// 5 * 作者博客:半身风雪

class BaseBindings extends Bindings{
  
  void dependencies() {
    // TODO: implement dependencies
    // Get.lazyPut<HomeController>(() => HomeController, fenix: true);
  }

}

Bindings 的配置文件也一样,这里我们初始化的整个项目的所有controller,怎么用?看示例啊,加载方式有几种,我就不一一介绍,普遍使用lazyPut 就可以了,fenix 的初始值是false ,这里我为什么要用true?因为他可以让你的controller 复活,想想你跳了N个界面之后,突然想调第一个controller 的数据,但是这个controller 已经被销毁了,会发生什么呢?

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

import 'fh_colors.dart';

/// 1 * FileName: fh_theme
/// 2 * Author: tiger -- 范虎  
/// 3 * Date: 2023/9/20 11:39
/// 4 * Description:  项目主题
/// 5 * 作者博客:半身风雪


class FhTheme{
 static ThemeData getTheme(){
   return ThemeData(
     // 取消按钮的溅射效果
     splashColor: Colors.transparent,
     highlightColor: Colors.transparent,
     hoverColor: Colors.transparent,

     // 页面背景色
     scaffoldBackgroundColor: FhColors.themeColor,
     // 分割线颜色
     dividerColor: FhColors.dividerColor,
     // 全局appbar样式控制
     appBarTheme: const AppBarTheme(
       //分割线
       elevation: 0.0,
       //背景色
       color: Colors.white,
       // 状态栏
       systemOverlayStyle: SystemUiOverlayStyle(
         statusBarColor: Colors.transparent,
         statusBarIconBrightness: Brightness.dark,
         statusBarBrightness: Brightness.dark,
       ),
     ),

     // 底部 bottom 主题
     bottomNavigationBarTheme: const BottomNavigationBarThemeData(
       backgroundColor: Colors.white,
     ),


     // floatingActionButtonTheme: const FloatingActionButtonThemeData(
     //   //浮动按钮样式 after v1.13.2. 后不建议使用
     //   backgroundColor: Colors.white,
     // ),
   );

 }
}

theme 主题色,这个就没有什么好说的了,你只有明白一点,整个项目中,你所有widget 的初始色值、属性等,都可以在这里进行赋值,不懂的请移步看我之前的文章。

在上面的class 中,你还疑惑FhColors 是什么?别急,这个是我们自己封装的色值文件。

class FhColors{
  static Color themeColor = FhColorUtils.hexStringColor('#F4F5F9');
  static Color dividerColor = FhColorUtils.hexStringColor('#E6E6E6');
  static Color textBlack = FhColorUtils.hexStringColor('#000000');


}

作用就一个,后期项目中所有的设置我们都将放在这里,进行统一的管理。

纳尼?FhColorUtils 又是啥???

拜托,FhColorUtils 就是一个色值转换的封装操作,里面就放你flutter 目前不支持的色值格式转换就行,你就理解成色值转换器呗。

贴代码?i no 你去看一下我前面的文章行不行啊,都有的。


总结

本篇文章很短,内容也很少,但是有一点,当你去新建项目的时候,main 文件就这么写,觉得没错,说不定你的管理还给你加个鸡腿呢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java-根据模板生成PDF

文章目录 前言一、准备模板二、代码实现三、源代码总结 前言 在有些场景下我们可能需要根据指定的模板来生成 PDF&#xff0c;比如说合同、收据、发票等等。因为 PDF 是不可编辑的&#xff0c;所以用代码直接对 PDF 文件进行修改是很不方便的&#xff0c;这里我是通过 itext 和…

优思学院|六西格玛核心方法:CTQ关键质量树

在六西格玛管理方法中&#xff0c;CTQ是Critical-To-Quality的缩写。CTQ代表客户需求&#xff0c;这些需求被认为是项目/产品/流程的成功与否的关键因素&#xff0c;得到了执行团队的认可。CTQ树最初是作为六西格玛方法的一部分开发的。然而&#xff0c;您可以在各种情况下使用…

VERTU钛合金材质手机创新应用,领先苹果十年之久

9月13日,苹果发布了iPhone15系列手机,值得一提的是,这是苹果首次使用钛合金材质,也是苹果引以为傲的创新之一。钛合金是一种轻质、耐腐蚀、强度高的材料,由此应用于智能手机,可以提升手机的整体强度、耐摔性和耐刮擦性。 然而,一个备受关注的事实是,英国奢侈手机品牌VERTU早在六…

上海亚商投顾:沪指震荡反弹 汽车产业链全天强势

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 大小指数昨日集体反弹&#xff0c;沪指3100点失而复得&#xff0c;创业板指一度涨超1.5%&#xff0c;随后涨幅…

Vue的第三章节之模版语法下篇(带你感受来自Vue模版语法的魅力)

目录 ​编辑 前言 一、事件处理器 1. 事件冒泡模拟及处理方式 1.1 模拟 1.2 处理方式 1.3 事件冒泡模型图 2. 事件修饰符 3. 事件修饰符的使用 案例模拟使用 二、表单的综合案例&#xff08;在控制台输出结果&#xff09; 1. 模拟案例测试 代码 效果 三、 Vue之自…

Vue模板语法(下)

事件处理器 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><script src"https://c…

内存利用:迟来的blindless与逃不掉的exit漏洞

0x01 前言 在计算机安全领域&#xff0c;漏洞的危险性往往与其广泛性和潜在攻击方式密切相关。今天&#xff0c;我们将深入探讨一个异常危险的漏洞&#xff0c;它存在于程序退出时执行的常见函数"exit"中。无论是在操作系统还是应用程序中&#xff0c;"exit&qu…

【Vue.js】快速入门与工作生命周期的使用

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》 《springMvc使用》 ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 目录 ​编辑 1.Vue是什么 2.Vue的特点及优势 3. 使用Vue的详细步骤 3.1.导入 3.2…

资源超分是什么?

经常听到资源超分&#xff0c;但是具体指的什么还不清楚&#xff0c;哪里来的术语 https://www.modb.pro/db/199368 3&#xff0e;超线程技术管理及如何开启 超线程是intel研发的技术&#xff0c;利用特殊的硬件指令&#xff0c;把一个物理CPU核模拟成两个逻辑内核&#xff…

点成案例丨温度梯度培养箱在探究温度对植物发芽影响中的应用

变暖的气候与受影响的种子 全球变暖是指由于人类工业化和燃烧化石燃料等活动释放了大量温室气体&#xff0c;这些气体进入大气层导致地球气温在过去几十年里逐渐升高的现象。全球气候变暖带来了一系列严重的环境问题&#xff1a;温度升高导致冰川和极地冰层融化&#xff0c;海…

中秋节要来了,程序猿的你还要加班吗

其他人的中秋节是这样的&#xff1a; 明月松间照&#xff0c;清泉石上流。 程序猿的中秋节是这样的&#xff1a; 明月几时有&#xff1f;把酒问青天。 首先&#xff0c;跟大家开个玩笑。希望中秋节的你&#xff0c;不要加班&#xff0c;毕竟身体是革命的本钱嘛。 中秋&…

初识 python 装饰器

1.什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;是Python中一种用于修改函数或类的行为的设计模式。装饰器允许您在不修改原始函数或类的情况下&#xff0c;给它们添加新的功能&#xff0c;这使得代码更具可重用性和可扩展性。简而言之&#xff0c;就是一…

17.适配器模式(Adapter)

意图&#xff1a;将一个类的接口转换为Client希望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类在一起工作。 UML图 Target&#xff1a;定义Client使用的与特定领域相关的接口。 Client&#xff1a;与符合Target接口的对象协同工作。 Adaptee&#xf…

华为OD机试 - 求最多可以派出多少支团队 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Linux提权辅助工具Linux Exploit Suggester

Linux提权辅助工具Linux Exploit Suggester 1.概述2.工具使用3.已经有人二开了 1.概述 Linux Exploit Suggester是一款根据操作系统版本号自动查找相应提权脚本的工具 Linux Exploit Suggester的官方下载地址为https://github.com/PenturaLabs/Linux_Exploit_Suggester 2.工具…

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现 文章目录 1\. 伙伴系统的核心数据结构2\. 到底什么是伙伴3\. 伙伴系统的内存分配原理4\. 伙伴系统的内存回收原理5\. 进入伙伴系统的前奏5.1 获取内存区域 zone 里指定的内存水位线5.2 检查 zone 中剩余内存容量…

基于Java的公务员考试资料共享平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

JavaScript中常用的输入输出语句介绍

在日常开发中&#xff0c;为了方便数据的输入和输出&#xff0c;JavaScript提供了一些常用的输入输出语句&#xff0c;具体如表1-3所示。 表1常用的输入输出语句 接下来将分别演示document.write0、console.log0和promptO的使用。 1. document.write() document.write0的输出…

mysql大数据量 分页查询优化

最近我老表问我一个面试问题&#xff0c;如果数据量很大&#xff0c;分页查询怎么优化。 个人觉得无非就是sql优化&#xff0c; 那无非就是走索引&#xff0c; 避免回表查询&#xff08;覆盖索引&#xff0c;也就是不要用select * &#xff0c;走主键索引&#xff0c;叶子节点有…

基础算法--双指针算法

双指针算法 1.基本介绍 严格的来说&#xff0c;双指针只能说是是算法中的一种技巧。 双指针指的是在遍历对象的过程中&#xff0c;不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向&#xff08;快慢指针&#xff09;或者相反方向&#xff08;对撞指针&#…