Flutter学习笔记——day1


本文是使用Android studio中flutter模板项目实验的
注意:植入FlutterView后页面会采用沉侵式布局,如果没有设置透明状态栏就会导致页面被遮挡

一、简单使用

1、新建activity继承FlutterActivity


class TwoActivity : FlutterActivity() {

//    private var routeStr = ""
//
//    override fun createFlutterView(context: Context): FlutterView {
//        val matchParent = WindowManager.LayoutParams(-1, -1)
//        val nativeView = this.createFlutterNativeView()
//        val flutterView = FlutterView(this@TwoActivity, null as AttributeSet?, nativeView)
//        flutterView.setInitialRoute(routeStr)
//        flutterView.setLayoutParams(matchParent)
//        this.setContentView(flutterView)
//        return flutterView
//    }

    override fun onCreate(savedInstanceState: Bundle?) {
//        routeStr = "/first_page"  //指定启动页面
        super.onCreate(savedInstanceState)
        GeneratedPluginRegistrant.registerWith(this)
    }
}

2、修改AndroidManifest文件

  <application
    android:name="io.flutter.app.FlutterApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="flutter_app">
    ......
    <activity
        android:name=".TwoActivity"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
        android:hardwareAccelerated="true"
        android:launchMode="singleTop"
        android:theme="@style/Theme.AppCompat"
        android:windowSoftInputMode="adjustResize">
        <meta-data
            android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
            android:value="true" />
    </activity>
</application>

3、main.dart文件

void main() {
  runApp(FlutterView());
}

class FlutterView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FlutterView',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: MyHomePage(),
        routes: <String, WidgetBuilder> {
        //注册页面路径,用于指定启动
          'first_page': (BuildContext context) => FirstPage(),
          'one_page' : (BuildContext context) => OnePage(),
        }
    );
  }
}

//StatefulWidget 页面数据可变
class MyHomePage extends StatefulWidget {
 ......
}

//StatelessWidget 页面数据不可变
class OnePage extends StatelessWidget {
......
}

class FirstPage extends StatelessWidget {
......
}
二、在原生Activity中将Flutter布局当做View使用

1、新建空白Activity1(继承Activity/AppCompatActivity)
2、在AndroidManifest中注册

   <activity
            android:name=".OneActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop"
            android:theme="@style/Theme.AppCompat"
            android:windowSoftInputMode="adjustResize">
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
        </activity>

3、新建布局文件activity_one.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <io.flutter.view.FlutterView
        android:id="@+id/flutter_view_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

4、编辑OneActivity中业务逻辑

class OneActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
  
        //确保FlutterMain初始化完成
        FlutterMain.ensureInitializationComplete(applicationContext, null)
        
        setContentView(R.layout.activity_one)  //注意设置布局的位置
        
        var flutterRunArguments = FlutterRunArguments()
        //绑定路径
        flutterRunArguments.bundlePath = FlutterMain.findAppBundlePath(applicationContext)
        //获取入口 main方法
        flutterRunArguments.entrypoint = "main"
        //指定启动页面
        //  flutter_view_1.setInitialRoute("one_page")
        //flutterview 运行设置绑定
        flutter_view_1.runFromBundle(flutterRunArguments)
    }

    override fun onPause() {
        super.onPause()
        flutter_view_1.onPause()
    }

    override fun onPostResume() {
        super.onPostResume()
        flutter_view_1.onPostResume()
    }
}

  1. 新建Activity,build报错Gradle DSL method not found: '1.3.21()' Possible causes:<ul><li>The project 'android' may be using a version of Gradle that does not contain the method. Open Gradle wrapper file</li><li>The build file may be missing a Gradle plugin. Apply Gradle plugin</li>
    原因:工程bulid.gradle文件中ext.kotlin_version = '1.3.21' '1.2.71'导致的
    处理:修改工程bulid.gradle文件中ext.kotlin_version = '1.3.21' '1.2.71'ext.kotlin_version = '1.2.71' ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值