原生WebView通过url来加载FlutterWeb项目。
注意:分为两个项目,一个是Android原生项目,一个是FlutterWeb项目。Android原生通过WebView加载FlutterWeb项目
Android原生 以下内容在Android原生项目上更改。
- 依赖
implementation 'com.github.wendux:DSBridge-Android:3.0-SNAPSHOT'
项目级别build.gradle
maven { url 'https://jitpack.io' }
- 布局
- MainActivity.kt
class MainActivity : AppCompatActivity() {var mBinding: ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)mBinding?.btn?.setOnClickListener {
val intent = Intent(this@MainActivity, MyFlutterActivity::class.java)
startActivity(intent)
}
mBinding?.dWebView?.settings?.let {
it.userAgentString = it.userAgentString + "winit"
it.allowUniversalAccessFromFileURLs = true
it.allowFileAccessFromFileURLs = true
it.allowContentAccess = true
it.allowFileAccess = true
it.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
it.javaScriptEnabled = true
}
val map: HashMap, String> = HashMap, String>()
map.put("test", "ddddd")
mBinding?.dWebView?.addJavascriptInterface(JsBridge(this),"test")
mBinding?.dWebView?.loadUrl("http://10.199.17.135:8080/web/index.html", map)}
- JsBridge
class JsBridge(val context: Context) {@JavascriptInterface
fun hello(msg: String?): String {
println("test")
Toast.makeText(context, "test$msg", Toast.LENGTH_SHORT).show()
return "Android native test"
}
}
FlutterWeb 以下内容在FlutterWeb上更改
- 编写js代码
文章图片
function flutterGetJs(text){
//test为客户端传递过来的namespace,hello为客户端的方法
var result = test.hello("js调用了android中的hello方法");
return result;
}
- js在index.html中注册
文章图片
src="https://www.it610.com/article/js/config.js" type="application/javascript">
- flutter调用
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {//调用js代码
var result = js.context.callMethod("flutterGetJs",["123"]);
Fluttertoast.showToast(msg: result);
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'default',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero;
the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: ProviderTestPage01(),
routes: routeTable,
);
}
}
- 测试结果
文章图片
flutter build web
文章图片
会在flutter_web/build下生成如下内容:
文章图片
将web打包部署到服务端。
将FlutterWeb部署到服务端(本地服务) tomcat安装可以参考mac安装tomcat
我们将
web
这个文件夹移动到tomcat/webapps
目录下文章图片
需要注意的是,index.html中如果不修改base href,部署后是显示不出来页面的
所以,我们需要打开index.html进行编辑
修改
为
上述的ip为你自己电脑的ip地址。文章图片
最后,我们就可以使用浏览器进行访问了
在浏览器中输入http://10.99.174.134:8080/web/index.html ,回车,出现了如下页面
文章图片
推荐阅读
- 程序员|Flutter 10天高仿大厂App及小技巧积累总结,被阿里面试官征服了
- 程序员|Flutter(实战技巧,最新阿里Android高级面试题及答案)
- Android开发|Flutter 小技巧之 MediaQuery 和 build 优化你不知道的秘密
- java|第十六课(Android打包发布)
- Android getActionBar() 返回null
- Android开发的日常记录|【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
- Android|AndroidStudio003--Button组件的使用,监听及事件处理
- Android|Android Studio连接自带模拟器失败怎么办(强烈建议使用第三方模拟器(含各类模拟器下载地址))
- Android|Android接入穿山甲SDK并实现开屏广告