【问题标题】:Flutter 'No Overlay widget exists above EditableText' error when using ProviderFlutter 使用 Provider 时出现“EditableText 上方不存在覆盖小部件”错误
【发布时间】: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();
              }
            },
          );
        },
      ),
    );
  }
}

【问题讨论】:

    标签: flutter dart flutter-provider


    【解决方案1】:

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

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

    【讨论】:

    • 您可以添加更多关于您的答案的详细信息。
    • 这对我有用。当相关小部件上方没有导航器时,似乎会出现此错误。例如使用 builder 参数的 MaterialApp,没有包含子树的导航器。
    猜你喜欢
    • 2022-01-19
    • 2020-09-25
    • 2021-09-28
    • 2021-07-16
    • 2020-01-10
    • 2021-02-26
    • 2012-04-01
    • 2019-05-08
    • 2020-01-07
    相关资源
    最近更新 更多