作为序言,我对所有这些都不熟悉,不需要一步一步的信息,只是看看有什么可能。
我一直在尝试将我的 flutter/dart 应用程序连接到 mysql 后端
我使用 sqljocky 连接到它,想知道用户是否可以从它下载数据以供离线使用。我阅读了 NSUserDefaults(用于 ios)和 Shared_Preferences(用于 android)以在应用程序上存储持久和简单的数据,并想知道这是否是继续的正确途径。
我认为这里需要这个答案:
几天前,我不得不处理现有的 MySQL 数据库,除了通过网络请求(有一个与 Dart 2 不兼容的 sqljocky 包)之外,没有办法用 Dart 来处理。在这里阅读最佳选择。
在这里,我将展示一个使用 Flutter http 请求和简单的 PHP 和 MySQL 进行简单获取数据的示例。
注意:这可能不是 100% 安全的。
如果你在本地服务器上做,你需要运行服务器(例如:apache)和 MySQL(你可以使用 XAMPP 来获得两者)。
第 2 步:在 htdocs(在 XAMP 中)中创建一个文件夹。接下来,在该文件中创建名为 conn.php 的文件。然后,添加以下代码段并更改您的数据库凭据以连接到数据库。
<?php
$connection = new mysqli("localhost", "username", "password", "db_name");
if (!$connection) {
echo "connection failed!";
exit();
}
?>
Run Code Online (Sandbox Code Playgroud)注意:上面的代码片段是一个简单的示例,您可以根据需要进行自定义。
第 3 步:创建名为 fetch_data.php 的 php 文件并复制粘贴下面的代码片段:
<?php
include("conn.php");
$queryResult = $connection->
query("SELECT * FROM your_table");//change your_table with your database table that you want to fetch values
$result = array();
while ($fetchdata=$queryResult->fetch_assoc()) {
$result[] = $fetchdata;
}
echo json_encode($result);
?>
Run Code Online (Sandbox Code Playgroud)上面的代码片段将从 db 表中获取数据并在json_encode.
第 4 步:打开您的 Flutter 项目或创建一个。下面是一个代码片段,它请求获取的数据并使用ListView.
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Login",
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List data = [];
@override
void initState() {
fetchData();
super.initState();
}
void fetchData() async {
final response = await http.get('http://10.0.2.2/fluttertest/fetch_data.php');
if (response.statusCode == 200) {
setState(() {
data = json.decode(response.body);
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: ListView.builder(
itemCount: data.length,
itemBuilder: (BuildContext context, int index) => ListTile(
title: Text(data[index]['title']),
)),
);
}
}
Run Code Online (Sandbox Code Playgroud)
有一件重要的事情,你应该记住:10.0.2.2或者你的机器 IP 地址(输入ipconfigcmd 来获取你的 IP 地址)必须使用,因为模拟器本身是 localhost(127.0.0.1)。
注意:我没有使用任何模型或高级内容来向您展示最低限度的示例。如果您想要一个很棒的 CRUD 示例,请查看我的 github 存储库,您还可以执行一些拉取请求,因为它可以扩展。
如果要插入或更新数据,可以http.post()在php中使用和使用INSERT,UPDATEsql语句(最好使用Prepared Statement防止sql注入)。
你也可以阅读我的文章。在那里我已经使用 CRUD 应用程序解释了所有内容。
| 归档时间: |
|
| 查看次数: |
14547 次 |
| 最近记录: |