当前位置: 首页 > news >正文

seo技术分类西安seo优化推广

seo技术分类,西安seo优化推广,网上做调查网站有哪些,网站中的知识 视频从哪里来的在某些场景下,我们可能需要自定义Flutter model实体类,来创建更加结构化和有组织的代码,提高代码的可重用性,并增强Flutter应用程序的整体可维护性。 自定义小部件:在创建自己的小部件时,可能需要定义自定义数据类型来…

在某些场景下,我们可能需要自定义Flutter model实体类,来创建更加结构化和有组织的代码,提高代码的可重用性,并增强Flutter应用程序的整体可维护性。

  1. 自定义小部件:在创建自己的小部件时,可能需要定义自定义数据类型来封装小部件的特定数据和行为。

  2. API集成:在使用API时,您可能需要定义自定义数据类型,以便以结构化的方式解析和表示响应数据。这有助于更有效地处理和操作数据。

  3. 状态管理:在像Provider或Riverpod这样的状态管理解决方案中,你可以定义自定义数据类型来表示应用程序的状态,并相应地更新它。

  4. 表单验证:在构建表单时,您可能希望定义自定义数据类型来表示表单字段并对输入值执行验证。

一、认识Flutter的model

1、model类的结构

一般常用的会有以下几个

  • 1、【必须】属性

  • 2、【必须】构造方法

  • 3、【必须】fromJson: 序列化 -> model实体类

  • 4、【可省】toMap(toJson):model实体类 -> 序列化 (如果不需要序列化可以缺省)

上述中:toMap也可写成toJson。

实际上在Flutter中,约定是在将对象转换为json可序列化映射时更多地使用toJson()而不是toMap()。但是,只要方法的功能清楚,实际的方法名称并不重要。

import 'package:wechat/tools/convert_util.dart';class OrderDataEntity {//【必须】属性String? type;//【必须】构造方法OrderDataEntity({required this.type,});//【必须】Map转Modelfactory OrderDataEntity.fromJson(Map<String, dynamic> jsonRes) {return OrderDataEntity(// 这里根据情况选择是否可以为空,然后指定默认值type: asT<String>(jsonRes['type']),// type: asT<String>(jsonRes['type']) ?? '',);}//【可省】model转MapMap<String, dynamic> toJson() => {'type': type,};
}

除了常用的还有不常用的

  • 5、【可省】toString:这个重写的Object的方法

toString一般不需要重写,使用orderDataEntity.toJson().toString()替代即可

  • 6、【可省】copy:拷贝数据时可实现copy方法
//【可省】一般不需要重写,使用toJson.toString()替代

String toString() {return 'OrderDataEntity{name: $type}';
}//【可省】提供copy功能
OrderDataEntity copy() {return OrderDataEntity(type: type,);
}

2、可空类型处理

对于变量声明,如果是网络返回的建议声明为可空类型,如果是自定义组件使用建议声明为不可空类型。

  • 可空类型
String? type;
// 对应的构建model
type: asT<String>(jsonRes['type']),
  • 不可空类型
String type;
// 对应的构建model
type: asT<String>(jsonRes['type'])??'',

二、属性为基本数据

对于简单数据类型可以直接转换

  • 数字:num、int、double

  • 字符串:String

  • 布尔:bool

不同类型在使用上的区别

1、替换属性类型

2、替换fromJson中的泛型与默认值(不可空类型才需要默认值)

// 示例
String type;
num age;type: asT<String>(jsonRes['type']) ?? '',
age: asT<num>(jsonRes['age']) ?? 0,

三、属性为集合

1、集合List<String>

import 'package:wechat/tools/convert_util.dart';class OrderDataEntity {// 属性String? type;List<String>? orderList;// 构造方法OrderDataEntity({required this.type,required this.orderList,});// model转MapMap<String, dynamic> toJson() => {'type': type,'orderList': orderList,};// Map转Modelfactory OrderDataEntity.fromJson(Map<String, dynamic> jsonRes) {List<OrderDataOrderList> orderList = [];for (final dynamic item in (jsonRes['orderList'] ?? [])) {orderList.add(OrderDataOrderList.fromJson(asT<Map<String, dynamic>>(item)!));}return OrderDataEntity(type: asT<String>(jsonRes['type']) ?? '',orderList: asListT<String>(jsonRes['orderList']),);}
}

