我的第一个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 官网直接复制…...
企业微信,阿里钉钉告警群机器人
链接:如何通过企业微信群接收报警通知_云监控-阿里云帮助中心...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
