Skip to content

Instantly share code, notes, and snippets.

@burhanaksendir
Last active April 6, 2023 10:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save burhanaksendir/c7e279664b0ff20f995b247848f14a1f to your computer and use it in GitHub Desktop.
Save burhanaksendir/c7e279664b0ff20f995b247848f14a1f to your computer and use it in GitHub Desktop.
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
void main() => runApp(const MyApp());
const sampleText = '''
عد أسابيع من الشد والجذب، منح الاتحاد الأوروبي أخيراً الاثنين موافقته على استثناء السيارات التي تعمل بالوقود التركيبي من الحظر الذي يعتزم تطبيقه على بيع السيارات ذات محركات الاحتراق بحلول عام 2035، بعد رفع ألمانيا تحفظها عن النسخة الأولى من ورقة الاتفاق.
وعارضت برلين بشدة هذا الحظر، تخوفاً من أن تقضي السياسات البيئية الأوروبية على صناعة السيارات الألمانية. فيما يعد قرار الاتحاد الأخير أول اعتراف سياسي بالوقود التركيبي مصدر طاقة أخضر، بعدما دافع عن حياده الكربوني عدد من الخبراء والمهندسين المختصين.
ما الوقود التركيبي؟
يعد الوقود التركيبي، كالبنزين التركيبي والكيروسين التركيبي والميثان التركيبي، وقوداً غير أحفوري. بل يُصنَّع عن طريق تجميع انبعاثات ثاني أكسيد الكربون وأحادي أكسيد الكربون التي التُقطت في الجو، والهيدروجين الأخضر المنتَج باستخدام كهرباء متجددة أو خالية من الانبعاثات.
ويجادل خبراء البيئة بحياده الكربوني، لأن تصنيعه يستهلك تقريباً نفس كميات ثاني أكسيد الكربون وأحادي أكسيد الكاربون التي يطلقها في أثناء انبعاثه. بالإضافة إلى أن الهيدروجين المستخدم فيه يجب أن يكون خالياً من الانبعاثات.
وتراهن شركات النفط وصناعة السيارات على استعمال هذا النوع من الوقود، والذي سيمنح نشاطها التجاري أمد حياة أطول في ظل تغير السياسات العالمية نحو الطلاق مع الوقود الأحفوري.
ومع ذلك، لم يُشرع بعد في إنتاج الوقود التركيبي على نطاق واسع. وافتُتح أول مصنع تجاري في العالم لهذا الوقود في تشيلي عام 2021، بدعم من شركة بورش، ويهدف إلى إنتاج 550 مليون لتر سنوياً. فيما تشمل المصانع الأخرى المخطط لها Norsk e-Fuel النرويجية، التي من المقرر أن تبدأ الإنتاج في عام 2024 مع التركيز على وقود الطائرات.
ويجادل مؤيدو الوقود التركيبي بأنه سبيل لخفض انبعاثات ثاني أكسيد الكربون مع الحفاظ على أسطول السيارات الحالي، دون عناء استبدال كل مركبة بأخرى كهربائية. كما يمكن لهذا الوقود أن يكون حلاً أخضر في بعض قطاعات النقل، كالطائرات وسفن الشحن، التي يصعب تشغيلها بالكهرباء.
أمل السيارات الأوروبية
وعرقلت ألمانيا بشدة توصل دول الاتحاد الأوروبي إلى اتفاق حول حظر السيارات التي تعمل بالوقود الأحفوري بحلول عام 2035، مصرة على استثناء الوقود التركيبي من هذا الحظر.
وسبق أن دافع وزير النقل فولكر فيسينغ، عن تشبث بلاده باستثناء الوقود التركيبي، بالقول: "نحن في ألمانيا نتقن تكنولوجيا محركات الاحتراق أفضل من أي أحد في العالم، ومن المنطقي إبقاء هذه التكنولوجيا في أيدينا فيما تظل بعض الأسئلة حول التنقل المحايد مناخياً بلا إجابة".
ويمنح قرار الاتحاد الأوروبي الاثنين القاضي باستثناء الوقود التركيبي من الحظر الذي يزمع تطبيقه بحلول عام 2035، أملاً لاستمرار صناعة السيارات الأوروبية. فيما لو مرّ قرار الحظر دون استثناء، كان ليخلق متاعب كبيرة لصناعة السيارات الأوروبية، وعلى رأسها الألمانية. وذلك لمشكلات التنافسية التجارية التي ستخلقها، إذ سيتعذر على الشركات الألمانية إنتاج سيارات كهربائية بأسعار مناسبة للسوق التي تشهد منافسة صينية وأمريكية كبيرة.
وهو ما يؤكده مقال لمجل "فوربس" الأمريكية، بالقول إن "المصنعين الأوروبيين في السوق المشتركة، مثل فولكس فاجن الألمانية وعلاماتها التجارية الرئيسية، سيكونون الضحايا الرئيسيين لهذا القرار الأوروبي".
وتشهد السيارات الكهربائية الصينية نمواً كبيراً في أوروبا، إذ بلغ رقم معاملاتها عام 2022 حوالي 3.2 مليار دولار، أي بارتفاع قدر بنسبة 165% عن عام 2021. وبالتزامن مع ذلك، تواصل الولايات المتحدة في تنفيذ إجراءات خفض التضخم، والتي تحفز المستهلك المحلي على شراء السيارات الأمريكية الصديقة للبيئة بتوفير دعم حكومي لمُصنّعي هذا النوع من السيارات.
وبالإضافة إلى التنافسية، توجد عراقيل أخرى تترصد صناعة السيارات الألمانية، وهي قصر المدة الزمنية الممنوحة من أجل التحول إلى صناعة السيارات الكهربائية، كذلك تكلفة هذا التحول. وفي هذا الإطار، احتجت "الجمعية الأوروبية لمصنعي السيارات"، معتبرة قرار الاتحاد "متسرعاً"، إذ "بالنسبة إلى تحول صناعي بهذا الحجم، يعد هذا أمراً غير مسبوق ويشكل مصدر قلق بالغ".
ورحبت مجموعة "فولكس فاغن" بقرار استثناء الوقود التركيبي من الحظر، وقالت في بيان: "نرى أن الوقود الإلكتروني إضافة مفيدة للأسطول الحالي من السيارات ذات محركات الاحتراق، كما هو مفيد للتطبيقات الخاصة مثل سيارات الطوارئ أو السيارات الرياضية المحدودة كطراز "بورش 911" على سبيل المثال".
''';
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: PagingTextScreen(),
);
}
}
/// https://github.com/CalsRanna/book_reader/blob/677fb8ed017e5377a24b62e414fffa41a4890f77/lib/src/tool/paginator.dart
class Paginator {
const Paginator({required this.size, required this.style});
final Size size;
final TextStyle style;
List<String> paginate(String content) {
var offset = 0;
List<String> pages = [];
while (offset < content.length - 1) {
var start = offset;
var end = content.length;
var middle = ((start + end) ~/ 2);
for (var i = 0; i < 20; i++) {
if (_layout(content.substring(offset, middle))) {
if (middle <= start || middle >= end) {
break;
}
start = middle;
middle = ((start + end) ~/ 2);
} else {
end = middle;
middle = ((start + end) ~/ 2);
}
}
pages.add(content.substring(offset, middle));
offset = middle;
}
return pages;
}
/// Whether the text can be paint properly in the available area. If
/// the return value is [true], means still in the available size,
/// and [false] means not.
bool _layout(String text) {
final painter = TextPainter(
text: TextSpan(text: text, style: style),
textDirection: TextDirection.rtl,
);
painter.layout(maxWidth: size.width);
if (painter.didExceedMaxLines || painter.size.height > size.height) {
return false;
} else {
return true;
}
}
}
class PagingTextScreen extends StatefulWidget {
const PagingTextScreen({Key? key}) : super(key: key);
@override
State<PagingTextScreen> createState() => _PagingTextScreenState();
}
class _PagingTextScreenState extends State<PagingTextScreen> {
///
List<String> _pageTexts = [];
///
final _pageKey = GlobalKey();
///
final _textStyle = const TextStyle(color: Colors.black, fontSize: 30);
///
int _currentPage = 0;
///
void _paginate(String text, TextStyle textStyle) {
final pageSize =
(_pageKey.currentContext!.findRenderObject() as RenderBox).size;
debugPrint('Page Size: $pageSize');
_pageTexts.clear();
_pageTexts =
Paginator(size: pageSize, style: textStyle).paginate(sampleText);
setState(() {});
}
Future<void> _initPagination() async {
SchedulerBinding.instance.addPostFrameCallback((_) {
_paginate(sampleText, _textStyle);
});
}
@override
void initState() {
_initPagination();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Arabic RTL Text Pagination')),
body: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
child: SizedBox(
key: _pageKey,
child: PageView.builder(
reverse: true,
itemBuilder: (context, index) {
return Text(
_pageTexts[index],
style: _textStyle,
textDirection: TextDirection.rtl,
);
},
itemCount: _pageTexts.length,
onPageChanged: (pageNumber) {
setState(() {
_currentPage = pageNumber;
});
},
),
),
),
Center(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 20),
child: SizedBox(
child: Text(
'${_currentPage + 1} / ${_pageTexts.length}',
),
),
),
)
],
),
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment