Android Studio 使用Flutter开发第一个Web页面(进行中)

附上Flutter官方文档

1、新建Flutter项目(需要勾选web选项)

新建项目构成为:

2、配置 Flutter 使用 path 策略

官方文档

在main.dart中,需要导入flutter_web_plugins/url_strategy.dart包,并在main(){}函数中usePathUrlStrategy();这是官方文档中让Flutter 使用 path 策略的方法

引用:

pubspec.yaml中引用

java 复制代码
 url_strategy: ^0.2.0

pub get

在mian.dart中配置 usePathUrlStrategy();

java 复制代码
import 'package:flutter_web_plugins/url_strategy.dart';
void main() {
  usePathUrlStrategy();
  runApp(const MyApp());
}

3、运行

新建页面运行

记得将运行设备选到web

java 复制代码
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class LoginPage extends StatefulWidget{
  @override
  State<StatefulWidget> createState() =>LoginState();
}

class LoginState extends State<LoginPage>{
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: buildBody(),
    );
  }

  Widget buildBody(){
    return Stack(
      children: [
        Image.network('http://192.168.0.86:81/img/login-bg.svg')
      ],
    );

  }

}

使用Image展示网络图片

第一次运行报错:

解决方案一:

终端执行命令:flutter run -d chrome --web-renderer html

再次运行:

该方案缺点:

每次重新运行图片都会报错,需要重新执行flutter run -d chrome --web-renderer html命令

方案二:

看报错提示应该与跨域有关,根据官网的相关文档,Image这个widget在web上支持有限,这时候建议使用其他方式来加载图片

我们选择使用img标签来显示,通过ImageElements来实现即可,代码如下:

java 复制代码
import 'dart:html';
import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';

class WebImage extends StatelessWidget{
  String url;
  double width;
  double height;

  WebImage(this.url, this.width, this.height);

  @override
  Widget build(BuildContext context) {
    String _divId = "web_image_" + DateTime.now().toIso8601String();
    // ignore: undefined_prefixed_name
    ui.platformViewRegistry.registerViewFactory(
      _divId,
          (int viewId) => ImageElement(src: url),
    );
    return SizedBox(
      width: width,
      height: height,
      child: HtmlElementView(key: UniqueKey(),
        viewType: _divId,),
    );
  }

}

注意,这种方式图片不能按照自身尺寸显示,所以必须设置宽高才可以。

如果想使用圆形图片,则用ClipOval包装即可,如下:

java 复制代码
ClipOval(
  child: WebImage("https://cdnimagelive.knowbox.cn/image/784111920965119.png", 50, 50)
)

更多问题处理方案请参考下面文章:
【Flutter进阶】 Web开发中如何加载网络图片

遇到问题:如何禁止图片缩放

相关推荐
wangruofeng4 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng4 小时前
给前端开发者的 100 个设计参考网站
前端·设计
LinXunFeng7 小时前
拿竞品 App 一扫,技术栈全暴露了
android·flutter·开源
星栈7 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技7 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569157 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马10 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng10 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding11 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
鶴哥只手遮天12 小时前
《Electron 45.2.3 内核解剖》第 4 章 补丁体系:380 个补丁改了什么
前端·electron