स्पंदन - ऐनिमेशनपेज कैसे बनाएँ?

यह हर समय एक विषय है। कुछ डेवलपर्स ने कुछ नमूने दिए, लेकिन वे नमूने केवल EnterPage को चेतन बनाते हैं। इसके अलावा, आप कह सकते हैं कि वे "EnterExitPageRoute" नामक एक वर्ग प्रदान करते हैं, हाँ, आप सही हैं, लेकिन क्या आपको पता था कि कक्षा में कुछ समस्या थी? जब अनुप्रयोग एक नए पृष्ठ में प्रवेश करता है, तो जीवनचक्र-विधियाँ ("initState" या "didDependenciesChanged") को कई बार में बुलाया जा सकता है। तो, आप "EnterExitPageRoute" का उपयोग नहीं कर सकते हैं! लेकिन, पेज रूट का एनीमेशन कैसे हल करें the

मुझे इस समस्या को हल करने का एक तरीका मिल गया है। क्या आपने किसी MaterialPageRoute का उपयोग किया है, जब आपने एप्लिकेशन के प्लेटफॉर्म को Platform.iOS पर सेट किया है? यदि आप MaterialPageRoute का कोड पढ़ते हैं, तो आप iOS का पेज एनीमेशन पा सकते हैं। कोड हमें बताता है: "PrimaryAnimation" और "SecondaryAnimation" बहुत महत्वपूर्ण है, और वे "CurvedAnimation" के साथ अच्छी तरह से काम कर सकते हैं।

कृपया जिफ तस्वीर देखें:

यह मेरा कोड है , मुझे आशा है कि मैं आपकी मदद कर सकता हूं!

AnimationPageRoute.dart:

