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中引用

 url_strategy: ^0.2.0

pub get
在mian.dart中配置 usePathUrlStrategy();

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

3、运行

新建页面运行
记得将运行设备选到web

在这里插入图片描述

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这个widgetweb上支持有限,这时候建议使用其他方式来加载图片
我们选择使用img标签来显示,通过ImageElements来实现即可,代码如下:

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包装即可,如下:

ClipOval(
  child: WebImage("https://cdnimagelive.knowbox.cn/image/784111920965119.png", 50, 50)
)

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

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

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 08:04:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 08:04:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 08:04:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 08:04:04       18 阅读

热门阅读

  1. 漫谈:C语言 C++ 所有编程语言 =和==的麻烦

    2024-04-13 08:04:04       16 阅读
  2. day16 初始面向对象

    2024-04-13 08:04:04       12 阅读
  3. 设计模式: 行为型之访问者模式(22)

    2024-04-13 08:04:04       19 阅读
  4. 2024软考系统架构师-案例题分享2(带答案)

    2024-04-13 08:04:04       157 阅读
  5. 网络安全之反弹Shell

    2024-04-13 08:04:04       22 阅读
  6. HiveSQL基础Day04

    2024-04-13 08:04:04       13 阅读
  7. SQL Server的索引选择

    2024-04-13 08:04:04       13 阅读