Flutter 使用 Provider 时出现“EditableText 上方不存在覆盖小部件”错误

Posted

技术标签:

【中文标题】Flutter 使用 Provider 时出现“EditableText 上方不存在覆盖小部件”错误【英文标题】:Flutter 'No Overlay widget exists above EditableText' error when using Provider 【发布时间】:2020-11-16 22:30:41 【问题描述】:

嘿,我有一个 MultiProvider 设置,现在在点击 TextField 时会抛出此错误,而在我实现多提供程序之前它没有:

No Overlay widget exists above EditableText

错误文本没有给出任何有用的指示,说明代码中的问题是什么,这里是代码:

import 'package:***_mobile/Providers/user_auth_provider.dart';
import 'package:***_mobile/screens/browsing_page.dart';
import 'package:***_mobile/screens/film_details_page.dart';
import 'package:***_mobile/screens/login_screen.dart';
import 'package:***_mobile/screens/venue_details_page.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() 
  runApp(***());


class *** extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return ChangeNotifierProvider(
      create: (_) => UserRepository.instance(),
      child: Consumer(
        builder: (context, UserRepository user, _) 
          return MaterialApp(
            title: 'Flutter Demo',
            routes: 
              '/browsing': (ctx) => BrowsingPage(),
              '/venueDetails': (ctx) => VenueDetailPage(),
              '/filmDetails': (ctx) => FilmDetailPage(),
              '/login': (ctx) => LoginPage()
            ,
            theme: ThemeData(
              primarySwatch: Colors.blue,
              visualDensity: VisualDensity.adaptivePlatformDensity,
            ),
            builder: (ctx, _) 
              switch (user.status) 
                case Status.Uninitialized:
                  return LoginPage();
                case Status.Unauthenticated:
                  return LoginPage();
                case Status.Authenticating:
                  return LoginPage();
                case Status.Authenticated:
                  return BrowsingPage();
                default:
                  return LoginPage();
              
            ,
          );
        ,
      ),
    );
  

【问题讨论】:

【参考方案1】:

请原谅我的语言,我希望你能明白我写的是什么。 您需要包装从导航器中的构建器返回的每个小部件

Navigator(
      
        onGenerateRoute: (_) => MaterialPageRoute(
          builder: (ctx) => Scaffold(
            body: Stack(
              children: [
                Positioned.fill(
                    child: buildBody(
                        context.watch<AuthScopeViewModel>().screenType))
              ],
            ),
          ),
        ),
      );

【讨论】:

您可以添加更多关于您的答案的详细信息。 这对我有用。当相关小部件上方没有导航器时,似乎会出现此错误。例如使用 builder 参数的 MaterialApp,没有包含子树的导航器。

以上是关于Flutter 使用 Provider 时出现“EditableText 上方不存在覆盖小部件”错误的主要内容,如果未能解决你的问题,请参考以下文章

--provider=docker时出现的问题

构建 Gradle 时出现问题(无法创建任务 ':path_provider_android:generateDebugUnitTestConfig')。在颤振中为 android

使用 Flutter 插入 sqflite 时出现问题

添加种子数据时出现以下错误::'No database provider has been configured for this DbContext

使用Maven时出现“jssecacerts PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilde”错

添加水印时出现FFmpeg错误:未覆盖 - 退出