مدیریت Asset ها

فینچ یک سیستم مدیریت asset داخلی دارد که به شما امکان می‌دهد فایل‌های JS و CSS را از هر کجا ثبت کنید و سپس آن‌ها را در قالب‌ها رندر کنید.

پیکربندی

publicDir را در FinchConfigs تنظیم کنید تا فایل‌های استاتیک سرو شوند:

FinchConfigs(
  publicDir: './public',
)

افزودن Asset

Asset ها را در controller یا middleware ثبت کنید:

import 'package:finch/finch_ui.dart';

// افزودن یک asset
rq.addAsset(AssetType.js,  '/public/js/app.js');
rq.addAsset(AssetType.css, '/public/css/app.css');

// افزودن چندین asset به یک‌باره
rq.addAssets(AssetType.js, [
  '/public/js/vendor.js',
  '/public/js/app.js',
]);

رندر Asset در قالب

در قالب Jinja از متدهای assets استفاده کنید:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>برنامه من</title>
  {# رندر تمام تگ‌های <link> ثبت‌شده #}
  {{ assets.css() }}
</head>
<body>
  {% block content %}{% endblock %}

  {# رندر تمام تگ‌های <script> ثبت‌شده #}
  {{ assets.js() }}
</body>
</html>

متدهای assets.css() و assets.js() تمام asset های ثبت‌شده مرتبط را رندر می‌کنند:

<link rel="stylesheet" href="/public/css/app.css">
<script src="/public/js/vendor.js"></script>
<script src="/public/js/app.js"></script>

Asset های شرطی

می‌توانید در action های مختلف controller از asset های متفاوت استفاده کنید:

class DashboardController extends FinchController {
  @override
  Future<String> index() async {
    rq.addAsset(AssetType.css, '/public/css/dashboard.css');
    rq.addAsset(AssetType.js,  '/public/js/charts.js');
    return rq.renderView(path: 'dashboard/index');
  }

  @override
  Future<String> show() async {
    rq.addAsset(AssetType.css, '/public/css/detail.css');
    return rq.renderView(path: 'dashboard/show');
  }
}