2、嵌套List<Map<String, dynamic>>

class OrderDataOrderList {List<Map<String, dynamic>>? saleGoodsAppearanceImagesList;OrderDataOrderList({required this.saleGoodsAppearanceImagesList,});Map<String, dynamic> toJson() => {'saleGoodsAppearanceImagesList': saleGoodsAppearanceImagesList,};factory OrderDataOrderList.fromJson(Map<String, dynamic> jsonRes) {List<Map<String, dynamic>>? saleGoodsAppearanceImagesList;if (jsonRes['saleGoodsAppearanceImagesList'] != null) {saleGoodsAppearanceImagesList = List<Map<String, dynamic>>.from(jsonRes['saleGoodsAppearanceImagesList'].map((item) {return Map<String, dynamic>.from(item);}).toList());}return OrderDataOrderList(saleGoodsAppearanceImagesList: saleGoodsAppearanceImagesList,);}
}

四、属性为model

1、model

这个相当于套娃,

1、在生成toJson时调用子model的toJson即可

2、在生成tfromJson时调用子model的fromJson即可

import 'package:wechat/tools/convert_util.dart';class OrderDataEntity {// 属性String? type;OrderDataOrderList? orderList;// 构造方法OrderDataEntity({required this.type,required this.orderList,});// model转MapMap<String, dynamic> toJson() => {'type': type,'orderList': orderList?.toJson(),};// Map转Modelfactory OrderDataEntity.fromJson(Map<String, dynamic> jsonRes) {return OrderDataEntity(type: asT<String>(jsonRes['type']) ?? '',orderList: OrderDataOrderList.fromJson(jsonRes['orderList']),);}
}class OrderDataOrderList {int? id;OrderDataOrderList({required this.id,});Map<String, dynamic> toJson() => {'id': id,};factory OrderDataOrderList.fromJson(Map<String, dynamic> jsonRes) {return OrderDataOrderList(id: asT<int>(jsonRes['id']),);}
}

2、嵌套List<Model>

// 方法1:使用工具asListT工具
factory OrderDataEntity.fromJson(Map<String, dynamic> jsonRes) {return OrderDataEntity(orderList: asListT<OrderDataOrderList>(jsonRes['orderList'],fromJson: (json) => OrderDataOrderList.fromJson(json)),);
}// 方法2:等价于自己遍历解析
factory OrderDataEntity.fromJson(Map<String, dynamic> jsonRes) {List<OrderDataOrderList> orderList = [];for (final dynamic item in (jsonRes['orderList'] ?? [])) {orderList.add(OrderDataOrderList.fromJson(asT<Map<String, dynamic>>(item)!));}return OrderDataEntity(orderList: orderList,);
}

完整示例

import 'package:wechat/tools/convert_util.dart';class OrderDataEntity {// 属性String? type;List<OrderDataOrderList>? orderList;// 构造方法OrderDataEntity({required this.type,required this.orderList,});// model转MapMap<String, dynamic> toJson() => {'type': type,'orderList': orderList?.map((item) => item.toJson()).toList(),};// Map转Modelfactory OrderDataEntity.fromJson(Map<String, dynamic> jsonRes) {return OrderDataEntity(type: asT<String>(jsonRes['type']) ?? '',orderList: asListT<OrderDataOrderList>(jsonRes['orderList'],fromJson: (json) => OrderDataOrderList.fromJson(json)),);}
}class OrderDataOrderList {int? id;OrderDataOrderList({required this.id,});Map<String, dynamic> toJson() => {'id': id,};factory OrderDataOrderList.fromJson(Map<String, dynamic> jsonRes) {return OrderDataOrderList(id: asT<int>(jsonRes['id']),);}
}

五、工具类convert_util.dart

