Flutter增强容器插件enhanced_containers的使用

Flutter增强容器插件enhanced_containers的使用

这是一个集合了Dart和Flutter中的ListMap容器接口的库。

目录

如何使用enhanced_containers包

有一个例子展示了如何使用该包。简单来说,ListXxxMapXxx可以像普通的ListMap一样使用。例如,如果声明了一个ListProvider,那么这个ListProvider可以作为普通的List使用,但会自动处理notifyListeners()的相关操作。

ItemSerializable

这是任何enhanced_container的基本项,即如果要使用任何enhanced_container,则项目必须是一个ItemSerializable

要声明一个ItemSerializable,需要提供serializeMap()方法,该方法返回应可序列化的项(即基本类型如intdoubleString等或另一个ItemSerializable)。

列表
ListSerializable

ListSerializable是一个可以序列化的List(即其中的项为ItemSerializable类型)。这在将List发送到数据库时特别有用。

要声明一个ListSerializable,需要提供一个ItemSerializable deserializeItem(data)方法,该方法调用(或实现)ItemSerializable.serializeMap()的反过程。此方法会在需要时自动调用。

ListProvider

ListProvider基本上是一个ListSerializable,但它会调用notifyListeners()

FirebaseListProvided

顾名思义,FirebaseListProvided是一个ListProvider,它会调用Firebase数据库并自行更新键,同时作为一个提供者。

要构建一个FirebaseListProvided,需要声明一个带有pathToData构造函数,例如:FirebaseListOfMyRandomItem({required super.pathToData});。可选地,也可以指定pathToAvailableDataIds。默认情况下,pathToAvailableDataIdspathToData加上ids

可用ID是一种确保一个人不会看到其他用户的数据的方法。例如,如果person1向列表添加数据而person2也添加数据,所有数据都存储在pathToData中,但只有标记为可用的数据才会分别显示给person1和person2。

映射
MapSerializable

ListSerializable类似,MapSerializable基本上是一个包含ItemSerializableMap

要声明一个MapSerializable,需要提供一个ItemSerializable deserializeItem(data)方法,该方法调用(或实现)ItemSerializable.serializeMap()的反过程。此方法会在需要时自动调用。

MapProvided

MapProvider基本上是一个MapSerializable,但它会调用notifyListeners()

FirebaseMapProvided

目前还没有FirebaseMapProvided。如果需要,可以将MapSerializable包装在一个ListSerializable中。

示例

可以在官方Git仓库中找到一个示例:https://github.com/cr-crme/enhanced_containers/

这个示例可以作为模板来构建自己的enhanced_containers

如何贡献

增强增强器

并非所有的ListMap方法都在其各自的增强版本中实现。可以通过实现这些方法来提供帮助。

更多数据库

目前只有Firebase接口数据库实现,但没有理由只拥有它们。任何想要帮忙的人都可以实现更多的数据库。

文档

请毫不犹豫地纠正或修改文档,因为更好的文档意味着更好的可用性!

引用

如果使用,请引用该包如下:

@misc{
    MichaudEnhancedContainers2022, 
    author = {Michaud, Benjamin and Stephenne, Laurent}, 
    title = {Enhanced containers for Dart and Flutter}, 
    howpublished={Web page}, 
    url = {https://github.com/cr-crme/enhanced_containers}, 
    year = {2022} 
}

完整示例代码

以下是完整的示例代码,展示了如何使用enhanced_containers插件。

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

// 导入自定义的提供者类
import './providers/list_of_my_random_item.dart';
import './providers/map_of_my_random_item.dart';
import './screens/main_screen.dart';
import './screens/shared_data_first_screen.dart';
import './screens/shared_data_second_screen.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        // 创建并注册 ListOfMyRandomItem 提供者
        ChangeNotifierProvider(create: (context) => ListOfMyRandomItem()),
        // 创建并注册 MapOfMyRandomItem 提供者
        ChangeNotifierProvider(create: (context) => MapOfMyRandomItem()),
      ],
      child: MaterialApp(
        title: '增强容器演示',
        initialRoute: MainScreen.route,
        routes: {
          MainScreen.route: (context) => const MainScreen(),
          SharedDataFirstScreen.route: (context) => const SharedDataFirstScreen(),
          SharedDataSecondScreen.route: (context) => const SharedDataSecondScreen(),
        },
      ),
    );
  }
}

