ঝাঁকুনি: অপরিবর্তিত ব্যতিক্রম: বাঁধাইয়ের শুরুর আগে সার্ভিসস বাইন্ডিং.ডিফল্ট বাইনারি ম্যাসেঞ্জার অ্যাক্সেস করা হয়েছিল


133

এই সমস্যা সমাধানের কোন সমাধান?

ক্ষেত্রে স্টেকট্র্যাস:

[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
If you're running an application and need to access the binary messenger before `runApp()` has been called (for example, during plugin initialization), then you need to explicitly call the `WidgetsFlutterBinding.ensureInitialized()` first.
If you're running a test, you can call the `TestWidgetsFlutterBinding.ensureInitialized()` as the first line in your test's `main()` method to initialize the binding.
#0      defaultBinaryMessenger.<anonymous closure> (package:flutter/src/services/binary_messenger.dart:73:7)
#1      defaultBinaryMessenger (package:flutter/src/services/binary_messenger.dart:86:4)
#2      MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:140:62)
#3      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:314:35)
<asynchronous suspension>
#4      MethodChannel.invokeMapMethod (package:f<>

এই লাইনটিকে আপনার প্রথম বিবৃতি হিসাবে প্রধান () - উইজেটসফ্লুটবার্ডিং.সেনিউর ইনটাইটেলাইজড ();
বিজয় রাম

উত্তর:


310

আপনি ফ্লাটার আপগ্রেড করার সময় এই সমস্যাটি চালু হয়। এর পিছনে কারণ আপনি কিছু ডেটার জন্য অপেক্ষা করছেন বা কোনও asyncফাংশন ভিতরে চালাচ্ছেন main()

আমি ScopedModelভিতরে main()এবং ভিতরে সূচনা করছিলাম যে আমি কিছু ডেটার জন্য অপেক্ষা করছিলাম।

একটি খুব ছোট ফিক্স আছে। শুধু কিছু করার আগেই WidgetsFlutterBinding.ensureInitialized()ভিতরে ছুটুন । একটি যাদুমন্ত্র মত কাজ করে!!void main()runApp()

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(Delta(
    model: ProductDataModel(),
  ));
}

17
নিশ্চিত করুন যে উইজেটফ্লুটারবাইন্ডিং.সেনিউরআইনাইটালাইজড () প্রধান () এর প্রথম লাইন। এবং তারপরে যথারীতি এগিয়ে যান
অবনীশ কুমার

10
এর সম্ভাব্য নেতিবাচক প্রভাব কী? main()পদ্ধতির শুরুতে সমস্ত ঝাঁকুনির প্রয়োগের সেই লাইনটি থাকা উচিত ?
ব্যবহারকারীর 482594

3
আপনি যদি প্রধান () তে
অ্যাসিঙ্ক

2
v1.14.4 / v1.14.6 এর জন্য var ডাটাবেসপথের বিরতিতে কাজ করছে না = getDatabasesPath () অপেক্ষা করুন;
21

69

আপনি যদি main()পদ্ধতিটির অপেক্ষায় থাকেন তবে এটি সাধারণত ঘটে থাকে । সুতরাং, সমাধানটি হ'ল:

void main() {
  // add this, and it should be the first line in main method
  WidgetsFlutterBinding.ensureInitialized(); 

  // rest of your app code
  runApp(
    MaterialApp(...),
  );
}

1
কাজ করছে না - যোগদানের বিরতি (getDatabasesPath (), 'mydb.db' অপেক্ষা করুন)
লাইভ-

25

আমার সঠিক উত্তর আছে কিনা তা নিশ্চিত নই, তবে সাম্প্রতিক বিড়বিড় করে আপগ্রেড করার পরেও আমি একই ত্রুটি পেয়েছি এবং এটি কাজ করতে সক্ষম হয়েছি, তাই আমি আমার অনুসন্ধানগুলি ভাগ করছি।

দেখে মনে হচ্ছে ত্রুটিটি সাম্প্রতিক ব্রেকিং পরিবর্তনের কারণে হতে পারে: https://groups.google.com/forum/#!msg/flutter-announce/sHAL2fBtJ1Y/mGjrKH3dEwAJ

ফলস্বরূপ, আমাদের ম্যানুয়ালি কোডটি নিম্নরূপে পরিবর্তন করতে হবে:

  • আপনি যদি কোনও অ্যাপ্লিকেশন চালাচ্ছেন এবং runApp()ডেকে যাওয়ার আগে বাইনারি মেসেঞ্জারটি অ্যাক্সেস করার দরকার পড়ে (উদাহরণস্বরূপ, প্লাগইন সূচনা করার সময়), তবে আপনাকে WidgetsFlutterBinding.ensureInitialized()প্রথমে স্পষ্টভাবে কল করতে হবে ।
  • আপনি যদি একটি পরীক্ষা চালিয়ে যাচ্ছেন, তবে আপনার বাধ্যবাধকতাটি আরম্ভ করার জন্য TestWidgetsFlutterBinding.ensureInitialized()আপনার পরীক্ষার main()পদ্ধতির প্রথম লাইন হিসাবে কল করতে পারেন ।

