【问题标题】:Flutter/dart- download data from mysql server databaseFlutter/dart - 从 mysql 服务器数据库下载数据
【发布时间】:2018-06-25 14:26:45
【问题描述】:

作为序言,我对这一切都是新手,不需要一步一步的信息,只是看看有什么可能。

我一直在尝试将我的 Flutter/dart 应用程序连接到 mysql 后端

我正在使用 sqljocky 连接到它,并且想知道是否有任何用户可以从中下载数据以供离线使用。我阅读了有关 NSUserDefaults(适用于 ios)和 Shared_Preferences(适用于 android)在应用程序上存储持久和简单数据的信息,并想知道这是否是继续前进的正确途径。

【问题讨论】:

标签: dart flutter


【解决方案1】:

我认为这里需要这个答案:

几天前,我不得不处理现有的 MySQL 数据库,并且除了通过网络请求外,没有其他方法可以使用 Dart(有一个与 Dart 2 不兼容的 sqljocky 包)。阅读最佳选项here

这里我将展示一个使用 Flutter http 请求和简单 PHP 和 MySQL 的简单获取数据的示例。

注意:这可能不是 100% 安全的。

如果你在本地服务器上做,你需要运行服务器(例如:apache)和 MySQL(你可以使用 XAMPP 来获取两者)。

  • 第 1 步: 创建数据库。
  • 第 2 步: 在 htdocs(在 XAMP 中)中创建一个文件夹。接下来,在该文件中创建名为 conn.php 的文件。然后,在 sn-p 下面添加并更改 使用您的数据库凭据连接到数据库。

    <?php
    
        $connection = new mysqli("localhost", "username", "password", "db_name");
    
        if (!$connection) {
            echo "connection failed!";
            exit();
        }
    ?>
    

注意:上面的sn-p是一个简单的例子,你可以随意自定义。

  • 第 3 步: 创建名为 fetch_data.php 的 php 文件并复制粘贴到代码 sn-p 下方:

    <?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);
     ?>
    

上面的代码sn-p会从db表中取出数据并显示在json_encode之后。

第 4 步:打开您的 Flutter 项目或创建一个。下面是一个代码 sn-p,它请求获取的数据并使用 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']),
              )),
    );
  }
}

有一件重要的事情,你应该记住:10.0.2.2或者你的机器IP地址(在cmd中输入ipconfig来获取你的IP地址)必须使用,因为模拟器本身是localhost(127.0.0.1)。

注意:我没有使用任何模型或高级东西来向您展示最基本的示例。如果您想要一个出色的 CRUD 示例,请查看 my github repo,您还可以执行一些拉取请求,因为它可以扩展。

如果要插入或更新数据,可以使用http.post(),在php中使用INSERTUPDATE sql语句(最好使用Prepared Statement来防止sql注入)。

你也可以阅读我的文章。在那里,我使用 CRUD 应用程序解释了所有内容。

【讨论】:

    【解决方案2】:

    对于 Android,我们可以使用 SQLite,对于 Flutter,我们有等效的 SQFlite,支持 IOS 和 Android。

    还有其他最好的解决方案,例如Firebase database, Firestore,您还可以创建 API 并通过 HTTP 访问。您也可以将数据存储在 JSON 文件中。

    继续这些可能会有所帮助:

    Using mysql in flutter.

    Flutter connecting to a database in server.

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多