প্রোগ্রামিমেটিকভাবে অ্যাপ্লিকেশন থেকে কীভাবে বেরিয়ে আসবেন তা নিয়ে তোলপাড়


103

আমি কীভাবে প্রোগ্রামিয়ালি কোনও ফ্লার্ট অ্যাপ্লিকেশনটি বন্ধ করতে পারি। আমি একমাত্র পর্দা পপ করার চেষ্টা করেছি তবে এর ফলে একটি কালো স্ক্রিন আসে।

উত্তর:


57

আইওএসের জন্য

SystemNavigator.pop(): কাজ করে না

exit(0): ওয়ার্কস কিন্তু অ্যাপল আপনার অ্যাপ্লিকেশনটিকে সাপেন্ড করতে পারে কারণ অ্যাপ্লিকেশনটি অ্যাপ্লিকেশন থেকে বেরিয়ে আসার জন্য এটি অ্যাপল হিউম্যান ইন্টারফেসের গাইডলাইনগুলির বিরুদ্ধে against


অ্যান্ড্রয়েডের জন্য

SystemNavigator.pop(): অ্যাপ্লিকেশন থেকে বেরিয়ে আসার প্রস্তাবিত উপায় এবং এটি কাজ করে।

exit(0): এটিও কাজ করে কিন্তু এটি সুপারিশ করা হয়নি কারণ এটি ডার্ট ভিএম প্রক্রিয়াটি অবিলম্বে বন্ধ করে দেয় এবং ব্যবহারকারীরা ভাবতে পারেন যে অ্যাপ্লিকেশনটি কেবল ক্র্যাশ হয়েছে।


4
দেখে মনে হচ্ছে SystemNavigator.pop()অ্যান্ড্রয়েড এমুলেটরের অধীনে কাজ করছে না। অ্যাপ্লিকেশনটি এখনও পটভূমিতে কাজ করছে। সুতরাং এটি সত্যিকারের ডিভাইসে সঠিকভাবে কাজ করবে কিনা তা আমি নিশ্চিত নই।
বাম্বিনোউএ

4
@ অ্যালেক্সটি এটি সহজেই অ্যাপটি প্রস্থান করে, এটি ভিএম প্রক্রিয়াটি বন্ধ করে না। আপনি exit(0)আপনার প্রয়োজনের জন্য চেষ্টা করতে পারেন ।
কপসঅনরোড

SystemNavigator.pop()আমার অ্যাপটি প্রস্থান করে এবং ক্র্যাশের বার্তা দেখায়, exit(0)প্রত্যাশা অনুযায়ী কাজ করে
শঙ্কস

139

নীচে আমার সাথে দুজনের মধ্যে পুরোপুরি কাজ করেছে Androidএবং iOS, আমি exit(0)থেকে ব্যবহার করেছিdart:io

import 'dart:io';

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new ... (...),
          floatingActionButton: new FloatingActionButton(
            onPressed: ()=> exit(0),
            tooltip: 'Close app',
            child: new Icon(Icons.close),
          ), 
    );
  }

আপডেট জানুয়ারী 2019 পছন্দসই সমাধানটি হ'ল:

SystemChannels.platform.invokeMethod('SystemNavigator.pop');

এখানে বর্ণিত হিসাবে


যা আমি কাপের্টিনোট্যাবস্কোফোর্ডে t work for me... Iএকটি প্রস্থান বোতাম যুক্ত করার চেষ্টা করিনি। () => প্রস্থান (0) এর সাহায্যে এটি ট্যাববারের সাথে একটি ফাঁকা স্ক্রিন দেয়।
রিকার্ডো বিআরজিওয়েব 7'18

4
এটা কাজ করে। তবে অ্যাপল কাস্টম প্রস্থান বোতামগুলিকে নিষিদ্ধ করেছে এবং আপনার যদি অ্যাপ্লিকেশনটি সম্ভবত থাকে তবে তা প্রত্যাখ্যান করবে
Dima Rostopira

@ হাসানায়ুউসফ আমার সমাধানে বার্তা পান
অপরিজ্ঞাত

36

আপনি এটি দিয়ে এটি করতে পারেন SystemNavigator.pop()


4
অ্যান্ড্রয়েড এবং আইওএস উভয় ক্ষেত্রেই কিছুই ঘটে না। ব্যবহার exit(0);কাজ করে
থিও বাউম্যান

4
আইওএস-এ, SystemNavigator.popঅ্যাপল এর মানব ইন্টারফেসের নির্দেশিকাতে অ্যাপ্লিকেশনগুলি তাদের বাইরে বেরোনোর ​​উচিত নয় বলে উপেক্ষা করা হয়েছে। অ্যান্ড্রয়েডে, এটি কাজ করা উচিত এবং এটির dart:ioপ্রস্থান পদ্ধতি কল করার চেয়ে বেশি পছন্দ করা হয় । ইস্যু দায়ের করার কথা বিবেচনা করুন: github.com/flutter/flutter/issues/new
কলিন জ্যাকসন