更多关于Flutter增强容器插件enhanced_containers的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter增强容器插件enhanced_containers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


enhanced_containers 是一个 Flutter 插件,它提供了一些增强的容器类,可以简化开发者在 Flutter 应用中使用容器时的一些常见操作。以下是如何使用 enhanced_containers 插件的基本步骤和一些常见用法。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 enhanced_containers 依赖:

dependencies:
  flutter:
    sdk: flutter
  enhanced_containers: ^1.0.0  # 请检查最新版本

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

2. 导入插件

在你的 Dart 文件中导入 enhanced_containers

import 'package:enhanced_containers/enhanced_containers.dart';

3. 使用增强的容器类

enhanced_containers 提供了以下几种增强的容器类:

EnhancedContainer

EnhancedContainer 是一个增强版的 Container,它支持更多的属性和功能。

EnhancedContainer(
  width: 200,
  height: 200,
  color: Colors.blue,
  borderRadius: BorderRadius.circular(10),
  shadow: BoxShadow(
    color: Colors.black.withOpacity(0.3),
    blurRadius: 10,
    spreadRadius: 2,
  ),
  child: Center(
    child: Text(
      'Enhanced Container',
      style: TextStyle(color: Colors.white, fontSize: 20),
    ),
  ),
)

EnhancedListView

EnhancedListView 是一个增强版的 ListView,它支持更多的属性和功能,例如自动滚动、动态加载等。

EnhancedListView(
  itemCount: 20,
  itemBuilder: (context, index) {
    return ListTile(
      title: Text('Item $index'),
    );
  },
  onEndReached: () {
    // 当列表滚动到底部时触发
    print('End reached!');
  },
)

EnhancedGridView

EnhancedGridView 是一个增强版的 GridView,它支持更多的属性和功能,例如自动滚动、动态加载等。

EnhancedGridView.count(
  crossAxisCount: 2,
  children: List.generate(20, (index) {
    return Container(
      color: Colors.blue,
      child: Center(
        child: Text(
          'Item $index',
          style: TextStyle(color: Colors.white, fontSize: 20),
        ),
      ),
    );
  }),
  onEndReached: () {
    // 当网格滚动到底部时触发
    print('End reached!');
  },
)

4. 其他功能

enhanced_containers 还提供了其他一些功能,例如:

  • EnhancedColumnEnhancedRow:增强版的 ColumnRow,支持更多的布局选项。
  • EnhancedStack:增强版的 Stack,支持更多的布局选项。
  • EnhancedAnimatedContainer:增强版的 AnimatedContainer,支持更多的动画效果。

5. 自定义和扩展

你可以通过继承这些增强的容器类来自定义和扩展它们的行为,以满足你的特定需求。

6. 示例代码

以下是一个完整的示例代码,展示了如何使用 enhanced_containers 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Enhanced Containers Example'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              EnhancedContainer(
                width: 200,
                height: 200,
                color: Colors.blue,
                borderRadius: BorderRadius.circular(10),
                shadow: BoxShadow(
                  color: Colors.black.withOpacity(0.3),
                  blurRadius: 10,
                  spreadRadius: 2,
                ),
                child: Center(
                  child: Text(
                    'Enhanced Container',
                    style: TextStyle(color: Colors.white, fontSize: 20),
                  ),
                ),
              ),
              SizedBox(height: 20),
              EnhancedListView(
                itemCount: 20,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('Item $index'),
                  );
                },
                onEndReached: () {
                  print('End reached!');
                },
              ),
              SizedBox(height: 20),
              EnhancedGridView.count(
                crossAxisCount: 2,
                children: List.generate(20, (index) {
                  return Container(
                    color: Colors.blue,
                    child: Center(
                      child: Text(
                        'Item $index',
                        style: TextStyle(color: Colors.white, fontSize: 20),
                      ),
                    ),
                  );
                }),
                onEndReached: () {
                  print('End reached!');
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部