Flutter URL预览生成插件simple_url_preview的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter URL预览生成插件simple_url_preview的使用

simple_url_preview

In Action

获取开始

此插件用于显示URL预览。(现已迁移至null-safety)。

目前仅支持Open Graph Protocol

请使用插件的最新版本。

如何使用?

pubspec.yaml文件中添加simple_url_preview,然后运行命令flutter pub get

dependencies:
  ...
  simple_url_preview: ^3.0.1

1) 简单使用:

SimpleUrlPreview(
  url: 'https://pub.dev/',
),

2) 覆盖预览高度、内边距(默认和最小可能高度为130):

SimpleUrlPreview(
  url: 'https://pub.dev/',
  previewHeight: 200,
  previewContainerPadding: EdgeInsets.all(10),
),

3) 覆盖背景颜色:

默认背景颜色为Theme.of(context).primaryColor

SimpleUrlPreview(
  url: 'https://pub.dev/',
  bgColor: Colors.red,
),

4) 覆盖标题、描述和站点样式:

默认标题样式为:

TextStyle(
  fontWeight: FontWeight.bold,
  fontSize: 16,
  color: Theme.of(context).accentColor
)

默认描述样式为:

TextStyle(
  fontSize: 14,
  color: Theme.of(context).accentColor
)

默认站点名称样式为:

TextStyle(
  fontSize: 14,
  color: Theme.of(context).accentColor
)
SimpleUrlPreview(
  url: 'https://pub.dev/',
  titleStyle: TextStyle(
    fontSize: 16,
    fontWeight: FontWeight.bold,
    color: Colors.red,
  ),
  descriptionStyle: TextStyle(
    fontSize: 14,
    color: Theme.of(context).primaryColor,
  ),
  siteNameStyle: TextStyle(
    fontSize: 14,
    color: Theme.of(context).primaryColor,
  ),
),

5) 如果您想要可关闭的预览(点击x关闭预览):

SimpleUrlPreview(
  url: 'https://pub.dev/',
  isClosable: true,
),

6) 覆盖图像加载器颜色和标题、描述行数:

默认和最大标题行数为2,描述行数为3。

SimpleUrlPreview(
  url: 'https://pub.dev/',
  titleLines: 1,
  descriptionLines: 2,
  imageLoaderColor: Colors.white,
),

7) 覆盖URL预览的onTap回调:

默认情况下,将在默认浏览器中打开URL。

SimpleUrlPreview(
  url: 'https://pub.dev/',
  onTap: () => print('Hello Flutter URL Preview'),
),

贡献

非常希望看到您的贡献。

感激

如果您喜欢我的工作,请给仓库点个⭐。

您也可以通过以下方式表示感激:

Buy Me A Coffee PayPal Logo

完整示例代码

import 'package:flutter/material.dart';
import 'package:simple_url_preview/simple_url_preview.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple Url Preview Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        primaryColor: Colors.blue,
        accentColor: Colors.white,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Simple Url Preview Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _url = '';

  _onUrlChanged(String updatedUrl) {
    setState(() {
      _url = updatedUrl;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title!),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          SimpleUrlPreview(
            url: _url,
            bgColor: Theme.of(context).accentColor,
            isClosable: true,
            titleLines: 2,
            descriptionLines: 3,
            imageLoaderColor: Colors.white,
            previewHeight: 150,
            previewContainerPadding: EdgeInsets.all(10),
            onTap: () => print('Hello Flutter URL Preview'),
            titleStyle: TextStyle(
              fontSize: 16,
              fontWeight: FontWeight.bold,
              color: Colors.red,
            ),
            descriptionStyle: TextStyle(
              fontSize: 14,
              color: Theme.of(context).primaryColor,
            ),
            siteNameStyle: TextStyle(
              fontSize: 14,
              color: Theme.of(context).primaryColor,
            ),
          ),
          Padding(
            padding: EdgeInsets.all(20),
            child: TextField(
              onChanged: (newValue) => _onUrlChanged(newValue),
              decoration: InputDecoration(
                hintText: 'Enter the url',
              ),
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter URL预览生成插件simple_url_preview的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter URL预览生成插件simple_url_preview的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用simple_url_preview插件来生成URL预览的示例代码。这个插件允许你从URL中提取元数据(如标题、描述和图像)并显示预览。

第一步:添加依赖

首先,在你的pubspec.yaml文件中添加simple_url_preview依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_url_preview: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

第二步:导入插件

在你需要使用URL预览功能的Dart文件中导入插件:

import 'package:simple_url_preview/simple_url_preview.dart';
import 'package:flutter/material.dart';

第三步:使用插件生成URL预览

下面是一个完整的示例,展示如何使用simple_url_preview插件来获取并显示URL的预览信息:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter URL Preview Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? url = "https://www.example.com";
  UrlPreviewData? previewData;
  bool isLoading = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('URL Preview Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter URL',
                border: OutlineInputBorder(),
              ),
              onChanged: (value) {
                setUrl(value);
              },
            ),
            SizedBox(height: 16),
            if (isLoading)
              CircularProgressIndicator()
            else if (previewData != null)
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    'Title: ${previewData!.title}',
                    style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                  ),
                  SizedBox(height: 8),
                  Text('Description: ${previewData!.description}'),
                  SizedBox(height: 8),
                  if (previewData!.image != null)
                    Image.network(
                      previewData!.image!,
                      width: double.infinity,
                      height: 200,
                      fit: BoxFit.cover,
                    )
                  else
                    Container(height: 200, color: Colors.grey[200]),
                ],
              )
            else
              Text('No preview data available.'),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          fetchUrlPreview(url!);
        },
        tooltip: 'Fetch Preview',
        child: Icon(Icons.search),
      ),
    );
  }

  void setUrl(String value) {
    setState(() {
      url = value;
      previewData = null; // Clear previous preview data
    });
  }

  void fetchUrlPreview(String url) async {
    setState(() {
      isLoading = true;
    });

    try {
      previewData = await SimpleUrlPreview.getPreview(url);
    } catch (e) {
      print('Error fetching URL preview: $e');
      previewData = null;
    } finally {
      setState(() {
        isLoading = false;
      });
    }
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加simple_url_preview依赖。
  2. 导入插件:在需要使用插件的Dart文件中导入simple_url_preview
  3. 创建UI:创建一个简单的UI,包括一个TextField用于输入URL,一个按钮用于触发预览获取,以及一个区域用于显示预览结果。
  4. 获取URL预览:使用SimpleUrlPreview.getPreview(url)方法来获取URL的预览数据,并在获取成功后更新状态以显示预览。

确保在实际使用中替换https://www.example.com为你想要预览的URL,并根据需要调整UI布局和样式。

回到顶部