احمد صوالحة نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 يحدث الخطأ التالي عند استدعاء Scaffold.of(context) لإظهار snackbar : هذا هو الكود الخاص بالشاشة الذي يحدث بها الخطأ: import 'package:flutter/material.dart'; void main() => runApp(MyHomePage()); class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'test', theme: ThemeData( primarySwatch: Colors.cyan, ), home: Page1(), ); } } class Page1 extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('page1'), ), body: Center( child: RaisedButton( color: Colors.cyan, textColor: Colors.white, onPressed: (){ Scaffold.of(context).showSnackBar(SnackBar(content: Text('Hey there'))); }, child: Text('show snackbar'), ), ), ); } } 2 اقتباس
1 Abdulraheem Barghouthi نشر 15 فبراير 2021 أرسل تقرير نشر 15 فبراير 2021 تحدث هذه المشكلة بسبب إرفاقك للـcontext الذي قام بإنشاء الـscaffold بدلاً من إرفاق context ضمن الـscaffold. يمكن حل المشكلة من خلال إحدى الطرق التالية: الطريقة الأولى: إضافة Builder بحيث يعطينا context ضمن الـscaffold ومن ثم نقوم بإرفاقه للـ scaffold.of: body: Builder( Builder: (context){ //نضع هنا كل العناصر المراد عرضها لتأخذ الـ //context //الخاص بالـ //scaffold } ); إليك الكود الكامل بعد التعديل: import 'package:flutter/material.dart'; void main() => runApp(MyHomePage()); class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'test', theme: ThemeData( primarySwatch: Colors.cyan, ), home: Page1(), ); } } class Page1 extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('page1'), ), body:Builder( builder: (context) => Center( //*** child: RaisedButton( color: Colors.cyan, textColor: Colors.white, onPressed: (){ Scaffold.of(context).showSnackBar(SnackBar(content: Text('Hey there'))); }, child: Text('show snackbar'), ), ) ), ); } } الطريقة الثانية: حفظ الـscaffold في GlobalKey الذي سيلزمنا في إظهار الـsnackbar. class Page1 extends StatelessWidget { final GlobalKey<ScaffoldState> _myScaffold = new GlobalKey(); //… } بعد تعريف GlobalKey نقوم بتعيينه في خصائص الـScaffold: Scaffold( key: _myScaffold, //... ); الآن يمكننا إظهار الـsnackbar بدون الحاجة للـcontext من خلال الـGlobalKey: _myScaffold.currentState.showSnackBar(SnackBar(content:Text('Hey there'),)); مرفق الكود الكامل بعد التعديل: import 'package:flutter/material.dart'; void main() => runApp(MyHomePage()); class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'test', theme: ThemeData( primarySwatch: Colors.cyan, ), home: Page1(), ); } } class Page1 extends StatelessWidget { final GlobalKey<ScaffoldState> _myScaffold = new GlobalKey(); @override Widget build(BuildContext context) { return Scaffold( key: _myScaffold, appBar: AppBar( title: Text('page1'), ), body:Center( child: RaisedButton( color: Colors.cyan, textColor: Colors.white, onPressed: (){ _myScaffold.currentState.showSnackBar(SnackBar(content:Text('Hey there'),)); }, child: Text('show snackbar'), ), ), ); } } 1 اقتباس
السؤال
احمد صوالحة
يحدث الخطأ التالي عند استدعاء Scaffold.of(context) لإظهار snackbar :
هذا هو الكود الخاص بالشاشة الذي يحدث بها الخطأ:
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.