Flutter图片拼贴插件image_collage_widget_updated的使用

Flutter图片拼贴插件image_collage_widget_updated的使用

A flutter package for creating photo collages in your applications.

预览

image image image

关键特性

  • 创建11种不同类型的拼贴。
  • 可以从图库预加载图像(仅限Android)。
  • 允许用户向拼贴中添加或删除照片。
  • 用户可以从图库或相机更新图像。
  • 不用担心权限问题,我们已经处理好了。

使用方法

步骤1:在pubspec.yaml文件中添加依赖

dependencies:
  ...
  image_collage_widget: ^1.0.1

步骤2:准备AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

步骤3:准备Info.plist

<key>NSPhotoLibraryUsageDescription</key>
<string>Need to access photo library</string>
<key>NSCameraUsageDescription</key>
<string>To upload your picture</string>

步骤4:在Dart文件中添加ImageCollageWidget

import 'package:image_collage_widget/image_collage_widget.dart';
import 'package:image_collage_widget/utils/collage_type.dart';

...

/// @param withImage:- 如果withImage为true,则将从给定的{filePath(默认值= "Camera")}加载图像
/// @param collageType:- CollageType.CenterBig

child: ImageCollageWidget(
  collageType: widget.collageType,
  withImage: true,
  filePath: _directory?.path?.toString(),
),

依赖项

  • flutter_staggered_grid_view
  • flutter_bloc
  • flutter_file_manager
  • permission_handler
  • image_picker
  • equatable

许可证

Image Collage Widget 的许可证为 MIT 许可证。

让我们知道!

如果您在项目中使用了我们的组件,请发送电子邮件到 sales@mindinventory.com 告诉我们。如果您有任何问题或建议,请随时与我们联系。


示例代码

import 'package:flutter/material.dart';

import 'src/screens/collage_sample.dart';
import 'src/tranistions/fade_route_transition.dart';

import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:image_collage_widget_updated/utils/CollageType.dart';

void main() {
  BlocOverrides.runZoned(
    () => runApp(MyApp()),
    blocObserver: AppBlocObserver(),
  );
}

// 自定义[BlocObserver],用于观察所有bloc和cubit的状态变化。
class AppBlocObserver extends BlocObserver {
  [@override](/user/override)
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
  }

  [@override](/user/override)
  void onTransition(Bloc bloc, Transition transition) {
    super.onTransition(bloc, transition);
  }
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primaryColor: Colors.blue,
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var color = Colors.white;

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    Widget buildRaisedButton(CollageType collageType, String text) {
      return ElevatedButton(
        onPressed: () => pushImageWidget(collageType),
        style: ButtonStyle(
            foregroundColor: MaterialStateProperty.all(Colors.white),
            shape: MaterialStateProperty.all<RoundedRectangleBorder>(
              buttonShape(),
            )
        ),
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text(text),
        ),
      );
    }

    ///创建多个形状
    return Scaffold(
      appBar: AppBar(
        title: Text("测试"),
      ),
      body: Center(
        child: ListView(
          padding: EdgeInsets.all(16.0),
          shrinkWrap: true,
          children: [
            buildRaisedButton(CollageType.VSplit, 'Vsplit'),
            buildRaisedButton(CollageType.HSplit, 'HSplit'),
            buildRaisedButton(CollageType.FourSquare, 'FourSquare'),
            buildRaisedButton(CollageType.NineSquare, 'NineSquare'),
            buildRaisedButton(CollageType.ThreeVertical, 'ThreeVertical'),
            buildRaisedButton(CollageType.ThreeHorizontal, 'ThreeHorizontal'),
            buildRaisedButton(CollageType.LeftBig, 'LeftBig'),
            buildRaisedButton(CollageType.RightBig, 'RightBig'),
            buildRaisedButton(CollageType.FourLeftBig, 'FourLeftBig'),
            buildRaisedButton(CollageType.VMiddleTwo, 'VMiddleTwo'),
            buildRaisedButton(CollageType.CenterBig, 'CenterBig'),
          ],
        ),
      ),
    );
  }

  ///点击特定类型的按钮时显示该类型的widget
  pushImageWidget(CollageType type) async {
    await Navigator.of(context).push(
      FadeRouteTransition(page: CollageSample(type)),
    );
  }

  RoundedRectangleBorder buttonShape() {
    return RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0));
  }
}

更多关于Flutter图片拼贴插件image_collage_widget_updated的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片拼贴插件image_collage_widget_updated的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用image_collage_widget_updated插件来创建一个图片拼贴的基本示例代码。这个插件允许你轻松地创建和自定义图片拼贴。

首先,确保你已经将image_collage_widget_updated插件添加到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  image_collage_widget_updated: ^最新版本号

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

接下来,你可以在你的Flutter应用中使用以下代码来创建一个简单的图片拼贴:

import 'package:flutter/material.dart';
import 'package:image_collage_widget_updated/image_collage_widget.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Image Collage Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CollageScreen(),
    );
  }
}

class CollageScreen extends StatefulWidget {
  @override
  _CollageScreenState createState() => _CollageScreenState();
}

class _CollageScreenState extends State<CollageScreen> {
  final List<String> imageUrls = [
    'https://example.com/image1.jpg',
    'https://example.com/image2.jpg',
    'https://example.com/image3.jpg',
    'https://example.com/image4.jpg',
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Collage Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: GridView.builder(
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2,
            crossAxisSpacing: 8,
            mainAxisSpacing: 8,
          ),
          itemCount: imageUrls.length,
          itemBuilder: (BuildContext context, int index) {
            return CollageWidget.builder(
              imageUrl: imageUrls[index],
              width: 200,
              height: 200,
              placeholder: Center(child: CircularProgressIndicator()),
              onImageError: (context, url, error) {
                return Center(child: Text('Failed to load $url'));
              },
              onImageLoaded: (context, url) {
                // Optionally, you can return a widget to show when the image is loaded
                return null;
              },
              builder: (context, imageProvider) {
                return DecoratedBox(
                  decoration: BoxDecoration(
                    image: DecorationImage(
                      image: imageProvider,
                      fit: BoxFit.cover,
                    ),
                    borderRadius: BorderRadius.circular(16),
                  ),
                );
              },
            );
          },
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个显示图片拼贴的GridView。我们使用CollageWidget.builder方法来为每个图片URL创建一个拼贴项。你可以根据需要调整widthheight和其他参数。

请注意,这个示例假设你有一组图片URL。如果你希望使用本地图片,可以将imageUrl替换为本地资源路径,例如assets/images/image1.jpg,并确保在pubspec.yaml文件中正确声明这些资源。

此外,CollageWidget.builder方法提供了处理图像加载错误和加载完成后的回调,你可以根据需要自定义这些回调。

这个示例只是一个基本的起点,你可以根据image_collage_widget_updated插件的文档进一步自定义和扩展你的拼贴功能。

回到顶部