【Flutter 组件集录】Autocomplete 自动填充

【前端】使用autocomplete实现输入框自动补全功能,同时获取输入框的值 使用autocomplete实现输入框自动补全功能,同时支持动态添加/删除输入框,并获取输入框的值。 阅读详情

简单来说,Autocomplete 意为 自动填充 。其作用就是在输入时,进行 关键字联想。在输入框下方展示列表,如下所示:注意,这是目前 Flutter 框架内部的组件,非三方组件。

FlutterUnit 中输入时联想效果

下面是动态搜索的效果展示:


1. Autocomplete 组件最简代码

我们先一步步来了解 Autocomplete 组件,先实现如下的最简代码:

使用 Autocomplete 时,必须提供的是 optionsBuilder 参数,另外可以通过 onSelected 回调来监听选中的条目。

Autocomplete<String>(
    optionsBuilder: buildOptions,
    onSelected: onSelected,
) 

optionsBuilder 是一个 AutocompleteOptionsBuilder<T> 类型的函数,从下面的定义中可以发现,该函数会回调 TextEditingValue 对象,且返回 FutureOr<Iterable<T>> 。这说明这个函数是一个异步函数,我们可以在此进行网络请求,数据库查询等工作,来返回一个 Iterable<T> 的可迭代对象。

用脚指头想一下也知道,这个可迭代对象,就决定这输入框下面的联想词是哪些。

final AutocompleteOptionsBuilder<T> optionsBuilder;

typedef AutocompleteOptionsBuilder<T extends Object> = 
    FutureOr<Iterable<T>> Function(TextEditingValue textEditingValue); 

比如下面通过 searchByArgs 模拟网络请求,通过 args 参数搜索数据,

Future<Iterable<String>> searchByArgs(String args) async{
  // 模拟网络请求
  await Future.delayed(const Duration(milliseconds: 200));
  const List<String> data =  [
    'toly', 'toly49', 'toly42', 'toly56', 
    'card', 'ls', 'alex', 'fan sha',
  ];
 return data.where((String name) => name.contains(args));
} 

这样,buildOptions 的逻辑如下,这就完成了 输入--> 搜索 --> 展示联想词 的流程。这也是 Autocomplete 组件最简单的使用。

Future<Iterable<String>> buildOptions( TextEditingValue textEditingValue ) async {
  if (textEditingValue.text == '') {
    return const Iterable<String>.empty();
  }
  return searchByArgs(textEditingValue.text);
} 

2. 自定义 Autocomplete 组件内容

其实上面那样的默认样式很丑,而且没有提供 直接 的属性设置样式。所以了解如何自定义是非常关键的,否则只是一个玩具罢了。如下,我们先来实现搜索高亮显示的自定义,其中也包括对输入框的自定义。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaNszeVF-1653037333760)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fe5e956baeee40ec826f6d220f7f0dc3~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image)]


Autocomplete 中提供了 fieldViewBuilder 和 optionsViewBuilder 分别用于构造输入框 和 浮层面板 。

如下,代码中通过 _buildOptionsView 和 _buildFieldView 进行相应组件构造:

Autocomplete<String>(
  optionsBuilder: buildOptions,
  onSelected: onSelected,
  optionsViewBuilder: _buildOptionsView,
  fieldViewBuilder: _buildFieldView,
); 

如下是 _buildOptionsView 方法的实现,其中会回调 onSelected 回调函数,和 options 数据,我们需要做的就是依靠数据,构建组件进行展示即可。另外,默认浮层面板和输入框底部平齐,可以通过 Padding 进行下移。另外,由于是浮层,展示文字时,上面需要嵌套 Material 组件。

至于高亮某个关键字,下面是我封装的一个小方法,拿来即用。

