Flutter样式管理插件style_mongo的使用

Flutter样式管理插件style_mongo的使用

使用

将style_mongo添加到组件树

[@override](/user/override)
Component build(BuildContext context) {
  return Server(
      dataAccess: DataAccess(
          MongoDbDataAccessImplementation("<connection-string>")
      ),
      children: [
        // 其他子组件
      ]);
}

或者

[@override](/user/override)
Component build(BuildContext context) {
  return ServiceWrapper<
      DataAccess>(
    service: DataAccess(
        MongoDbDataAccessImplementation("<connection-string>")
    ),
    child: YourChildComponent(),
  );
}

操作

FutureOr<Object> onCall(Request request) {
  return Access(
    collection: "<collection>",
    type: type,

    // 可选。对于某些操作是必要的
    // 也可以使用"Query"
    query: MongoQuery(where.eq("field", "value")),
    
    // 可选。聚合操作时必要
    pipeline: AggregationPipelineBuilder(/*stages*/),
    // 或者 pipeline: [{"\$project" : {"_id":0}}],
  );
}

你可以使用不同的风格进行操作,例如 DataAccess.of(ctx).read(..)

使用Query时,selector参数必须是MongoDB样式的Map。因此必须是 where.eq("field", "value").map["\$query"]

设置

MongoDB有许多操作设置,如WriteConcern。你可以通过以下方式设置这些设置:

f(){
  final access = Access(
      settings: MongoDbFindSettings(findOptions: FindOptions(returnKey: true))
    // 其他配置项
  );
}

所有操作都有相应的设置,除了count和exists。

示例用法

示例代码

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

import 'package:mongo_dart/mongo_dart.dart';
import 'package:style_dart/style_dart.dart';
import 'package:style_mongo/src/mongo_query.dart';
import 'package:style_mongo/src/style_mongo_base.dart';

/// 在此示例中
///
/// 客户端示例。
///
/// 创建:
///
/// ```http 请求
/// http://localhost/c/users
///
/// {
///   "data" : {
///     "name" : "Mehmet"
///   }
/// }
/// ```
///
/// 读取:
///
/// ```http 请求
/// http://localhost/r/users
///
/// {
///   "query" : where.eq("name" ,"Mehmet").map
/// }
/// ```
/// 更多示例请查看测试文件
void main() {
  runService(MongoDbExampleServer());
}

class MongoDbExampleServer extends StatelessComponent {
  const MongoDbExampleServer({Key? key}) : super(key: key);

  [@override](/user/override)
  Component build(BuildContext context) {
    return Server(
        dataAccess: DataAccess(MongoDbDataAccessImplementation(
            "mongodb://0.0.0.0:27017/demo_col")),
        children: [
          Route("{type}", child: Route("{collection}", root: MyAccessPoint()))
        ]);
  }
}

///
class MyAccessPoint extends StatelessComponent {
  final Map<String, AccessType> _types = {
    "r": AccessType.read,
    "c": AccessType.create,
    "u": AccessType.update,
    "d": AccessType.delete,
    "rl": AccessType.readMultiple,
    "e": AccessType.exists,
    "co": AccessType.count,
    "a": AccessType.aggregation
  };

  [@override](/user/override)
  Component build(BuildContext context) {
    return AccessPoint((req, c) {
      if (req.body != null && req.body is! JsonBody?) {
        print(req.body.runtimeType);
        throw BadRequests();
      }
      var type = _types[req.arguments["type"]];
      if (type == null) {
        throw BadRequests();
      }
      var body = (req.body as JsonBody?)?.data;
      return AccessEvent(
          access: Access(
              collection: req.arguments["collection"],
              type: type,
              data: body?["data"],
              pipeline: body?["pipeline"],
              query: body["query"] != null
                  ? MongoQuery(SelectorBuilder().raw(body["query"]))
                  : null),
          context: c,
          request: req);
    });
  }
}

更多关于Flutter样式管理插件style_mongo的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter样式管理插件style_mongo的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


style_mongo 是一个用于 Flutter 应用的样式管理插件,它可以帮助开发者更好地管理和组织应用的样式。通过使用 style_mongo,你可以将样式定义集中化管理,减少代码冗余,并提高代码的可维护性。

安装 style_mongo

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

dependencies:
  flutter:
    sdk: flutter
  style_mongo: ^1.0.0  # 请确保使用最新版本

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

基本用法

  1. 定义样式

    你可以在一个单独的文件中定义所有的样式。例如,创建一个 styles.dart 文件:

    import 'package:style_mongo/style_mongo.dart';
    
    final appStyles = StyleMongo({
      'text': TextStyle(
        fontSize: 16,
        color: Colors.black,
      ),
      'button': BoxDecoration(
        color: Colors.blue,
        borderRadius: BorderRadius.circular(8),
      ),
      'title': TextStyle(
        fontSize: 24,
        fontWeight: FontWeight.bold,
        color: Colors.blue,
      ),
    });
    
  2. 使用样式

    在需要使用样式的地方,你可以通过 appStyles 来获取定义好的样式:

    import 'package:flutter/material.dart';
    import 'styles.dart';
    
    class MyHomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Style Mongo Example'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'Hello, world!',
                  style: appStyles.get<TextStyle>('text'),
                ),
                Container(
                  padding: EdgeInsets.all(16),
                  decoration: appStyles.get<BoxDecoration>('button'),
                  child: Text(
                    'Click Me',
                    style: TextStyle(color: Colors.white),
                  ),
                ),
                Text(
                  'Welcome',
                  style: appStyles.get<TextStyle>('title'),
                ),
              ],
            ),
          ),
        );
      }
    }
    
  3. 动态更新样式

    style_mongo 还支持动态更新样式。你可以通过 update 方法来更新样式:

    appStyles.update('text', TextStyle(
      fontSize: 18,
      color: Colors.red,
    ));
    

    更新后,所有使用该样式的地方都会自动更新。

高级用法

  1. 嵌套样式

    你可以将样式嵌套在其他样式中,以便更好地组织样式:

    final appStyles = StyleMongo({
      'text': TextStyle(
        fontSize: 16,
        color: Colors.black,
      ),
      'button': BoxDecoration(
        color: Colors.blue,
        borderRadius: BorderRadius.circular(8),
      ),
      'nested': {
        'title': TextStyle(
          fontSize: 24,
          fontWeight: FontWeight.bold,
          color: Colors.blue,
        ),
      },
    });
    

    使用时可以通过嵌套路径来获取样式:

    TextStyle titleStyle = appStyles.get<TextStyle>('nested.title');
    
  2. 主题管理

    你可以将 style_mongo 与 Flutter 的主题管理结合使用,以便更好地管理应用的主题样式:

    ThemeData themeData = ThemeData(
      textTheme: TextTheme(
        bodyText1: appStyles.get<TextStyle>('text'),
        headline1: appStyles.get<TextStyle>('title'),
      ),
    );
回到顶部