বিকল্পভাবে, আপনি যদি আমার মতো নবাগত হন এবং উপরোক্ত এবং # 38464 বোঝার জন্য লড়াই করে থাকেন তবে আপনি বিটা চ্যানেলে স্যুইচ করে সাময়িকভাবে এই সমস্যাটি এড়াতে পারবেন। সবেমাত্র "বিড়বিড় করে চ্যানেল বিটা" চালান। ব্রেকিং পরিবর্তনটি এখনও বেটা চ্যানেলে নেই, সুতরাং বিটা চ্যানেলে স্যুইচ করার পরে আপনি কমপক্ষে আপাতত এই ত্রুটিটি পাবেন না।


ধন্যবাদ ভাই, এখন আমি ত্রুটি এড়াতে কেবল বিটা সংস্করণ ব্যবহার করেছি!
সোপহেডাভিড সোফিয়প

11

এই লাইনটি কেবল মেইন.ডার্টে যুক্ত করুন

WidgetsFlutterBinding.ensureInitialized(); 

আপনার কোড মত মনে হচ্ছে

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  return runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider.value(
        value: AppState(),
      )
    ],
    child: MyApp(),
  ));
}

2

ওরিয়েন্টেশন ব্যবহার করার সময় আমার ক্ষেত্রে,

সমাধানের আগে:

void main() {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]).then((_).{
runApp(MyApp());
});
}

সমাধান ব্যবহার:

void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
  .then((_) {
runApp(MyApp());
});
}

মূল বিষয়টি হ'ল মূল শ্রেণীর প্রথম লাইনে উইজেটস ফ্লুটারবাইন্ডিং.সেনিউর ইনটাইটেলাইজড () যুক্ত করা হয়


1

আমার কাছে সংস্করণটি থাকার আগে আমি সংস্করণে v1.12.13+hotfix.5স্যুইচ করেছি v1.14.4এবং এটি কাজ করে।

ত্রুটিটি বলছে যে আপনার যুক্ত করা উচিত WidgetsFlutterBinding.ensureInitialized();, তবে যেহেতু এটি আমার পক্ষে কাজ করে নি আমি অন্য সংস্করণে স্যুইচ করেছি। তবে একটি বিষয় অবশ্যই মনে রাখবেন তা হ'ল আপনাকে এখনও WidgetsFlutterBinding.ensureInitialized();আপনার মূলের প্রথম লাইন হিসাবে যুক্ত করতে হবে!


1

সমাধান: কলWidgetsFlutterBinding.ensureInitialized(); অ্যাসিক্রোনাস ফাংশন করার আগে কল ।


void main() async {
  WidgetsFlutterBinding.ensureInitialized();   //  ADD THIS BEFORE YOUR ASYNC FUNCTION CALL.
  await Firestore.instance.settings(...);      //  NOW YOU CAN CALL ASYNC FUNCTION.   
  ...
  runApp(
    ...
  )

1

আপনি যদি কোনও বিচ্ছিন্নভাবে প্লাগইন নেটিভ কোড চালানোর চেষ্টা করছেন তবে আপনি এটিতে দৌড়াতে পারেন could বিচ্ছিন্ন_হ্যান্ডলার ডকুমেন্টেশন এখানে এই ভাল ব্যাখ্যা করে:

প্লাগইনগুলি ডার্ট এবং নেটিভ পক্ষগুলির মধ্যে যোগাযোগের জন্য প্ল্যাটফর্ম চ্যানেল নামে একটি প্রক্রিয়া ব্যবহার করে, মেথোড চ্যানেল প্রকারটি ব্যবহার করে একটি বার্তা পাস করার প্রক্রিয়া। এই প্রক্রিয়াটি কাজ করার জন্য অন্তর্নিহিত ইউআই ইঞ্জিনের উপাদানগুলির উপর নির্ভর করে।

এখানে ধরা হল যে বিচ্ছিন্নতা কেবল গণনা ব্যয়বহুল ডার্ট কোডের ক্ষেত্রে পারফরম্যান্সের উত্সাহ সরবরাহ করবে। প্লাগইনের প্ল্যাটফর্ম কোডটি আবার মূল (ইউআই) থ্রেড ব্যবহার করবে।

WidgetsFlutterBinding.ensureInitializedবিচ্ছিন্নভাবে অন্তর্নিহিত ইউআই ইঞ্জিন না থাকায় একটি বিচ্ছিন্নভাবে ভিতরে কল করাও ব্যর্থ হবে।


0

গিটহাব ইস্যুতে পোস্ট করা একটি উত্তর 47033 আমার সমস্যার সমাধান করেছে।

ইস্যু: https://github.com/flutter/flutter/issues/47033

যে সমাধানটি আমার পক্ষে কাজ করেছে: https://github.com/flutter/flutter/issues/47033#issuecomment-571936089

আমি মনে করি এটি প্রবঞ্চনীয় সংস্করণ 1.12.13 + হটফিক্স সম্পর্কিত সম্ভবত একটি সমস্যা যা খুব বেশি ঝাপটায় পড়তে সাহায্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.