---->[高亮某些文字]----
final TextStyle lightTextStyle = const TextStyle(
  color: Colors.blue,
  fontWeight: FontWeight.bold,
);
InlineSpan formSpan(String src, String pattern) {
  List<TextSpan> span = [];
  List<String> parts = src.split(pattern);
  if (parts.length > 1) {
    for (int i = 0; i < parts.length; i++) {
      span.add(TextSpan(text: parts[i]));
      if (i != parts.length - 1) {
        span.add(TextSpan(text: pattern, style: lightTextStyle));
      }
    }
  } else {
    span.add(TextSpan(text: src));
  }
  return TextSpan(children: span);
} 

另外,对于输入框的构建,通过如下的 _buildFieldView 实现,其中有 _controller 记录一下 TextEditingController,是因为 optionsViewBuilder 回调中并没有回调输入的 arg 字符,所以想要输入的关键字高亮,只能出此下策。这样,在 TextFormField 构建时,你可以指定自己需要的装饰。

到此,我们就实现了上面,输入过程中,浮层面板内容关键字高亮显示的效果。


3.关于 Autocomplete 中的泛型

泛型的作用非常明显,它最主要的是对浮层面板的构建,如果浮层中的条目不止是 String ,我们就需要使用泛型,来提供某个的数据类型。比如下面的效果,其中浮层面板的条目是可以显示更多的信息:

先定义一个数据类 User ,记录信息:

class User {
  final String name;
  final bool man;
  final String image;

  const User(this.name, this.man, this.image);

  @override
  String toString() {
    return 'User{name: $name, man: $man, image: $image}';
  }
} 

然后在 Autocomplete 的泛型中使用 User 即可。

这样在 _buildOptionsView 中,回调的就是 User 的可迭代对象。如下。封装一个 _UserItem 组件,对条目进行显示。


4、Autocomplete 源码简看

Autocomplete 本质上依赖于 RawAutocomplete 组件进行构建,可见它是一层简单的封装,简化使用。为我们提供了默认的 optionsViewBuilder 和 fieldViewBuilder ,显示一个很丑的界面。也就是说,如果你了解如何定制这两部分内容,你也就会了 RawAutocomplete 组件。


我们先看一下 Autocomplete 对 optionsViewBuilder 提供的默认显示,其返回的是 _AutocompleteOptions 组件。如下,其实和我们自己实现的也没有太大的区别,只是个默认存在,方便使用的小玩意而已。


另外,对于输入框的构建,使用 _defaultFieldViewBuilder 静态方法完成。

该方法,返回 _AutocompleteField 组件,本质上也就是构建了一个 TextFormField 组件。



对 Autocomplete 来说,只是 RawAutocomplete 套了个马甲,本质上的功能还是在 RawAutocomplete 的状态类中完成的。如下是 _RawAutocompleteState 的部分代码,可以看出这里的浮层面板,是通过 Overlay 实现的,另外通过 CompositedTransformTarget 和 CompositedTransformFollower 对浮层进行定位。

那本文就这样,如果想要简单地实现搜索联想词,Autocomplete 是一个很不错的选择。

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的直接点击文末小卡片可以领取哦!我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT大厂面试题(有解析)

领取地址:

flutter-autocomplete-textfield:用于flutter的自动完成文本字段 autocomplete_textfield 颤振的自动完成文本字段 拉取请求 随意提交请求请求以进行所需的更改/功能/错误修复...由于我不再频繁使用Flutter,这使此代码的维护变得更加容易。 酒吧包可以在找到 重大变化 默认情况下,TextField设置为在建议点按时调用onSubmitted,并在提交时清除TextField。 这些都可以分别通过commitOnSuggestionTap和clearOnSubmit禁用。 用法 AutoCompleteTextField支持任何数据类型建议 new AutoCompleteTextField<YOURDATATYPE>() 建议参数必须具有与<YOURDATATYPE>相匹配的数据 需要类型为GlobalKey<AutoCompleteTextFieldState>>的全局键,以便可以调用clear()方法来清除AutoCompleteTextField。 字符串和itemFilter 过滤区分大小写,因此在使用字符串时,itemFilter的常见实现是。 itemFilter: (item, query) { r 立即下载

相关推荐

ThingsBoard实战指南:RPC命令下发与设备交互详解

本文深入解析了ThingsBoard平台中RPC命令下发的核心机制与实战应用。通过对比客户端与服务端RPC模式,详细阐述了从仪表盘控件配置到设备端Python代码响应的完整双向交互流程,并提供了常见问题排查与进阶优化技巧,帮助开发者构建可靠、实时的物联网设备控制系统。

weixin_29168153的博客 213

autocomplete属性的使用

通过设置表单属性可以实现提交方式、自动完成、表单验证等不同的表单功能。下面将对form标记的相关属性进行详解! 效果图: 当你在“用户名”的文本输入框中依次输入……,分别单击“提交”按钮。然后再单击“用户名”文本框时,效果如下: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>autocomplete属性的使用</title> </head

酷小亚 2万+

静态分析工具COBOT与Testbed对比

Testbed为规则检查工具的代表,市场占有量非常大,但随着时间的推移,大家从规则匹配转向了用静态分析工具检查Bug,所以规则检查型工具占有量比开始时候已经减少,但仍有一些比较落后的单位还在继续采购此类工具。3、通过对开源工程的测试,进行误漏报率的对比,发现COBOT(库博)的误漏报率相比Testbed较低,因COBOT主打国内市场,在众多军工单位进行大量试用及使用,吸取了众多单位的意见和建议,更加符合国内军工单位的使用习惯及测试要求。4、此外库博在功能上还可以进行计划任务,检测队列,检测并发的功能支持。

chengoodflower的博客 2061

HTML autocomplete 属性

autocomplete 属性是 HTML5 中的新属性,在input中autocomplete属性是默认开启的。 1、定义:autocomplete属性规范表单是否启用自动bai完成功能。自动完成允许浏览器对字段的输入,是基于之前输入过的值。 2、应用范围:autocomplete适用<form>,以及<input>类型的text、search、url、telephone、email、password、datepickers、range、color 3、属性值: on----默认,

Java技术备忘录 6621

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

qq_38120851的博客 4047

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1181

浏览器输入框或表单关闭自动填充autocomplete=off

浏览器端有时候会记录用户输入信息作为缓存,下次输入框focus时将会有下拉缓存供用户选择填充,如果缓存次数过多会影响其页面正常显示。autocomplete=off

wzp20092009的博客 1万+

竞拍算法(Auction Algorithm)原理及工作过程分析

因一些项目工作需要对竞拍算法进行深入了解。但百度了大部分资料都未找到一篇文章能对此算法进行较为深入的介绍。在一番努力之下,终于找打了最初提出该算法的论文,本文内容主要结合该论文对竞拍算法进行分析。 竞拍算法简介 竞拍算法(Auction Algorithm)是一种用于解决分配问题的分布式算法,经相关文献查询,最早由麻省理工学院信息和决策系统实验室的Bertsekas(教授?)提出 1,于1988年发表于期刊Annals of Operations Research。 顾名思义,竞拍算法本质就是模拟人类拍.

weixin_47546390的博客 3万+

Flutter 组件: Autocomplete 自动填充 | 开发者说·DTalk

本文原作者: 张风捷特烈,原文发布于: 编程之王简单来说,Autocomplete 意为自动填充。其作用就是在输入时,进行关键字联想。在输入框下方展示列表,如下所示: 注意,这是目前 Flutter 框架内部的组件,非三方组件。目前已收录入 FlutterUnit,下面效果的源码详见之,大家可以更新查看体验:FlutterUnit 中输入时联想效果下面是动态搜索的效果展示:Autocomplet...

谷歌开发者 1061

基于MATLAB开发AUTOSAR软件应用层模块-part2.建立一个AUTOSAR的模型,并生成autosar格式代码

上一篇我们建立了一个空模型,这篇我们接着上篇文章,建立一个简单的模型 点击 Library Browser,打开simulink模块库,见下图 左侧是模块库的列表,右侧是每个模块库里包含的具体的模块。 点击通用模块库,里边是一些常见的模块, 我们选取里边的3个模块,分别是输入,输出和增益三个模块,右键点击模块,选择add block to model xx,可以把模块添加到模型中。 然后练好连线 一个简单的模型就搭建好了,之后我们修改配置,将模型修改为AUT...

汽车软件开发 3303

【人工智能 Open AI】程序员怎样提升研发效率?从技术、业务、项目管理等等多个方面来阐述。

程序员要想提升研发效率,需要从技术、业务、项目管理等多方面着手,多靠工具配合实践实现,从而提升研发效率。

AI天才研究院 5527

Flutter Autocomplete初步探索

Autocomplete组件的初步探索与简单使用

yang_6799的博客 1579

【ROS】ROS2导航Nav2:简介、安装、测试效果、错误处理

在ROS2中自动导航使用Nav2来实现。Nav2 使用几个独立的模块化服务,通过 ROS 2接口(例如动作服务器或服务)与行为树 (BT) 通信。Nav2 输入包括:TF转换、一个地图源、一个行为树 (BT) XML 文件和相关的传感器数据源;Nav2 输出速度命令;Nav2 支持多种机器人,比如:四足机器人、履带机器人、轮式机器人等。

郭老二 5087

推荐使用:flutter的自动补全文本框 - autocomplete_textfield

推荐使用:flutter的自动补全文本框 - autocomplete_textfield 在寻找一个强大的Flutter输入框插件来实现自动补全功能吗?那么,autocomplete_textfield 可能正是你需要的那个宝藏库。这个开源项目为你的应用提供了高度可定制化的自动补全文本字段,使得用户在输入时可以轻松匹配到预设的建议数据。 项目介绍 autocomplete_textfield 是...

gitblog_00059的博客 736

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Flutter 中的 Autocomplete 小部件:全面指南

ListTile(虽然 Flutter 没有直接提供小部件,但通过组合TextField和一些自定义逻辑,你可以实现一个功能完备的自动完成文本输入框。掌握的实现方法,可以帮助你创建出既美观又提高用户体验的输入界面。

smileKH的博客 786

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Flutter2来了-新功能和特性分析

3月4日,Flutter Engage大会上宣布了Flutter2的发布。自从Flutter1.0的发布已经过去了两年多了。在这两年多的时间里,Flutter开发团队关闭了来自765个贡献者的24541一个问题,这是因为这些贡献者的努力才有了Flutter2的最终稳定版发布。 此次大会上采用的是线上发布的形式,其中讲解了Flutter 2中的很多激动人心的新特性和功能。下面就重点讲解一下Flutter2中的新功能。 Web 今天,Flutter Web已经从测试频道正式进入到稳定频道了。随着最初稳定版的发布

Enl0ve的博客 783

Flet AutofillHint 枚举全解析:为 TextField 启用跨平台智能表单填充

本篇技术指南聚焦 Flet 框架中的 `AutofillHint` 类型(对应文档 [website/docs/types/autofillhint.md](https://link.gitcode.com/i/f1bc462e7b3ce8a5721d55e6acfb18e8)),全面讲解该枚举的语义定义、全部枚举成员、与平台(Android / iOS / Web)自动填充系统的映射关系,以及如

gitblog_00682的博客 187

Flet v0.23.0 版本解析:新控件、错误处理强化与破坏性变更迁移指南

Flet 是一个只用 Python 就能构建实时 Web、移动端和桌面应用的框架,无需任何前端经验。v0.23.0 是 Flet 在 1.0 之前的又一个重大发布,带来 6 个新控件、3 组新属性、贯穿全部控件的断言式错误检查、美化的 `flet build` CLI 输出,以及一批必须提前知晓的破坏性变更(Breaking Changes)与弃用(Deprecations)。本文以官方发布说明

gitblog_00576的博客 837

Flet CupertinoSegmentedButton 实战指南:用 Python 构建 iOS 风格分段选择控件

`CupertinoSegmentedButton` 是 Flet 中一个完全复刻 iOS 设计语言的分段选择控件,用于在一组互斥选项中高亮当前选中项,常被用于「全部 / 部分 / 无」「日 / 周 / 月」等分组筛选场景。本文以 Flet 仓库中的官方文档 [cupertinosegmentedbutton.md](https://link.gitcode.com/i/6da3a72672199

gitblog_00438的博客 1019

flet-code-editor 实战指南:在 Flet 应用中集成代码编辑与内联问题标记

flet-code-editor 是 Flet 生态中的官方扩展包,为纯 Python 构建的 Flet 应用提供带语法高亮的代码编辑器控件(`CodeEditor`),底层基于 Flutter 的 `flutter_code_editor`。本文以该扩展包 [CHANGELOG.md](https://link.gitcode.com/i/01744238a79da13a67401d5aa36a

gitblog_01045的博客 313

@tauri-apps/api 演进全解析:从 v2 稳定版到 2.12 的前端接口能力图谱

> 本指南以 `@tauri-apps/api`(Tauri 官方前端 JavaScript/TypeScript 接口库)的 [CHANGELOG.md](https://link.gitcode.com/i/edfe391f4ca77009b9e20b02561f46c2) 为骨架,梳理该包从 2.0 稳定版到 2.12.0 的完整能力演进:窗口/Webview 管理、IPC 序列化、事件系统

gitblog_00908的博客 448

Dendron unified 解析管线深度解析:从 CHANGELOG 看 wikilink、标签、引用与发布渲染的演进

> 本文以 `@dendronhq/unified` 包的 [CHANGELOG](https://link.gitcode.com/i/96c77144714cb70fcf436ef9681b7c12) 为线索,结合 [packages/unified](https://link.gitcode.com/i/1c99dc671ab49b7952e477834ec091a2) 源码,系统梳理 De

gitblog_00416的博客 194

Easegress Claude Proxy 实战:让 Claude Code 通过 OpenAI 兼容接口无缝接入 AI 网关

Easegress 的 Claude Proxy 能力,是构建在 AI 网关(AIGatewayController + AIGatewayProxy 过滤器)之上的双向协议转换层:它既能接收 Anthropic 风格的 `/v1/messages` 请求并将其转换为 OpenAI Chat Completion 格式转发给上游,又能把 OpenAI 格式的响应还原回 Anthropic Mess

gitblog_00579的博客 173

UI/UX Pro Max Skill 快速参考全解:覆盖 10 大类别 240+ 条 UI/UX 审查规则的静态清单

本篇技术指南以 `ui-ux-pro-max-skill` 仓库中 [quick-reference.md](https://link.gitcode.com/i/146825b2053bc3ae40571aa651b3f29e) 为核心,完整解析该 Skill 内置的 10 大类别、约 240 条 UI/UX 审查规则:从 Accessibility 到 Charts & Data 的完整规则名

gitblog_00709的博客 384

autocomplete=“off“ 不起作用解决方案

为了防止浏览器为用户自动填充账号密码,input标签 html5新增属性autocomplete,但这一属性经常出现不起作用的事情,为了解决这一问题,我找到一些解决方法;去掉了一些比较复杂的方法。网上没有找到对其详细解释,但是发现163邮箱的登录注册是这么用的。这种方法是最简单的。autocomplete官方只有"on","off"俩个值,但是"在input框中设置 autocomplete= "修改readonly属性。

木辰風的博客 3132
上一篇: \[Android禅修之路\] 解读 GraphicBuffer 之 Framework 层
下一篇: 【Flutter 组件集录】ImageFiltered 图像滤镜
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值