Flutter Dev نشر 28 أبريل 2021 أرسل تقرير نشر 28 أبريل 2021 كيف يمكن عمل مشاركة لصفحة فلاتر مع محتوياتها مثلا الصوره + العنوان المتواجد فيها الى تطبيقات مختلفه بحيث يصل رابط الى المستخدم الثاني + صوره + العنوان ولو ضغط على الرابط يتحول الى التطبيق ولو ما منزل التطبيق لديه يتحول الى المتجر ياليت اذا احد مطبق الفكره من قبل يشارك الكود معنا لفعل ذلك اقتباس
1 بلال زيادة نشر 28 أبريل 2021 أرسل تقرير نشر 28 أبريل 2021 يمكنك استخدام share من هنا. في تطبيقك ويمكنك استخدام Share.share('check out my website https://example.com'); تأخذ Share أيضًا موضوعًا اختياريًا سيتم استخدامه عند المشاركة في البريد الإلكتروني. Share.share('check out my website https://example.com', subject: 'Look what I made!'); لمشاركة ملف واحد أو عدة ملفات ، قم باستدعاء طريقة shareFiles الثابتة في أي مكان في رمز Dart الخاص بك. اختياريًا يمكنك أيضًا تمرير النص والموضوع. Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture'); Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']); ومن خلال الكود الكامل import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:share/share.dart'; import 'image_previews.dart'; void main() { runApp(DemoApp()); } class DemoApp extends StatefulWidget { @override DemoAppState createState() => DemoAppState(); } class DemoAppState extends State<DemoApp> { String text = ''; String subject = ''; List<String> imagePaths = []; @override Widget build(BuildContext context) { return MaterialApp( title: 'Share Plugin Demo', home: Scaffold( appBar: AppBar( title: const Text('Share Plugin Demo'), ), body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ TextField( decoration: const InputDecoration( labelText: 'Share text:', hintText: 'Enter some text and/or link to share', ), maxLines: 2, onChanged: (String value) => setState(() { text = value; }), ), TextField( decoration: const InputDecoration( labelText: 'Share subject:', hintText: 'Enter subject to share (optional)', ), maxLines: 2, onChanged: (String value) => setState(() { subject = value; }), ), const Padding(padding: EdgeInsets.only(top: 12.0)), ImagePreviews(imagePaths, onDelete: _onDeleteImage), ListTile( leading: Icon(Icons.add), title: Text("Add image"), onTap: () async { final imagePicker = ImagePicker(); final pickedFile = await imagePicker.getImage( source: ImageSource.gallery, ); if (pickedFile != null) { setState(() { imagePaths.add(pickedFile.path); }); } }, ), const Padding(padding: EdgeInsets.only(top: 12.0)), Builder( builder: (BuildContext context) { return ElevatedButton( child: const Text('Share'), onPressed: text.isEmpty && imagePaths.isEmpty ? null : () => _onShare(context), ); }, ), const Padding(padding: EdgeInsets.only(top: 12.0)), Builder( builder: (BuildContext context) { return ElevatedButton( child: const Text('Share With Empty Origin'), onPressed: () => _onShareWithEmptyOrigin(context), ); }, ), ], ), ), )), ); } _onDeleteImage(int position) { setState(() { imagePaths.removeAt(position); }); } _onShare(BuildContext context) async { // A builder is used to retrieve the context immediately // surrounding the ElevatedButton. // // The context's `findRenderObject` returns the first // RenderObject in its descendent tree when it's not // a RenderObjectWidget. The ElevatedButton's RenderObject // has its position and size after it's built. final RenderBox box = context.findRenderObject() as RenderBox; if (imagePaths.isNotEmpty) { await Share.shareFiles(imagePaths, text: text, subject: subject, sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } else { await Share.share(text, subject: subject, sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } } _onShareWithEmptyOrigin(BuildContext context) async { await Share.share("text"); } } 1 اقتباس
1 Wael Aljamal نشر 29 أبريل 2021 أرسل تقرير نشر 29 أبريل 2021 بتاريخ 18 ساعات قال مروان مروان3: ولو ضغط على الرابط يتحول الى التطبيق ولو ما منزل التطبيق لديه يتحول الى المتجر بالنسبة لهذا الجزئية بالتحديد، أعتقد أنك تقصد تقنية Deep Link حيث يتم وضع رابط ما في موقع الكتروني أو إعلان و عند النقر عليه يتم فتح التطبيق على الصفحة المختارة مسبقا، أو التوجه للمتجر play store. للأسف أنا لم استخدمها مسبقا ولكن يمكنك مراجعة التوثيق من الصفحة الرسمية: flutter.dev deep-linking. وباستعمال مكتبة uni_links يمكن استقبال حدث الوجيه (المشاركة) ومن ثم فتح الصفحة المناسبة. يمكنك البحث أكثر من: How to handle deep-linking to a Flutter App Deep Links and Flutter applications. How to handle them properly. 1 اقتباس
0 Flutter Dev نشر 29 أبريل 2021 الكاتب أرسل تقرير نشر 29 أبريل 2021 (معدل) بتاريخ 10 ساعات قال Wael Aljamal: بالنسبة لهذا الجزئية بالتحديد، أعتقد أنك تقصد تقنية Deep Link حيث يتم وضع رابط ما في موقع الكتروني أو إعلان و عند النقر عليه يتم فتح التطبيق على الصفحة المختارة مسبقا، أو التوجه للمتجر play store. للأسف أنا لم استخدمها مسبقا ولكن يمكنك مراجعة التوثيق من الصفحة الرسمية: flutter.dev deep-linking. وباستعمال مكتبة uni_links يمكن استقبال حدث الوجيه (المشاركة) ومن ثم فتح الصفحة المناسبة. يمكنك البحث أكثر من: How to handle deep-linking to a Flutter App Deep Links and Flutter applications. How to handle them properly. اهلا بك اخي الكريم شاكر لك افادتك فعلا هذا ما كنت ابحث عنه بنسبه الى الباكيج الذي قمت بمشاركته انت معي يبدو الامر متعبا قليلا وطويل نوعا ما توجد طريقة اسهل للفائده عن طريق الفاير بيز وهذا الباكج الخاص بها كثير يوجد لها شروحات في الانترنت اليوتيوب وما شابه firebase_dynamic_links: ^2.0.2 مودتي لك بتاريخ On 28/4/2021 at 23:46 قال بلال زيادة: يمكنك استخدام share من هنا. في تطبيقك ويمكنك استخدام Share.share('check out my website https://example.com'); تأخذ Share أيضًا موضوعًا اختياريًا سيتم استخدامه عند المشاركة في البريد الإلكتروني. Share.share('check out my website https://example.com', subject: 'Look what I made!'); لمشاركة ملف واحد أو عدة ملفات ، قم باستدعاء طريقة shareFiles الثابتة في أي مكان في رمز Dart الخاص بك. اختياريًا يمكنك أيضًا تمرير النص والموضوع. Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture'); Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']); ومن خلال الكود الكامل import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:share/share.dart'; import 'image_previews.dart'; void main() { runApp(DemoApp()); } class DemoApp extends StatefulWidget { @override DemoAppState createState() => DemoAppState(); } class DemoAppState extends State<DemoApp> { String text = ''; String subject = ''; List<String> imagePaths = []; @override Widget build(BuildContext context) { return MaterialApp( title: 'Share Plugin Demo', home: Scaffold( appBar: AppBar( title: const Text('Share Plugin Demo'), ), body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ TextField( decoration: const InputDecoration( labelText: 'Share text:', hintText: 'Enter some text and/or link to share', ), maxLines: 2, onChanged: (String value) => setState(() { text = value; }), ), TextField( decoration: const InputDecoration( labelText: 'Share subject:', hintText: 'Enter subject to share (optional)', ), maxLines: 2, onChanged: (String value) => setState(() { subject = value; }), ), const Padding(padding: EdgeInsets.only(top: 12.0)), ImagePreviews(imagePaths, onDelete: _onDeleteImage), ListTile( leading: Icon(Icons.add), title: Text("Add image"), onTap: () async { final imagePicker = ImagePicker(); final pickedFile = await imagePicker.getImage( source: ImageSource.gallery, ); if (pickedFile != null) { setState(() { imagePaths.add(pickedFile.path); }); } }, ), const Padding(padding: EdgeInsets.only(top: 12.0)), Builder( builder: (BuildContext context) { return ElevatedButton( child: const Text('Share'), onPressed: text.isEmpty && imagePaths.isEmpty ? null : () => _onShare(context), ); }, ), const Padding(padding: EdgeInsets.only(top: 12.0)), Builder( builder: (BuildContext context) { return ElevatedButton( child: const Text('Share With Empty Origin'), onPressed: () => _onShareWithEmptyOrigin(context), ); }, ), ], ), ), )), ); } _onDeleteImage(int position) { setState(() { imagePaths.removeAt(position); }); } _onShare(BuildContext context) async { // A builder is used to retrieve the context immediately // surrounding the ElevatedButton. // // The context's `findRenderObject` returns the first // RenderObject in its descendent tree when it's not // a RenderObjectWidget. The ElevatedButton's RenderObject // has its position and size after it's built. final RenderBox box = context.findRenderObject() as RenderBox; if (imagePaths.isNotEmpty) { await Share.shareFiles(imagePaths, text: text, subject: subject, sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } else { await Share.share(text, subject: subject, sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } } _onShareWithEmptyOrigin(BuildContext context) async { await Share.share("text"); } } اهلا بك اخي الكريم بنسبه للي كنت اقصده هو مشاركة الصفحه كامل بحيث الرابط يستطيع المستخدم النقر عليه والانتقال الى تطبيقي اما الطريقة التي ذكرتها انت تنفع لمشاركة رابط التطبيق مثلا ولكن لمشاركة الصفحه لا اعلم اذا كان يمكن استعمالها للفائده توجد باكج للفايز بيز تقوم بهذا العمل firebase_dynamic_links: ^2.0.2 مودتي لك الغالي تم التعديل في 29 أبريل 2021 بواسطة مروان مروان3 1 اقتباس
السؤال
Flutter Dev
كيف يمكن عمل مشاركة لصفحة فلاتر مع محتوياتها مثلا
الصوره + العنوان المتواجد فيها الى تطبيقات مختلفه بحيث يصل رابط الى المستخدم الثاني + صوره + العنوان ولو ضغط على الرابط يتحول الى التطبيق ولو ما منزل التطبيق لديه يتحول الى المتجر
ياليت اذا احد مطبق الفكره من قبل يشارك الكود معنا لفعل ذلك
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.