Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如果在刚进入一个页面的时候就显示easyloading.show,我该在哪里调用呢 #7

Closed
NSChris opened this issue Mar 12, 2020 · 16 comments

Comments

@NSChris
Copy link

NSChris commented Mar 12, 2020

比如我刚进入一个页面
在他的initState我在后台取数据,这时候需要一个loading显示,然后取完数据loading消失
image
像我上面这样调用的话会报出找不到buildContext的错误
image
那我要怎么调用它呢,谢谢

@nslogx
Copy link
Owner

nslogx commented Mar 12, 2020

@NSChris
可以提供一个可复现的demo么
另外,Flutter版本是什么

@NSChris
Copy link
Author

NSChris commented Mar 12, 2020

@huangjianke
版本的话
Flutter 1.12.13+hotfix.8 • channel stable •
https://github.com/flutter/flutter.git
Framework • revision 0b8abb4724 (4 weeks ago) • 2020-02-11 11:44:36 -0800
Engine • revision e1e6ced81d
Tools • Dart 2.7.0

demo新建一个如下的Home.dart文件
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);

@OverRide
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State {
@OverRide
void initState() {
super.initState();
setDS();
}

void setDS() {
// EasyLoading.show(status:"请稍等...");
//获取数据
}

@OverRide
Widget build(BuildContext context) {
return FlutterEasyLoading(
child: Container(
child: Text("data"),
));
}
}

@nslogx
Copy link
Owner

nslogx commented Mar 12, 2020

@huangjianke
版本的话
Flutter 1.12.13+hotfix.8 • channel stable •
https://github.com/flutter/flutter.git
Framework • revision 0b8abb4724 (4 weeks ago) • 2020-02-11 11:44:36 -0800
Engine • revision e1e6ced81d
Tools • Dart 2.7.0

demo新建一个如下的Home.dart文件
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);

@OverRide
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State {
@OverRide
void initState() {
super.initState();
setDS();
}

void setDS() {
// EasyLoading.show(status:"请稍等...");
//获取数据
}

@OverRide
Widget build(BuildContext context) {
return FlutterEasyLoading(
child: Container(
child: Text("data"),
));
}
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return FlutterEasyLoading(
      child: MaterialApp(
        title: 'Flutter EasyLoading',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(title: 'Flutter EasyLoading'),
      ),
    );
  }
}

确认下这里是否有用 FlutterEasyLoading组件作为根组件?

@NSChris
Copy link
Author

NSChris commented Mar 12, 2020

@huangjianke
在main.dart里面是加入了的
我在Container里面加入的按钮onTap事件里调用show是没有问题的
image

@NSChris
Copy link
Author

NSChris commented Mar 12, 2020

我觉得是因为initState()的生命周期是在BuildContext之前的
我在那里面调用是找不到context的

@nslogx
Copy link
Owner

nslogx commented Mar 12, 2020

我觉得是因为initState()的生命周期是在BuildContext之前的
我在那里面调用是找不到context的

好的,我调试下

nslogx added a commit that referenced this issue Mar 12, 2020
@nslogx
Copy link
Owner

nslogx commented Mar 12, 2020

@NSChris

我在dev分支调整了下,你那边本地可以修改一下试试,我这边再测试下,后面没什么问题会尽快发布新版。

感谢反馈

@NSChris
Copy link
Author

NSChris commented Mar 12, 2020

@huangjianke
改了已经可以了,然后现在我又发现一个问题就是在页面有bottomNavigationBar和floatingActionButton的框架下,loading的mask不能把下面的tabs和悬浮按钮遮挡住,这个是我没用对吗
image

@nslogx
Copy link
Owner

nslogx commented Mar 12, 2020

@huangjianke
改了已经可以了,然后现在我又发现一个问题就是在页面有bottomNavigationBar和floatingActionButton的框架下,loading的mask不能把下面的tabs和悬浮按钮遮挡住,这个是我没用对吗
image

image
我这边测试是正常的,确认下FlutterEasyLoading是不是App的根组件?

@NSChris
Copy link
Author

NSChris commented Mar 12, 2020

@huangjianke
啊.. 确实 刚才测试那个initState的时候把FlutterEasyLoading放到了home下面
是没问题的,谢谢

@nslogx
Copy link
Owner

nslogx commented Mar 12, 2020

@huangjianke
啊.. 确实 刚才测试那个initState的时候把FlutterEasyLoading放到了home下面
是没问题的,谢谢

好的。

@nslogx
Copy link
Owner

nslogx commented Mar 19, 2020

@NSChris 发布了新版,在 initState 中可以这样使用

WidgetsBinding.instance.addPostFrameCallback((_) {
  EasyLoading.showSuccess('Great Success!');
});

@NSChris
Copy link
Author

NSChris commented Mar 19, 2020

@huangjianke 好的 我晚上试试 谢谢提醒

@NSChris
Copy link
Author

NSChris commented Mar 19, 2020

@huangjianke 换上了是可以用,但是感觉没有之前用着方便,暂时这样用吧

@nslogx
Copy link
Owner

nslogx commented Mar 20, 2020

@huangjianke 换上了是可以用,但是感觉没有之前用着方便,暂时这样用吧

因为在 initState 中使用相对来说比较特殊,上一个版本尝试着在内部使用 WidgetsBinding.instance.addPostFrameCallback 来解决这个问题,后来发现会引起其他的一些bug,我后面会继续跟进这个问题。

@NSChris
Copy link
Author

NSChris commented Mar 20, 2020

好的 先这样用着

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants