Android端代码
package com.wk.flutterhybridandroid; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentTransaction; import io.flutter.embedding.android.FlutterFragment; import android.os.Bundle; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.test).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); //方法1 //tx.replace(R.id.someContainer, FlutterFragment.createDefault()); //方法2 给Flutter传参 tx.replace(R.id.someContainer, FlutterFragment .withNewEngine() .initialRoute("{name:'devio', dataList: ['aa']}") .build()); tx.commit(); } }); findViewById(R.id.test2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FlutterAppActivity.start(MainActivity.this, ""); } }); } }
Flutter端代码
import 'dart:async'; import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() => runApp(MyApp(initParams: window.defaultRouteName)); class MyApp extends StatelessWidget { final String? initParams; const MyApp({Key? key, this.initParams}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter 混合开发', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter 混合开发', initParams: this.initParams), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key, required this.title, required this.initParams}) : super(key: key); final String title; final String? initParams; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( // Codrizontal). mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'initParams: ${widget.initParams}', style: TextStyle(fontSize: 20), ), Text( ' ', style: Theme.of(context).textTheme.headline4, ), ], ), ), ); } }