आयात 'पैकेज: स्पंदन / material.dart';
आयात 'पैकेज: स्पंदन / rend.dart';
/// फीका // 的 动画 F) (प्राथमिक)
अंतिम ट्वीन _tweenFade = ट्वीन (शुरू: 0, अंत: 1.0);
/// 效果 // 效果 效果 效果 效果 效果 参数 primary (प्राथमिक)
अंतिम ट्वीन _primaryTweenSlideFromBottomToTop =
ट्वीन (शुरू: कॉन्स्ट ऑफ़सेट (0.0, 1.0), एंड: ऑफ़सेट।एज़रो);
// फाइनल ट्विन _secondaryTweenSlideFromBottomToTop =
// ट्विंक (शुरू: ऑफ़सेट.ज़रो, एंड: कॉन्स्ट ऑफ़सेट (0.0, -1.0));
/// 效果 // 效果 效果 效果 效果 效果 参数 primary (प्राथमिक)
अंतिम ट्वीन _primaryTweenSlideFromTopToBottom =
ट्वीन (शुरू: कास्ट ऑफ़सेट (0.0, -1.0), अंत: ऑफ़सेट.ज़रो);
// फाइनल ट्विन _secondaryTweenSlideFromTopToBottom =
// ट्विंक (शुरू: ऑफ़सेट.ज़रो, एंड: कास्ट ऑफ़सेट (0.0, 1.0));
/// 效果 // 效果 效果 效果 效果 效果 参数 primary (प्राथमिक)
अंतिम ट्वीन _primaryTweenSlideFromRightToLeft =
ट्वीन (शुरू: कॉन्स्ट ऑफ़सेट (1.0, 0.0), अंत: ऑफ़सेट.ज़रो);
/// 效果 // 效果 效果 效果 效果 效果 参数 secondary (द्वितीयक)
अंतिम ट्वीन _secondaryTweenSlideFromRightToLeft =
ट्वीन (शुरू: ऑफ़सेट.ज़रो, एंड: कॉन्स्ट ऑफ़सेट (-1.0, 0.0));
/// 效果 // 效果 效果 效果 效果 效果 参数 primary (प्राथमिक)
अंतिम ट्वीन _primaryTweenSlideFromLeftToRight =
ट्वीन (शुरू: कॉन्स्ट ऑफ़सेट (-1.0, 0.0), एंड: ऑफ़सेट.एज़रो);
/// 效果 // 效果 效果 效果 效果 效果 参 secondary (द्वितीयक)
अंतिम ट्वीन _secondaryTweenSlideFromLeftToRight =
ट्वीन (शुरू: ऑफ़सेट.ज़रो, एंड: कॉन्स्ट ऑफ़सेट (1.0, 0.0));
/// 类型 // 类型 动画 `SlideRL`,` SlideLR`, `SlideTB`,` SlideBT`, `Fade`
एनुम एनिमेशनटाइप {
/// 滑动 // 到 到 到
SlideRL,
/// 的 // 的
SlideLR,
/// 的 // 的
SlideTB,
/// 的 // 下 下 从 下
SlideBT,
/// 过渡 过渡
फीका,
}
वर्ग एनीमेशनपार्टराउट पेजरूट का विस्तार करता है {
AnimationPageRoute ({
@ इस पर कब्जा कर लिया।
this.isExitPageAffectedOrNot = true,
this.animationType = AnimationType.SlideRL,
this.animationDuration = const अवधि (मिलीसेकंड: 450),
मार्ग सेटिंग,
this.maintainState = true,
बूल फुलस्क्रीनडायलॉग = गलत,
}): मुखर (बिल्डर! = अशक्त),
मुखर (isExitPageAffectedOrNot! = null),
मुखर (एनीमेशन टाइप! = अशक्त),
मुखर (maintainState! = null),
मुखर (फुलस्क्रीनडायलॉग! = अशक्त),
ज़ोर (अपारदर्शी),
सुपर (सेटिंग्स: सेटिंग्स, फुलस्क्रीनडायलॉग: फुलस्क्रीनडायलॉग);
/// 构造 构造
अंतिम WidgetBuilder बिल्डर;
/// 页面 // 页面 页面 页面 页面 页面 页面 UE `TRUE` 页面
/// // // 当 [एनिमेशनटाइप] : [SlideLR] 注意 [SlideRL] 页面 : : : : : : : :
अंतिम बूल हैExitPageAffectedOrNot;
/// 类型 类型
अंतिम एनिमेशनटाइप एनीमेशनटाइप;
अंतिम अवधि एनीमेशनडायरेक्शन;
@override
अंतिम बूल अनुरक्षण;
@override
अवधि में परिवर्तन हो जाता है =>
एनिमेशन const अवधि (मिलीसेकंड: 450);
@override
रंग प्राप्त करें बाधा => अशक्त;
@override
स्ट्रिंग को बाधा प्राप्त करेंLAB => अशक्त;
@override
बूल कैनट्रिशनटो (ट्रांजिशनरूट) nextRoute) =>
nextRoute ऐनिमेशन पेजेजआउट &&! nextRoute.fullscreenDialog;
@override
विजेट buildPage (BuildContext संदर्भ, एनीमेशन एनीमेशन,
एनीमेशन गौणकरण) {
अंतिम विजेट परिणाम = बिल्डर (संदर्भ);
मुखर () {
अगर (परिणाम == अशक्त) {
फेंक FlutterError.fromParts ( [
ErrorSummary (
"मार्ग के लिए बिल्डर" $ {settings.name} "वापस अशक्त। '),
ErrorDescription ('रूट बिल्डरों को कभी भी अशक्त नहीं होना चाहिए।')
]);
}
सच लौटना;
} ());
वापसी शब्दार्थ (
scopesRoute: true, clearChildNodes: सच, बच्चा: परिणाम);
}
@override
विजेट buildTransitions (BuildContext संदर्भ, एनीमेशन एनीमेशन,
एनीमेशन माध्यमिककरण, विजेट बच्चा) {
अगर (एनिमेशन टाइप == एनिमेशनटाइप.फेड)
वापसी _buildFadeTransition (एनीमेशन, बच्चे);
अंतिम वक्र वक्र = घटता, कर्ण, उल्टा वक्र = घटता.कल;
अंतिम टेक्स्टडायरेक्शन textDirection = Directionality.of (संदर्भ);
ट्वीन प्राइमरीटीन = _प्रिमरीटाइटलाइडफ्रेमफ्राइटटॉयलेट,
गौणयंत्र = _secondaryTweenSlideFromRightToLeft;
अगर (एनीमेशन टाइप == एनिमेशनटाइप.लाइडबीटी) {
PrimaryTween = _primaryTweenSlideFromBottomToTop;
} और अगर (एनीमेशन टाइप == एनिमेशनटाइप.लाइड टीबी) {
PrimaryTween = _primaryTweenSlideFromTopToBottom;
} और अगर (एनीमेशन टाइप == एनिमेशनटाइप.लाइडएलआर) {
PrimaryTween = _primaryTweenSlideFromLeftToRight;
द्वितीयक शब्द = _secondaryTweenSlideFromLeftToRight;
}
विजेट enterAnimWidget = स्लाइडट्रांसिशन (
स्थिति: घुमावदार
माता-पिता:
सेटिंग्स .isInitialRoute == सच? माध्यमिककरण: एनीमेशन,
वक्र: वक्र,
रिवर्ससर्व: रिवर्सक्रूव,
)।चलाना(
सेटिंग्स .isInitialRoute == सच? गौण: प्राथमिक
टेक्स्टडायरेक्शन: टेक्स्टडायरेक्शन,
बच्चा: बच्चा);
if (isExitPageAffectedOrNot! = true ||
सेटिंग्स .isInitialRoute == सच ||
((एनिमेशनटाइप.स्लाइड टीबी, एनिमेशनटाइप.स्लाइडबीटी]
.contains (एनिमेशनटाइप)) वापसी enterAnimWidget;
वापसी स्लाइडट्रांसिशन (
स्थिति: घुमावदार
माता-पिता: माध्यमिककरण,
वक्र: वक्र,
रिवर्ससर्व: रिवर्सक्रूव,
) .Drive (secondaryTween),
टेक्स्टडायरेक्शन: टेक्स्टडायरेक्शन,
बच्चा: enterAnimWidget);
}
FadeTransition _buildFadeTransition (
एनीमेशन एनिमेशन, विजेट बच्चा) =>
FadeTransition (
अपारदर्शिता: घुमावदार
मूल: एनीमेशन,
वक्र: घटता है ।earearToEaseOut,
रिवर्स कर्व: कर्वेस.इज़इनटाइन,
) .Drive (_tweenFade),
बच्चा: बच्चा);
@override
स्ट्रिंग को debugLabel => '$ {super.debugLabel} ($ {settings.name})' मिलता है;
}