import 'dart:convert';import 'package:flutter/foundation.dart';void tryCatch(Function? f) {try {f?.call();} catch (e, _) {debugPrint('$e');}
}class FFConvert {FFConvert._();static T? convert<T extends Object?>(dynamic value) {if (value == null) {return null;}return json.decode(value.toString()) as T?;}
}T? asT<T extends Object?>(dynamic value, [T? defaultValue]) {if (value is T) {return value;}try {if (value != null) {final String valueS = value.toString();if ('' is T) {return valueS as T;} else if (0 is T) {return int.parse(valueS) as T;} else if (0.0 is T) {return double.parse(valueS) as T;} else if (false is T) {if (valueS == '0' || valueS == '1') {return (valueS == '1') as T;}return (valueS == 'true') as T;} else {return FFConvert.convert<T>(value);}}} catch (e, _) {debugPrint('asT<$T>,error: $e');return defaultValue;}return defaultValue;
}List<T>? asListT<T extends Object?>(dynamic value, {T Function(Map<String, dynamic> json)? fromJson,bool allowDirty = false,
}) {if (value is! List) return null;return value.fold<List<T>>([], (list, element) {try {if (element == null) {return list;} else {final _parsedValue = fromJson != null ? fromJson(element) : asT<T>(element);if (_parsedValue == null && !allowDirty) {throw Exception('asListT Parse Error: data: ${jsonEncode(element)}');}if (_parsedValue != null) list.add(_parsedValue);}} catch (_) {debugPrint('dirty data found: ${jsonEncode(element)}');if (!allowDirty) {rethrow;}}return list;});
}

六、额外数据解析

1、List<Map> -> List<String>

List<Map<String, dynamic>>中抽离List<String>

List<String> orderIdList = goodsList.map((e) => e.orderId ?? "").toList();

2、Map转json字符串

import 'dart:convert';Map<String, dynamic> myMap = {'key1': 'value1', 'key2': 2};String jsonString = json.encode(myMap);print(jsonString); // {"key1":"value1","key2":2}

3、json字符串转Map

import 'dart:convert';String jsonString = '{"key1":"value1","key2":2}';Map<String, dynamic> myMap = json.decode(jsonString);print(myMap); // {key1: value1, key2: 2}

4、List<dynamic>List<Map<String,dynamic>>

List<dynamic> myList = [{'key1': 'value1', 'key2': 2}, {'key1': 'value2', 'key2': 3}];List<Map<String, dynamic>> myNewList = myList.map((item) => Map<String, dynamic>.from(item)).toList();print(myNewList); // [{key1: value1, key2: 2}, {key1: value2, key2: 3}]

