Last active
April 4, 2023 20:15
-
-
Save burhanaksendir/3e9fac6cb517e4ebd789d7eb29bbff93 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:ui'; | |
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(), | |
); | |
} | |
} | |
class PagingTextScreen extends StatefulWidget { | |
const PagingTextScreen({Key? key}) : super(key: key); | |
@override | |
State<PagingTextScreen> createState() => _PagingTextScreenState(); | |
} | |
class _PagingTextScreenState extends State<PagingTextScreen> { | |
/// | |
final 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(); | |
final textSpan = TextSpan( | |
text: text, | |
style: textStyle, | |
); | |
/// | |
final textPainter = TextPainter( | |
text: textSpan, | |
textDirection: TextDirection.rtl, | |
); | |
/// | |
textPainter.layout( | |
minWidth: 0, | |
maxWidth: pageSize.width, | |
); | |
List<LineMetrics> lines = textPainter.computeLineMetrics(); | |
double currentPageBottom = pageSize.height; | |
int currentPageStartIndex = 0; | |
int currentPageEndIndex = 0; | |
for (int i = 0; i < lines.length; i++) { | |
final line = lines[i]; | |
final left = line.left; | |
final top = line.baseline - line.ascent; | |
final bottom = line.baseline + line.descent; | |
if (currentPageBottom < bottom) { | |
currentPageEndIndex = | |
textPainter.getPositionForOffset(Offset(left, top)).offset; | |
final pageText = | |
text.substring(currentPageStartIndex, currentPageEndIndex); | |
_pageTexts.add(pageText); | |
currentPageStartIndex = currentPageEndIndex; | |
currentPageBottom = top + pageSize.height; | |
} | |
} | |
final lastPageText = text.substring(currentPageStartIndex); | |
_pageTexts.add(lastPageText); | |
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('computeLineMetrics test')), | |
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