我的第一个flutter项目(Android Webview)
前言:flutter开发环境搭建Flutter的开发环境搭建-图解_☆七年的博客-CSDN博客
第一个flutter简单项目,内容是一个主界面,其中:
1.内容点击数字自增
2.跳转一个空页,
3.跳转一个WebView界面
其中涉及添加主键,新建界面类,导入依赖,使用WebView, 兼容http网络安全

一、主界面 main.dart文件
import 'package:flutter/material.dart';import 'package:flutterdemo/newpage.dart';import 'package:flutterdemo/webviewExamlpe.dart';void main() {runApp(const MyApp());}/// 这里我们的MyApp是一个类,继承了StatelessWidgetclass MyApp extends StatelessWidget {const MyApp({super.key});/// 这个组件是这个app的根 这是一个无状态部件,然后实现构造方法,@overrideWidget build(BuildContext context) {///构造方法里面通过MaterialApp()函数定义风格,然后是标题、主题和主页面信息,return MaterialApp(title: 'Flutter Demo',theme: ThemeData(///这里有一个Colors.blue,你试一下改成red,或者green。///如果你这时候项目是运行在模拟器 或者真机上的话,你可以修改后Ctrl + S 进行保存。就能同步展示colorScheme: ColorScheme.fromSeed(seedColor: Colors.green),useMaterial3: true,),/// 这里主页面home中调用MyHomePage()函数,也就是我们当前页面所显示的内容。home: const MyHomePage(title: '主页'),);}}/// 这里MyHomePage继承StatefulWidget,/// 这是一个有状态的部件,这里就需要一个状态了,/// 通过createState()得到一个_MyHomePageState,/// 这个_MyHomePageState()就是这个页面的主要内容了,它里面是class MyHomePage extends StatefulWidget {const MyHomePage({super.key, required this.title});final String title;@overrideState<MyHomePage> createState() => _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> {int _counter = 0;void _incrementCounter() {setState(() {_counter++;});}void _goToNewPage() {Navigator.push(context,MaterialPageRoute(builder: (context) => NewPage()),);}// 例如,在主页的某个按钮点击事件中进行页面跳转void _goToWebViewPage() {Navigator.push(context,MaterialPageRoute(builder: (context) => WebViewExample()),);}/// 在 build 方法中,我们通常通过对基础 Widget 进行相应的 UI 配置,或是组合各类基础 Widget 的方式进行 UI 的定制化。@overrideWidget build(BuildContext context) {///这里返回一个Scaffold,这是一个脚手架,用来构建页面return Scaffold(///然后我们看Scaffold中的内容,AppBar 是页面的导航栏,我们直接将 MyHomePage 中的 title 属性作为标题使用。appBar: AppBar(backgroundColor: Theme.of(context).colorScheme.inversePrimary,///这里我们从App.build方法创建的MyHomePage对象中获取值,并使用它来设置appbar的标题。title: Text(widget.title),),///body 主题内容body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[const Text('你可以点击按钮增加数字:',),Text('$_counter',style: Theme.of(context).textTheme.headlineMedium,),///按钮,_incrementCounter 作为其点击处理函数,数字自增。ElevatedButton(onPressed: () {_incrementCounter();},// child: const Icon(Icons.add),child: const Icon(Icons.add),),///按钮。我们将 _goToNewPage 作为其点击处理函数,跳转空白页ElevatedButton(onPressed: () {_goToNewPage();},// child: const Icon(Icons.add),child: Text('click me ,go to newPage'),),],),),///悬浮按钮,则是页面右下角的带“->”的悬浮按钮。我们将 _goToWebViewPager 作为其点击处理函数。floatingActionButton: FloatingActionButton(onPressed: _goToWebViewPage,tooltip: 'Go to New Page',child: const Icon(Icons.arrow_forward),),);}}

二、空页面 newpager.dart
import 'package:flutter/material.dart';class NewPage extends StatelessWidget {const NewPage({super.key});@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('New Page'),),body: const Center(child: Text('This is a new page!',style: TextStyle(fontSize: 20),),),);}}

三、Webview界面 webViewExample.dart
import 'package:flutter/material.dart';import 'package:webview_flutter/webview_flutter.dart';class WebViewExample extends StatefulWidget {@override_WebViewExampleState createState() => _WebViewExampleState();}class _WebViewExampleState extends State<WebViewExample> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Web View Example'),),body: const WebView(initialUrl: 'http://www.baidu.com', // 替换为你想要嵌套的网页地址javascriptMode: JavascriptMode.unrestricted, // 允许执行JavaScript代码),);}}

其中在pubspec.yaml文件中添加webview_flutter插件依赖: 然后运行flutter pub get来获取插件依赖。

四.可能遇到的问题
1.flutter 打开网页ERR_CLEARTEXT_NOT_PERMITTED
方案: 在`android/app/src/main/AndroidManifest.xml`文件中的`application`标签下添加以下行:
```xml
android:usesCleartextTraffic="true"
```
- 保存文件并重新编译Flutter应用。
https://blog.csdn.net/ly_xiamu/article/details/131931357
2.minSdkVersion is 16 不匹配,直接修改android/app/src/build.gradle 改成对应的如 19