मुझे इसे कैसे प्रयोग में लाना है ? सिर्फ इस तरह:

मेरा सुझाव है कि आप "MaterialApp" नोड पर इसका उपयोग कर सकते हैं, फिर "_onGenerateRoute" नामक एक फ़ंक्शन बनाएं।

MaterialApp (शीर्षक: 'नमूना ऐप', debugShowCheckedModeBanner: false, विषय: AppThemeProvider.appTheme, onGenerateRoute: _onGenerateRoute, initialRoute: '/', home: NotFoundPage ());
मार्ग _onGenerateRoute (RouteSettings सेटिंग) {स्विच (settings.name) {case RouteNames.PresaleOrderDetailInfo: वापस लौटें एनिमेशनपेज (बिल्डर: (_) => होम पेजेज (), सेटिंग्स: settings.copyWith (isInitialRoute: true); .... //आदि। }}
///Navigator.pushNamed(context, RouteNames.PresaleOrderDetailInfo, तर्क: ...);

आपके पढ़ने के लिए धन्यवाद!

यह सभी देखें

एडिट मोड में एक्सेस डेटाबेस कैसे खोलेंएक छोटी आय उत्पन्न करने वाली वेबसाइट बनाना कितना मुश्किल है? 23 साल का होने के नाते, मैं कैसे सब कुछ खत्म होने के बाद फिर से शुरू करता हूं और सभी को विफल कर दिया? तत्काल चीजें जो मैं शुरू कर सकता हूं, वह मुझे आसानी से हो सकती है?क्या 2 सप्ताह में जावास्क्रिप्ट सीखना संभव है? मुझे पहले से ही HTML और CSS का बेसिक ज्ञान है, और मुझे पता है कि लूप और उस सभी के लिए कैसे लिखना है।पूर्ण शुरुआत के लिए आप वेब डेवलपमेंट सिरिकुलम कैसे डिजाइन करते हैं? प्रोग्रामिंग भाषा को शुरुआती के रूप में सीखने का सबसे अच्छा तरीका क्या है और यह मेरे लिए इतना दिलचस्प कैसे हो सकता है? मैं अपने पैसे का उपयोग जल्दी से पैसा बनाने के लिए कैसे कर सकता हूं? कोड और प्रोग्राम को सीखने के लिए सबसे अच्छी साइटें क्या हैं। जब मैं सीखता हूं, तो मैं पैसा कमाने के लिए अपनी क्षमताओं का अनुभव और उपयोग कहां कर सकता हूं?