flutter应用安卓商店合规化处理

这篇博客介绍了在Flutter应用中如何处理用户权限,特别是在Android平台上。开发者需要在`main`函数中添加授权对话框,确保在用户同意收集设备信息如MAC地址和IMEI后,才能初始化第三方插件如极光和融云。当遇到路由跳转问题时,可能因为缺少合适的Navigator导致错误。解决方案是将`MaterialApp`内容包裹在另外的StatelessWidget或StatefulWidget中。博客还提及了用户协议和隐私政策页面的跳转问题及其解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓商店在应用上架时会要求用户清楚并授权之后才可收集用户和设备信息,如mac地址 imei等

1、安卓开发者会在application中进行此操作,flutter应用可在main文件中添加授权对话框,

flutter的MyApp()可等同看作是应用的application入口。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

///等同于应用的application
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage());
  }
}


///为了解决路由跳转问题
class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("route"),
      ),
      floatingActionButton: FloatingActionButton(onPressed: (){
        Navigator.push(contexts,MaterialPageRoute(
                            builder: (context) {
                              return AgreementPage(1);
                            },
                          ));
      }),
    );
  }
}

在MyApp()中添加对话框,用户点击同意即进行部分三方插件的初始化,如极光、融云等。

可在MyApp()的build的body中添加判断,初次安装先处理授权框,同意后再正常初始化内容

  @override
  Widget build(BuildContext context) {
    appContext = context;
    return FutureBuilder<CacheManager>(
      future: CacheManager.preInit(context),//进行初始化
      builder: (BuildContext context, AsyncSnapshot<CacheManager> snapshot) {
        //定义route
        var _widget = (snapshot.connectionState == ConnectionState.done && 
                   snapshot.data != null)
            ? Router(routerDelegate: _routeDelegate)
            : snapshot.connectionState != ConnectionState.done
            ? Scaffold(
                    body: Center(
                      child: CircularProgressIndicator(color: ColorTool.red),
                    ),
                  )
                :_showAgreementWindow(appContext);
        return _widget;
      },
    );
  }

2、授权框中会有可点击的用户协议和隐私政策,跳转可能会遇到问题

Navigator operation requested with a context that does not include a Navigator.

这是由于MyApp 是一个可变StatefulWidget这种情况下,如上情况提示路由控制器需要一个context但是当前navigator并不包含,通俗的讲要使用路由(Navigator),根控件不能直接是 MaterialApp.解决方法:将 MaterialApp 内容再使用 StatelessWeight 或 StatefulWeight 包裹一层。如图1所示。

可参考flutter报错Navigator operation requested with a context that does not include a Navigator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值