五.编译出apk
1.你可以直接在AS中运行或者项目cmd命令行中flutter build apk命令来生成未签名的APK文件,它将位于Flutter项目的/build/app/outputs/flutter-apk目录下。
2.签名apk
给APK签名—两种方式(flutter android 安装包)_☆七年的博客-CSDN博客
创造价值,乐哉分享!776147358
相关文章:
我的第一个flutter项目(Android Webview)
前言:flutter开发环境搭建Flutter的开发环境搭建-图解_☆七年的博客-CSDN博客 第一个flutter简单项目,内容是一个主界面,其中: 1.内容点击数字自增 2.跳转一个空页, 3.跳转一个WebView界面 其中涉及添加主键…...
微信机器人搭建详细教程
确保已安装Python和pip。 在D盘上创建名为wxbot的文件夹,并将你的Python机器人项目文件放在这个目录中。 在D盘的wxbot文件夹中打开命令行工具,并创建一个新的Python虚拟环境(可选): python -m venv venv激活虚拟环…...
opengauss安装
opengauss安装 系统环境 Redhat版本:redhat7.6 虚拟机ip:192.168.5.144 Gauss版本:openGauss-5.0.0-CentOS-64bit-all.tar.gz 企业版 一.准备软硬件环境 1.1 安装依赖包 yum -y install bzip2 python3 libaio-devel flex bis…...
什么是SVM算法?硬间隔和软间隔的分类问题
SVM全称是supported vector machine(支持向量机),即寻找到一个超平面使样本分成两类,并且间隔最大。 SVM能够执行线性或⾮线性分类、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。…...
Normalization(BN and LN) in NN
Batch Normalization 称为批标准化。批是指一批数据,通常为 mini-batch;标准化是处理后的数据服从 N ( 0 , 1 ) N(0,1) N(0,1) 的正态分布。在训练过程中,数据需要经过多层的网络,如果数据在前向传播的过程中,尺度发…...
opencv-22 图像几何变换01-缩放-cv2.resize()(图像增强,图像变形,图像拼接)
什么是几何变换? 几何变换是计算机图形学中的一种图像处理技术,用于对图像进行空间上的变换,而不改变图像的内容。这些变换可以通过对图像中的像素位置进行调整来实现。 常见的几何变换包括: 平移(Translation&#x…...
python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归
线性回归所解决的问题是把数据集的特征传入到模型中,预测一个值使得误差最小,预测值无限接近于真实值。比如把房子的其他特征传入到模型中,预测出房价, 房价是一系列连续的数值,线性回归解决的是有监督的学习。有很多场…...
聊聊Linq中.AsEnumerable(), AsQueryable() ,.ToList(),的区别和用法
聊聊Linq中.AsEnumerable(), AsQueryable() ,.ToList(),的区别和用法 当使用LINQ查询数据时,我们常常会面临选择使用.AsEnumerable(), .AsQueryable(), 和 .ToList()方法的情况。这些方法在使用时有不同的效果和影响,需要根据具体场景来选择合适的方法。…...
【机器学习】机器学习中的“本体”概念
一、说明 在机器学习中,本体越来越多地用于提供基于相似性分析和场景知识的 ML 模型。 在传统的基于标签的定义中,对象往往是孤立的,可扩展性差,存在重复的可能性,对象之间的关系无法体现。在基于本体的定义中…...
ChatGPT是否能够进行对话中的参考和指代解析?
ChatGPT在对话中的参考和指代解析方面有一定的潜力,但需要针对具体任务和上下文进行定制和优化。参考和指代解析是指理解对话中的代词、名词短语等表达方式所指代的具体对象或信息。在对话中,参考和指代解析对于理解上下文、保持对话连贯性和生成准确回复…...
网红项目AutoGPT源码内幕及综合案例实战(三)
AutoGPT on LangChain PromptGenerator等源码解析 本节阅读AutoGPT 的prompt_generator.py源代码,其中定义了一个PromptGenerator类和一个get_prompt函数,用于生成一个提示词信息。PromptGenerator类提供了添加约束、命令、资源和性能评估等内容的方法,_generate_numbered_l…...
第八章:list类
系列文章目录 文章目录 系列文章目录前言list的介绍及使用list的介绍list的使用list的构造函数list的迭代器list的容量list的成员访问list的增删改查 list与vector的对比总结 前言 list是STL的一种链表类,可以在常数范围内在任意位置进行插入和删除的序列式容器。 …...
VUE声音-报警-实现方式
1.先准备一个mp3文件包:(这个24小时生效如果失效可留言,看到就会增加时效) 获取mp3地址: https://www.aliyundrive.com/t/uQ8zqjn9JKSfm7QlGOSr2.代码内容 进入页面就会自动 播放mp3的内容信息了。 <template>…...
【Coppeliasim C++】焊接机械臂仿真
项目思维导图 该项目一共三个demo: 机械臂末端走直线 2. 变位机转台转动 3.机械臂末端多点样条运动 笔记: 基于等级的蚁群系统在3D网格地图中搜索路径的方法: 基于等级的蚁群系统(Hierarchical Ant Colony System,HACS)是一种改进的蚁群优化算法。它在传…...
【LeetCode】94.二叉树的中序遍历
题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入:root [1] 输…...
AWS IAM介绍
前言 AWS是世界上最大的云服务提供商,它提供了很多组件供消费者使用,其中进行访问控制的组件叫做IAM(Identity and Access Management), 用来进行身份验证和对AWS资源的访问控制。 功能 IAM的功能总结来看,主要分两种࿱…...
MySQL碎片清理
为什么产生? 经过大量增删改的表,都可能存在碎片 MySQL数据结构是B树, 删除某一记录,只会标记为删除,后续插入一条该区间的记录,就会复用这个位置。 删除整个数据页的记录,则整个页标记为“可…...
elasticsearch操作(API方式)
说明:es操作索引库、文档,除了使用它们自带的命令外(参考:http://t.csdn.cn/4zpmi),在IDEA中可以添加相关的依赖,使用对应的API来操作。 准备工作 搭建一个SpringBoot项目,DAO使用…...
Vue2.0 使用 echarts
目录 1. 配置 渲染2. 数据渲染 1. 配置 渲染 安装 echarts 依赖 npm install echarts -Smain.js,引入 echarts import * as echarts from echarts// 在import的后面,echarts的前面加一个 * as Vue.prototype.$echarts echarts从 echarts 官网直接复制…...
企业微信,阿里钉钉告警群机器人
链接:如何通过企业微信群接收报警通知_云监控-阿里云帮助中心...
从USB转TTL接线到手机热点配网:ESP8266无线通信保姆级避坑指南(附软件包)
从USB转TTL接线到手机热点配网:ESP8266无线通信保姆级避坑指南 当你第一次拿起ESP8266模块时,可能会被这个小巧的Wi-Fi模块惊艳到——它只有指甲盖大小,却蕴含着强大的无线通信能力。但很快,这种惊艳就会变成困惑:为什…...
ARM指令追踪技术及TRCVICTLR寄存器详解
1. ARM指令追踪技术概述在嵌入式系统开发和调试过程中,指令追踪(Instruction Trace)是一项至关重要的技术。它通过硬件机制记录处理器的执行流程,为开发者提供程序运行的完整轨迹。ARM架构从v7开始引入嵌入式跟踪宏单元࿰…...
Python基础语法:常用内置函数
round():四舍五入 # 省略 ndigits print(round(3.14)) # 输出 3(int) print(round(3.66)) # 输出 4# 指定 ndigits print(round(3.14159, 2)) # 输出 3.14(float) print(round(3.666, 2)) # 输出 3.67# …...
NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台
NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经面对Minecraft世界文件…...
基于ISDN信令的来电语音播报系统:从原理到树莓派实现
1. 项目概述:一个基于ISDN的来电语音播报系统如果你家里或办公室里还有一台老式的ISDN路由器,别急着把它当电子垃圾处理掉。我最近就利用手头一台闲置的ISDN路由器,折腾出了一个挺有意思的小玩意儿:一个能自动识别来电号码&#x…...
从API调用成功率看Taotoken服务的稳定性与容灾表现
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从API调用成功率看Taotoken服务的稳定性与容灾表现 在将大模型能力集成到自动化流程或日常开发工具链时,服务的稳定性和…...
DeepSeek模型选型终极指南(附完整Benchmark Excel模板):从MMLU到GPQA、从AIME到LiveCodeBench,一表看透真实能力边界
更多请点击: https://intelliparadigm.com 第一章:DeepSeek模型选型终极指南(附完整Benchmark Excel模板):从MMLU到GPQA、从AIME到LiveCodeBench,一表看透真实能力边界 选择适配业务场景的DeepSeek模型&am…...
<数据集>yolo高粱叶片病害识别<目标检测>
数据集下载链接https://download.csdn.net/download/qq_53332949/92902223数据集格式:VOCYOLO格式 图片数量:3242张 标注数量(xml文件个数):3242 标注数量(txt文件个数):3242 标注类别数:1 使用标注工具ÿ…...
多智能体协作系统:2026年企业级AI应用的核心架构范式
引言:AI Agent从单兵作战到团队协作的范式跃迁 2026年,人工智能领域正在经历一场深刻的架构变革。回想2024年,当ChatGPT、Claude等大语言模型横空出世时,我们惊叹于单个AI模型的强大能力。然而,随着企业级应用的深入,单一AI Agent的局限性日益凸显:它无法同时处理多领域…...
5步掌握AMD锐龙SDT调试工具:从硬件小白到调优高手的实战指南
5步掌握AMD锐龙SDT调试工具:从硬件小白到调优高手的实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