আইওএসের জন্য কোনও ধারণা আমরা কীভাবে ঝড়বিলিতে করতে পারি?
আইপ্যাটেল

@ আইপ্যাটেল আপনি আইওএসের জন্য প্রস্থান (0) ব্যবহার করতে পারেন, এটি।
কপসঅনরোড 10

হ্যাঁ, তবে প্রত্যাখ্যান সম্পর্কে কী (আপনি উপরের মন্তব্যে বলেছিলেন
আইপ্যাটেল

31

উত্তরগুলি ইতিমধ্যে সরবরাহ করা হয়েছে তবে দয়া করে আপনি কী করছেন তা না জেনে আপনার কোড বেসে এগুলি অনুলিপি করুন না:

আপনি যদি SystemChannels.platform.invokeMethod('SystemNavigator.pop');নোটটি ব্যবহার করেন তবে ডকটি স্পষ্টভাবে উল্লেখ করছে:

সিস্টেম ন্যাভিগেটরকে স্ট্যাক থেকে এই ক্রিয়াকলাপটি সরিয়ে পূর্ববর্তী ক্রিয়াকলাপে ফিরে আসতে নির্দেশ দেয়।

আইওএস-এ, এই পদ্ধতির কলগুলিকে উপেক্ষা করা হয় কারণ অ্যাপলের মানব ইন্টারফেসের নির্দেশিকাতে বলা হয় যে অ্যাপ্লিকেশনগুলি তাদের নিজের থেকে বেরিয়ে আসা উচিত নয়।

আপনি ব্যবহার করতে পারেন exit(0)। এবং এটি প্রদত্ত প্রস্থান কোডের সাথে সাথে ডার্ট ভিএম প্রক্রিয়াটি অবিলম্বে শেষ করবে। তবে মনে রাখবেন যে ডক বলেছেন:

এটি কোনও অ্যাসিনক্রোনাস অপারেশন সমাপ্ত হওয়ার জন্য অপেক্ষা করে না। প্রস্থান ব্যবহার করে ডেটা হারাতে খুব সম্ভবত।

যাইহোক, ডকটিও নোট করেছিল SystemChannels.platform.invokeMethod('SystemNavigator.pop');:

কলটি ডার্টের চেয়ে এই পদ্ধতির পছন্দ করা উচিত: io এর প্রস্থান পদ্ধতি, কারণ পরবর্তীটি অন্তর্নিহিত প্ল্যাটফর্মটিকে এমনভাবে কাজ করতে পারে যেন অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে গিয়েছিল।

সুতরাং, আপনি কী করছেন তা মনে রাখবেন।


10
আপনি অনেক চালাক নোট লিখেছেন তবে ... নীচে বর্ণিত হিসাবে আইওএসে সম্ভাব্য স্থগিতকরণ ছাড়াই অ্যাপ থেকে প্রোগ্রামগতভাবে বেরিয়ে আসার সঠিক উপায় কী ?
BambinoUA

4

আমি ব্যবহার পছন্দ করি

 Future.delayed(const Duration(milliseconds: 1000), () {
        SystemChannels.platform.invokeMethod('SystemNavigator.pop');
      });

যদিও, প্রস্থান (0) এছাড়াও কাজ করে তবে অ্যাপটি হঠাৎ বন্ধ হয়ে যায় এবং দেখতে সুন্দর লাগে না, এ জাতীয় অ্যাপটি ক্র্যাশ হয়ে গেছে বলে মনে হচ্ছে।

 Future.delayed(const Duration(milliseconds: 1000), () {
       exit(0);
      });

2

এটি আমার পক্ষে কাজ করেছিল;

import 'dart:io';

@override
Widget build(BuildContext context) {
  return new Scaffold(
    appBar: new AppBar(
      title: new Text(widget.title),
    ),
    body: new ... (...),
      floatingActionButton: new FloatingActionButton(
        onPressed: ()=> exit(0),
        tooltip: 'Close app',
        child: new Icon(Icons.close),
      ), 
  );
}

-1

নীচে Android এবং iOS উভয় আমদানি 'ডার্ট: আইও' তে আমার সাথে নিখুঁতভাবে কাজ করেছে;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new ... (...),
          floatingActionButton: new FloatingActionButton(
            onPressed: ()=> SystemNavigator.pop(),
            tooltip: 'Close app',
            child: new Icon(Icons.close),
          ), 
    );
  }

4
SystemNavigator.pop()আইওএস এ কাজ করে না, দয়া করে আমার উত্তরটি পড়ুন। অন্তত আজকের মতো আইওএস অ্যাপে প্রস্থান করার কোনও উপায় নেই।
পুলিশঅনরোড করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.