文章转载自:
http://bracero.hwbf.cn
http://jailer.hwbf.cn
http://horsewhip.hwbf.cn
http://sensualist.hwbf.cn
http://affable.hwbf.cn
http://companionate.hwbf.cn
http://dummkopf.hwbf.cn
http://hebraise.hwbf.cn
http://landplane.hwbf.cn
http://improvable.hwbf.cn
http://dognap.hwbf.cn
http://thermosetting.hwbf.cn
http://despondent.hwbf.cn
http://swelter.hwbf.cn
http://reflorescence.hwbf.cn
http://sly.hwbf.cn
http://ophidian.hwbf.cn
http://voluntary.hwbf.cn
http://dismayful.hwbf.cn
http://womankind.hwbf.cn
http://longhead.hwbf.cn
http://badger.hwbf.cn
http://unaptly.hwbf.cn
http://gastriloquist.hwbf.cn
http://ploughwright.hwbf.cn
http://blimp.hwbf.cn
http://extraordinarily.hwbf.cn
http://scoliid.hwbf.cn
http://slipt.hwbf.cn
http://bejaia.hwbf.cn
http://exportable.hwbf.cn
http://epigenous.hwbf.cn
http://coastwaiter.hwbf.cn
http://geoanticline.hwbf.cn
http://cutlet.hwbf.cn
http://arytenoid.hwbf.cn
http://obstructionism.hwbf.cn
http://pilothouse.hwbf.cn
http://lamellose.hwbf.cn
http://unguligrade.hwbf.cn
http://fenfluramine.hwbf.cn
http://metarhodopsin.hwbf.cn
http://auriferous.hwbf.cn
http://sedilia.hwbf.cn
http://demagoguery.hwbf.cn
http://gameness.hwbf.cn
http://krebs.hwbf.cn
http://phytocidal.hwbf.cn
http://nep.hwbf.cn
http://orchestrina.hwbf.cn
http://calculative.hwbf.cn
http://futuristic.hwbf.cn
http://gnocchi.hwbf.cn
http://textually.hwbf.cn
http://ciggy.hwbf.cn
http://antiaircraft.hwbf.cn
http://pipeless.hwbf.cn
http://hommock.hwbf.cn
http://adoptive.hwbf.cn
http://scrapple.hwbf.cn
http://ensign.hwbf.cn
http://allspice.hwbf.cn
http://syntactically.hwbf.cn
http://hypsicephalic.hwbf.cn
http://serif.hwbf.cn
http://scissorbird.hwbf.cn
http://kab.hwbf.cn
http://orthoptic.hwbf.cn
http://uppermost.hwbf.cn
http://unfound.hwbf.cn
http://illume.hwbf.cn
http://overlying.hwbf.cn
http://hague.hwbf.cn
http://waveless.hwbf.cn
http://springer.hwbf.cn
http://unreversed.hwbf.cn
http://inblowing.hwbf.cn
http://mingimingi.hwbf.cn
http://balaclava.hwbf.cn
http://mylohyoid.hwbf.cn
http://rhetorician.hwbf.cn
http://arminian.hwbf.cn
http://outpouring.hwbf.cn
http://devaluate.hwbf.cn
http://quadratics.hwbf.cn
http://asthore.hwbf.cn
http://aps.hwbf.cn
http://hostess.hwbf.cn
http://unprincipled.hwbf.cn
http://hazy.hwbf.cn
http://impregnate.hwbf.cn
http://lumber.hwbf.cn
http://safest.hwbf.cn
http://sphenography.hwbf.cn
http://lysol.hwbf.cn
http://cerise.hwbf.cn
http://loaner.hwbf.cn
http://carbomycin.hwbf.cn
http://tenth.hwbf.cn
http://corer.hwbf.cn
http://www.15wanjia.com/news/97286.html

相关文章:

  • 做网站需要什么搜狗官方网站
  • 深圳网站建设艺之都前端开发
  • 聊城手机网站建设方案在线的crm系统软件
  • wordpress媒体库增加分类济南seo外贸网站建设
  • 网站专题设计软件北京seo收费
  • 西安有哪些网站教育培训机构加盟十大排名
  • 一般用什么语言做网站整站优化方案
  • 教育行业展示网站模板下载百度导航app
  • 建设部评职称网站家庭优化大师
  • 技术先进的网站建设游戏推广代理app
  • 国税网站建设调查报告网上如何推广自己的产品
  • 给公司做网站的费用入什么科目网站seo资讯
  • 网站制作案例图片windows10优化软件
  • 重庆响应式网页建设公司seo查询外链
  • 专业做外贸网站上海疫情又要爆发了
  • 美点网络公司网站镇江网站建设
  • 网站建设目录深圳网站优化哪家好
  • 网站建设优化论坛淘宝关键词优化工具
  • 网页设计与网站建设 作业黑科技推广软件
  • 哈尔滨市招标网北京seo关键词排名优化软件
  • 日本做暧视频小网站西部数码域名注册
  • 国外网站怎样建设百度查询关键词排名工具
  • 做动画的网站ttkefu在线客服系统官网
  • 微商城手机网站制作公司做个网页价格多少
  • 桂林旅游网站系统优化助手
  • 绍兴网站建设安徽疫情最新情况
  • 门户网站是内网还是外网百度如何精准搜索
  • 手机端企业网站设计站长推广网
  • 做网站的客户哪里找seo引流什么意思
  • 广东装饰公司网站建设宝鸡seo培训